File: Mathlib/Algebra/Homology/ShortComplex/HomologicalComplex.lean

full_name: HomologicalComplex.shortComplexFunctor'_map_τ₁
code: /-- The functor `HomologicalComplex C c ⥤ ShortComplex C` which sends a homological
complex `K` to the short complex `K.X i ⟶ K.X j ⟶ K.X k` for arbitrary indices `i`, `j` and `k`. -/
@[simps]
def shortComplexFunctor' (i j k : ι) : HomologicalComplex C c ⥤ ShortComplex C 
goal: ∀ {X Y : HomologicalComplex C c} (f : X ⟶ Y), ((HomologicalComplex.shortComplexFunctor' C c i j k).map f).τ₁ = f.f i

full_name: HomologicalComplex.shortComplexFunctor'_obj_f
code: /-- The functor `HomologicalComplex C c ⥤ ShortComplex C` which sends a homological
complex `K` to the short complex `K.X i ⟶ K.X j ⟶ K.X k` for arbitrary indices `i`, `j` and `k`. -/
@[simps]
def shortComplexFunctor' (i j k : ι) : HomologicalComplex C c ⥤ ShortComplex C 
goal: ((HomologicalComplex.shortComplexFunctor' C c i j k).obj K).f = K.d i j

full_name: HomologicalComplex.shortComplexFunctor'_obj_X₁
code: /-- The functor `HomologicalComplex C c ⥤ ShortComplex C` which sends a homological
complex `K` to the short complex `K.X i ⟶ K.X j ⟶ K.X k` for arbitrary indices `i`, `j` and `k`. -/
@[simps]
def shortComplexFunctor' (i j k : ι) : HomologicalComplex C c ⥤ ShortComplex C 
goal: ((HomologicalComplex.shortComplexFunctor' C c i j k).obj K).X₁ = K.X i

full_name: HomologicalComplex.shortComplexFunctor'_map_τ₂
code: /-- The functor `HomologicalComplex C c ⥤ ShortComplex C` which sends a homological
complex `K` to the short complex `K.X i ⟶ K.X j ⟶ K.X k` for arbitrary indices `i`, `j` and `k`. -/
@[simps]
def shortComplexFunctor' (i j k : ι) : HomologicalComplex C c ⥤ ShortComplex C 
goal: ∀ {X Y : HomologicalComplex C c} (f : X ⟶ Y), ((HomologicalComplex.shortComplexFunctor' C c i j k).map f).τ₂ = f.f j

full_name: HomologicalComplex.shortComplexFunctor'_obj_X₃
code: /-- The functor `HomologicalComplex C c ⥤ ShortComplex C` which sends a homological
complex `K` to the short complex `K.X i ⟶ K.X j ⟶ K.X k` for arbitrary indices `i`, `j` and `k`. -/
@[simps]
def shortComplexFunctor' (i j k : ι) : HomologicalComplex C c ⥤ ShortComplex C 
goal: ((HomologicalComplex.shortComplexFunctor' C c i j k).obj K).X₃ = K.X k

full_name: HomologicalComplex.shortComplexFunctor'_map_τ₃
code: /-- The functor `HomologicalComplex C c ⥤ ShortComplex C` which sends a homological
complex `K` to the short complex `K.X i ⟶ K.X j ⟶ K.X k` for arbitrary indices `i`, `j` and `k`. -/
@[simps]
def shortComplexFunctor' (i j k : ι) : HomologicalComplex C c ⥤ ShortComplex C 
goal: ∀ {X Y : HomologicalComplex C c} (f : X ⟶ Y), ((HomologicalComplex.shortComplexFunctor' C c i j k).map f).τ₃ = f.f k

full_name: HomologicalComplex.shortComplexFunctor'
code: /-- The functor `HomologicalComplex C c ⥤ ShortComplex C` which sends a homological
complex `K` to the short complex `K.X i ⟶ K.X j ⟶ K.X k` for arbitrary indices `i`, `j` and `k`. -/
@[simps]
def shortComplexFunctor' (i j k : ι) : HomologicalComplex C c ⥤ ShortComplex C 
goal: HomologicalComplex C c ⥤ CategoryTheory.ShortComplex C

full_name: HomologicalComplex.shortComplexFunctor'_obj_X₂
code: /-- The functor `HomologicalComplex C c ⥤ ShortComplex C` which sends a homological
complex `K` to the short complex `K.X i ⟶ K.X j ⟶ K.X k` for arbitrary indices `i`, `j` and `k`. -/
@[simps]
def shortComplexFunctor' (i j k : ι) : HomologicalComplex C c ⥤ ShortComplex C 
goal: ((HomologicalComplex.shortComplexFunctor' C c i j k).obj K).X₂ = K.X j

full_name: HomologicalComplex.shortComplexFunctor'_obj_g
code: /-- The functor `HomologicalComplex C c ⥤ ShortComplex C` which sends a homological
complex `K` to the short complex `K.X i ⟶ K.X j ⟶ K.X k` for arbitrary indices `i`, `j` and `k`. -/
@[simps]
def shortComplexFunctor' (i j k : ι) : HomologicalComplex C c ⥤ ShortComplex C 
goal: ((HomologicalComplex.shortComplexFunctor' C c i j k).obj K).g = K.d j k

full_name: HomologicalComplex.shortComplexFunctor
code: /-- The functor `HomologicalComplex C c ⥤ ShortComplex C` which sends a homological
complex `K` to the short complex `K.X (c.prev i) ⟶ K.X i ⟶ K.X (c.next i)`. -/
@[simps!]
noncomputable def shortComplexFunctor (i : ι) 
goal: HomologicalComplex C c ⥤ CategoryTheory.ShortComplex C

full_name: HomologicalComplex.shortComplexFunctor_map_τ₃
code: /-- The functor `HomologicalComplex C c ⥤ ShortComplex C` which sends a homological
complex `K` to the short complex `K.X (c.prev i) ⟶ K.X i ⟶ K.X (c.next i)`. -/
@[simps!]
noncomputable def shortComplexFunctor (i : ι) 
goal: ∀ {X Y : HomologicalComplex C c} (f : X ⟶ Y), ((HomologicalComplex.shortComplexFunctor C c i).map f).τ₃ = f.f (c.next i)

full_name: HomologicalComplex.shortComplexFunctor_map_τ₁
code: /-- The functor `HomologicalComplex C c ⥤ ShortComplex C` which sends a homological
complex `K` to the short complex `K.X (c.prev i) ⟶ K.X i ⟶ K.X (c.next i)`. -/
@[simps!]
noncomputable def shortComplexFunctor (i : ι) 
goal: ∀ {X Y : HomologicalComplex C c} (f : X ⟶ Y), ((HomologicalComplex.shortComplexFunctor C c i).map f).τ₁ = f.f (c.prev i)

full_name: HomologicalComplex.shortComplexFunctor_obj_g
code: /-- The functor `HomologicalComplex C c ⥤ ShortComplex C` which sends a homological
complex `K` to the short complex `K.X (c.prev i) ⟶ K.X i ⟶ K.X (c.next i)`. -/
@[simps!]
noncomputable def shortComplexFunctor (i : ι) 
goal: ((HomologicalComplex.shortComplexFunctor C c i).obj K).g = K.d i (c.next i)

full_name: HomologicalComplex.shortComplexFunctor_obj_X₃
code: /-- The functor `HomologicalComplex C c ⥤ ShortComplex C` which sends a homological
complex `K` to the short complex `K.X (c.prev i) ⟶ K.X i ⟶ K.X (c.next i)`. -/
@[simps!]
noncomputable def shortComplexFunctor (i : ι) 
goal: ((HomologicalComplex.shortComplexFunctor C c i).obj K).X₃ = K.X (c.next i)

full_name: HomologicalComplex.shortComplexFunctor_obj_X₂
code: /-- The functor `HomologicalComplex C c ⥤ ShortComplex C` which sends a homological
complex `K` to the short complex `K.X (c.prev i) ⟶ K.X i ⟶ K.X (c.next i)`. -/
@[simps!]
noncomputable def shortComplexFunctor (i : ι) 
goal: ((HomologicalComplex.shortComplexFunctor C c i).obj K).X₂ = K.X i

full_name: HomologicalComplex.shortComplexFunctor_obj_f
code: /-- The functor `HomologicalComplex C c ⥤ ShortComplex C` which sends a homological
complex `K` to the short complex `K.X (c.prev i) ⟶ K.X i ⟶ K.X (c.next i)`. -/
@[simps!]
noncomputable def shortComplexFunctor (i : ι) 
goal: ((HomologicalComplex.shortComplexFunctor C c i).obj K).f = K.d (c.prev i) i

full_name: HomologicalComplex.shortComplexFunctor_obj_X₁
code: /-- The functor `HomologicalComplex C c ⥤ ShortComplex C` which sends a homological
complex `K` to the short complex `K.X (c.prev i) ⟶ K.X i ⟶ K.X (c.next i)`. -/
@[simps!]
noncomputable def shortComplexFunctor (i : ι) 
goal: ((HomologicalComplex.shortComplexFunctor C c i).obj K).X₁ = K.X (c.prev i)

full_name: HomologicalComplex.shortComplexFunctor_map_τ₂
code: /-- The functor `HomologicalComplex C c ⥤ ShortComplex C` which sends a homological
complex `K` to the short complex `K.X (c.prev i) ⟶ K.X i ⟶ K.X (c.next i)`. -/
@[simps!]
noncomputable def shortComplexFunctor (i : ι) 
goal: ∀ {X Y : HomologicalComplex C c} (f : X ⟶ Y), ((HomologicalComplex.shortComplexFunctor C c i).map f).τ₂ = f.f i

full_name: HomologicalComplex.natIsoSc'
code: /-- The natural isomorphism `shortComplexFunctor C c j ≅ shortComplexFunctor' C c i j k`
when `c.prev j = i` and `c.next j = k`. -/
@[simps!]
noncomputable def natIsoSc' (i j k : ι) (hi : c.prev j = i) (hk : c.next j = k) :
    shortComplexFunctor C c j ≅ shortComplexFunctor' C c i j k 
goal: HomologicalComplex.shortComplexFunctor C c j ≅ HomologicalComplex.shortComplexFunctor' C c i j k

full_name: HomologicalComplex.natIsoSc'_inv_app_τ₃
code: /-- The natural isomorphism `shortComplexFunctor C c j ≅ shortComplexFunctor' C c i j k`
when `c.prev j = i` and `c.next j = k`. -/
@[simps!]
noncomputable def natIsoSc' (i j k : ι) (hi : c.prev j = i) (hk : c.next j = k) :
    shortComplexFunctor C c j ≅ shortComplexFunctor' C c i j k 
goal: ((HomologicalComplex.natIsoSc' C c i j k hi hk).inv.app X).τ₃ = (X.XIsoOfEq hk).inv

full_name: HomologicalComplex.natIsoSc'_inv_app_τ₂
code: /-- The natural isomorphism `shortComplexFunctor C c j ≅ shortComplexFunctor' C c i j k`
when `c.prev j = i` and `c.next j = k`. -/
@[simps!]
noncomputable def natIsoSc' (i j k : ι) (hi : c.prev j = i) (hk : c.next j = k) :
    shortComplexFunctor C c j ≅ shortComplexFunctor' C c i j k 
goal: ((HomologicalComplex.natIsoSc' C c i j k hi hk).inv.app X).τ₂ = 𝟙 (X.X j)

full_name: HomologicalComplex.natIsoSc'_hom_app_τ₂
code: /-- The natural isomorphism `shortComplexFunctor C c j ≅ shortComplexFunctor' C c i j k`
when `c.prev j = i` and `c.next j = k`. -/
@[simps!]
noncomputable def natIsoSc' (i j k : ι) (hi : c.prev j = i) (hk : c.next j = k) :
    shortComplexFunctor C c j ≅ shortComplexFunctor' C c i j k 
goal: ((HomologicalComplex.natIsoSc' C c i j k hi hk).hom.app X).τ₂ = 𝟙 (X.X j)

full_name: HomologicalComplex.natIsoSc'_hom_app_τ₁
code: /-- The natural isomorphism `shortComplexFunctor C c j ≅ shortComplexFunctor' C c i j k`
when `c.prev j = i` and `c.next j = k`. -/
@[simps!]
noncomputable def natIsoSc' (i j k : ι) (hi : c.prev j = i) (hk : c.next j = k) :
    shortComplexFunctor C c j ≅ shortComplexFunctor' C c i j k 
goal: ((HomologicalComplex.natIsoSc' C c i j k hi hk).hom.app X).τ₁ = (X.XIsoOfEq hi).hom

full_name: HomologicalComplex.natIsoSc'_inv_app_τ₁
code: /-- The natural isomorphism `shortComplexFunctor C c j ≅ shortComplexFunctor' C c i j k`
when `c.prev j = i` and `c.next j = k`. -/
@[simps!]
noncomputable def natIsoSc' (i j k : ι) (hi : c.prev j = i) (hk : c.next j = k) :
    shortComplexFunctor C c j ≅ shortComplexFunctor' C c i j k 
goal: ((HomologicalComplex.natIsoSc' C c i j k hi hk).inv.app X).τ₁ = (X.XIsoOfEq hi).inv

full_name: HomologicalComplex.natIsoSc'_hom_app_τ₃
code: /-- The natural isomorphism `shortComplexFunctor C c j ≅ shortComplexFunctor' C c i j k`
when `c.prev j = i` and `c.next j = k`. -/
@[simps!]
noncomputable def natIsoSc' (i j k : ι) (hi : c.prev j = i) (hk : c.next j = k) :
    shortComplexFunctor C c j ≅ shortComplexFunctor' C c i j k 
goal: ((HomologicalComplex.natIsoSc' C c i j k hi hk).hom.app X).τ₃ = (X.XIsoOfEq hk).hom

full_name: HomologicalComplex.sc'
code: /-- The short complex `K.X i ⟶ K.X j ⟶ K.X k` for arbitrary indices `i`, `j` and `k`. -/
abbrev sc' 
goal: CategoryTheory.ShortComplex C

full_name: HomologicalComplex.sc
code: /-- The short complex `K.X (c.prev i) ⟶ K.X i ⟶ K.X (c.next i)`. -/
noncomputable abbrev sc 
goal: CategoryTheory.ShortComplex C

full_name: HomologicalComplex.isoSc'
code: /-- The canonical isomorphism `K.sc j ≅ K.sc' i j k` when `c.prev j = i` and `c.next j = k`. -/
noncomputable abbrev isoSc' (hi : c.prev j = i) (hk : c.next j = k) :
    K.sc j ≅ K.sc' i j k 
goal: K.sc j ≅ K.sc' i j k

full_name: HomologicalComplex.HasHomology
code: /-- A homological complex `K` has homology in degree `i` if the associated
short complex `K.sc i` has. -/
abbrev HasHomology 
goal: Prop

full_name: HomologicalComplex.homology
code: /-- The homology in degree `i` of a homological complex. -/
noncomputable def homology 
goal: C

full_name: HomologicalComplex.cycles
code: /-- The cycles in degree `i` of a homological complex. -/
noncomputable def cycles 
goal: C

full_name: HomologicalComplex.iCycles
code: /-- The inclusion of the cycles of a homological complex. -/
noncomputable def iCycles : K.cycles i ⟶ K.X i 
goal: K.cycles i ⟶ K.X i

full_name: HomologicalComplex.homologyπ
code: /-- The homology class map from cycles to the homology of a homological complex. -/
noncomputable def homologyπ : K.cycles i ⟶ K.homology i 
goal: K.cycles i ⟶ K.homology i

full_name: HomologicalComplex.liftCycles
code: /-- The morphism to `K.cycles i` that is induced by a "cycle", i.e. a morphism
to `K.X i` whose postcomposition with the differential is zero. -/
noncomputable def liftCycles {A : C} (k : A ⟶ K.X i) (j : ι) (hj : c.next i = j)
    (hk : k ≫ K.d i j = 0) : A ⟶ K.cycles i 
goal: A ⟶ K.cycles i

full_name: HomologicalComplex.liftCycles'
code: /-- The morphism to `K.cycles i` that is induced by a "cycle", i.e. a morphism
to `K.X i` whose postcomposition with the differential is zero. -/
noncomputable abbrev liftCycles' {A : C} (k : A ⟶ K.X i) (j : ι) (hj : c.Rel i j)
    (hk : k ≫ K.d i j = 0) : A ⟶ K.cycles i 
goal: A ⟶ K.cycles i

full_name: HomologicalComplex.liftCycles_i
code: @[reassoc (attr := simp)]
lemma liftCycles_i {A : C} (k : A ⟶ K.X i) (j : ι) (hj : c.next i = j)
    (hk : k ≫ K.d i j = 0) : K.liftCycles k j hj hk ≫ K.iCycles i = k 
goal: K.liftCycles k j hj hk ≫ K.iCycles i = k

full_name: HomologicalComplex.toCycles
code: /-- The map `K.X i ⟶ K.cycles j` induced by the differential `K.d i j`. -/
noncomputable def toCycles [K.HasHomology j] :
    K.X i ⟶ K.cycles j 
goal: K.X i ⟶ K.cycles j

full_name: HomologicalComplex.iCycles_d
code: @[reassoc (attr := simp)]
lemma iCycles_d : K.iCycles i ≫ K.d i j = 0 
goal: K.iCycles i ≫ K.d i j = 0

full_name: HomologicalComplex.cyclesIsKernel
code: /-- `K.cycles i` is the kernel of `K.d i j` when `c.next i = j`. -/
noncomputable def cyclesIsKernel (hj : c.next i = j) :
    IsLimit (KernelFork.ofι (K.iCycles i) (K.iCycles_d i j)) 
goal: CategoryTheory.Limits.IsLimit (CategoryTheory.Limits.KernelFork.ofι (K.iCycles i) ⋯)

full_name: HomologicalComplex.toCycles_i
code: @[reassoc (attr := simp)]
lemma toCycles_i [K.HasHomology j] :
    K.toCycles i j ≫ K.iCycles j = K.d i j 
goal: K.toCycles i j ≫ K.iCycles j = K.d i j

full_name: HomologicalComplex.instMonoICycles
code: instance : Mono (K.iCycles i) 
goal: CategoryTheory.Mono (K.iCycles i)

full_name: HomologicalComplex.instEpiHomologyπ
code: instance : Epi (K.homologyπ i) 
goal: CategoryTheory.Epi (K.homologyπ i)

full_name: HomologicalComplex.d_toCycles
code: @[reassoc (attr := simp)]
lemma d_toCycles [K.HasHomology k] :
    K.d i j ≫ K.toCycles j k = 0 
goal: K.d i j ≫ K.toCycles j k = 0

full_name: HomologicalComplex.comp_liftCycles
code: @[reassoc]
lemma comp_liftCycles {A' A : C} (k : A ⟶ K.X i) (j : ι) (hj : c.next i = j)
    (hk : k ≫ K.d i j = 0) (α : A' ⟶ A) :
    α ≫ K.liftCycles k j hj hk = K.liftCycles (α ≫ k) j hj (by rw [assoc, hk, comp_zero]) 
goal: α ≫ K.liftCycles k j hj hk = K.liftCycles (α ≫ k) j hj ⋯

full_name: HomologicalComplex.liftCycles_homologyπ_eq_zero_of_boundary
code: @[reassoc]
lemma liftCycles_homologyπ_eq_zero_of_boundary {A : C} (k : A ⟶ K.X i) (j : ι)
    (hj : c.next i = j) {i' : ι} (x : A ⟶ K.X i') (hx : k = x ≫ K.d i' i) :
    K.liftCycles k j hj (by rw [hx, assoc, K.d_comp_d, comp_zero]) ≫ K.homologyπ i = 0 
goal: K.liftCycles k j hj ⋯ ≫ K.homologyπ i = 0

full_name: HomologicalComplex.toCycles_comp_homologyπ
code: @[reassoc (attr := simp)]
lemma toCycles_comp_homologyπ [K.HasHomology j] :
    K.toCycles i j ≫ K.homologyπ j = 0 
goal: K.toCycles i j ≫ K.homologyπ j = 0

full_name: HomologicalComplex.homologyIsCokernel
code: /-- `K.homology j` is the cokernel of `K.toCycles i j : K.X i ⟶ K.cycles j`
when `c.prev j = i`. -/
noncomputable def homologyIsCokernel (hi : c.prev j = i) [K.HasHomology j] :
    IsColimit (CokernelCofork.ofπ (K.homologyπ j) (K.toCycles_comp_homologyπ i j)) 
goal: CategoryTheory.Limits.IsColimit (CategoryTheory.Limits.CokernelCofork.ofπ (K.homologyπ j) ⋯)

full_name: HomologicalComplex.opcycles
code: /-- The opcycles in degree `i` of a homological complex. -/
noncomputable def opcycles 
goal: C

full_name: HomologicalComplex.pOpcycles
code: /-- The projection to the opcycles of a homological complex. -/
noncomputable def pOpcycles : K.X i ⟶ K.opcycles i 
goal: K.X i ⟶ K.opcycles i

full_name: HomologicalComplex.homologyι
code: /-- The inclusion map of the homology of a homological complex into its opcycles. -/
noncomputable def homologyι : K.homology i ⟶ K.opcycles i 
goal: K.homology i ⟶ K.opcycles i

full_name: HomologicalComplex.descOpcycles
code: /-- The morphism from `K.opcycles i` that is induced by an "opcycle", i.e. a morphism
from `K.X i` whose precomposition with the differential is zero. -/
noncomputable def descOpcycles {A : C} (k : K.X i ⟶ A) (j : ι) (hj : c.prev i = j)
    (hk : K.d j i ≫ k = 0) : K.opcycles i ⟶ A 
goal: K.opcycles i ⟶ A

full_name: HomologicalComplex.descOpcycles'
code: /-- The morphism from `K.opcycles i` that is induced by an "opcycle", i.e. a morphism
from `K.X i` whose precomposition with the differential is zero. -/
noncomputable abbrev descOpcycles' {A : C} (k : K.X i ⟶ A) (j : ι) (hj : c.Rel j i)
    (hk : K.d j i ≫ k = 0) : K.opcycles i ⟶ A 
goal: K.opcycles i ⟶ A

full_name: HomologicalComplex.p_descOpcycles
code: @[reassoc (attr := simp)]
lemma p_descOpcycles {A : C} (k : K.X i ⟶ A) (j : ι) (hj : c.prev i = j)
    (hk : K.d j i ≫ k = 0) : K.pOpcycles i ≫ K.descOpcycles k j hj hk = k 
goal: K.pOpcycles i ≫ K.descOpcycles k j hj hk = k

full_name: HomologicalComplex.fromOpcycles
code: /-- The map `K.opcycles i ⟶ K.X j` induced by the differential `K.d i j`. -/
noncomputable def fromOpcycles :
  K.opcycles i ⟶ K.X j  
goal: K.opcycles i ⟶ K.X j

full_name: HomologicalComplex.d_pOpcycles
code: @[reassoc (attr := simp)]
lemma d_pOpcycles [K.HasHomology j] : K.d i j ≫ K.pOpcycles j = 0 
goal: K.d i j ≫ K.pOpcycles j = 0

full_name: HomologicalComplex.opcyclesIsCokernel
code: /-- `K.opcycles j` is the cokernel of `K.d i j` when `c.prev j = i`. -/
noncomputable def opcyclesIsCokernel (hi : c.prev j = i) [K.HasHomology j] :
    IsColimit (CokernelCofork.ofπ (K.pOpcycles j) (K.d_pOpcycles i j)) 
goal: CategoryTheory.Limits.IsColimit (CategoryTheory.Limits.CokernelCofork.ofπ (K.pOpcycles j) ⋯)

full_name: HomologicalComplex.p_fromOpcycles
code: @[reassoc (attr := simp)]
lemma p_fromOpcycles :
    K.pOpcycles i ≫ K.fromOpcycles i j = K.d i j 
goal: K.pOpcycles i ≫ K.fromOpcycles i j = K.d i j

full_name: HomologicalComplex.instEpiPOpcycles
code: instance : Epi (K.pOpcycles i) 
goal: CategoryTheory.Epi (K.pOpcycles i)

full_name: HomologicalComplex.instMonoHomologyι
code: instance : Mono (K.homologyι i) 
goal: CategoryTheory.Mono (K.homologyι i)

full_name: HomologicalComplex.fromOpcycles_d
code: @[reassoc (attr := simp)]
lemma fromOpcycles_d :
    K.fromOpcycles i j ≫ K.d j k = 0 
goal: K.fromOpcycles i j ≫ K.d j k = 0

full_name: HomologicalComplex.descOpcycles_comp
code: @[reassoc]
lemma descOpcycles_comp {A A' : C} (k : K.X i ⟶ A) (j : ι) (hj : c.prev i = j)
    (hk : K.d j i ≫ k = 0) (α : A ⟶ A') :
    K.descOpcycles k j hj hk ≫ α = K.descOpcycles (k ≫ α) j hj
      (by rw [reassoc_of% hk, zero_comp]) 
goal: K.descOpcycles k j hj hk ≫ α = K.descOpcycles (k ≫ α) j hj ⋯

full_name: HomologicalComplex.homologyι_descOpcycles_eq_zero_of_boundary
code: @[reassoc]
lemma homologyι_descOpcycles_eq_zero_of_boundary {A : C} (k : K.X i ⟶ A) (j : ι)
    (hj : c.prev i = j) {i' : ι} (x : K.X i' ⟶ A) (hx : k = K.d i i' ≫ x) :
    K.homologyι i ≫ K.descOpcycles k j hj (by rw [hx, K.d_comp_d_assoc, zero_comp]) = 0 
goal: K.homologyι i ≫ K.descOpcycles k j hj ⋯ = 0

full_name: HomologicalComplex.homologyι_comp_fromOpcycles
code: @[reassoc (attr := simp)]
lemma homologyι_comp_fromOpcycles :
    K.homologyι i ≫ K.fromOpcycles i j = 0 
goal: K.homologyι i ≫ K.fromOpcycles i j = 0

full_name: HomologicalComplex.homologyIsKernel
code: /-- `K.homology i` is the kernel of `K.fromOpcycles i j : K.opcycles i ⟶ K.X j`
when `c.next i = j`. -/
noncomputable def homologyIsKernel (hi : c.next i = j) :
    IsLimit (KernelFork.ofι (K.homologyι i) (K.homologyι_comp_fromOpcycles i j)) 
goal: CategoryTheory.Limits.IsLimit (CategoryTheory.Limits.KernelFork.ofι (K.homologyι i) ⋯)

full_name: HomologicalComplex.homologyMap
code: /-- The map `K.homology i ⟶ L.homology i` induced by a morphism in `HomologicalComplex`. -/
noncomputable def homologyMap : K.homology i ⟶ L.homology i 
goal: K.homology i ⟶ L.homology i

full_name: HomologicalComplex.cyclesMap
code: /-- The map `K.cycles i ⟶ L.cycles i` induced by a morphism in `HomologicalComplex`. -/
noncomputable def cyclesMap : K.cycles i ⟶ L.cycles i 
goal: K.cycles i ⟶ L.cycles i

full_name: HomologicalComplex.opcyclesMap
code: /-- The map `K.opcycles i ⟶ L.opcycles i` induced by a morphism in `HomologicalComplex`. -/
noncomputable def opcyclesMap : K.opcycles i ⟶ L.opcycles i 
goal: K.opcycles i ⟶ L.opcycles i

full_name: HomologicalComplex.cyclesMap_i
code: @[reassoc (attr := simp)]
lemma cyclesMap_i : cyclesMap φ i ≫ L.iCycles i = K.iCycles i ≫ φ.f i 
goal: HomologicalComplex.cyclesMap φ i ≫ L.iCycles i = K.iCycles i ≫ φ.f i

full_name: HomologicalComplex.p_opcyclesMap
code: @[reassoc (attr := simp)]
lemma p_opcyclesMap : K.pOpcycles i ≫ opcyclesMap φ i = φ.f i ≫ L.pOpcycles i 
goal: K.pOpcycles i ≫ HomologicalComplex.opcyclesMap φ i = φ.f i ≫ L.pOpcycles i

full_name: HomologicalComplex.instMonoCyclesMapOfF
code: instance [Mono (φ.f i)] : Mono (cyclesMap φ i) 
goal: CategoryTheory.Mono (HomologicalComplex.cyclesMap φ i)

full_name: HomologicalComplex.instEpiOpcyclesMapOfF
code: instance [Epi (φ.f i)] : Epi (opcyclesMap φ i) 
goal: CategoryTheory.Epi (HomologicalComplex.opcyclesMap φ i)

full_name: HomologicalComplex.homologyMap_id
code: @[simp]
lemma homologyMap_id : homologyMap (𝟙 K) i = 𝟙 _ 
goal: HomologicalComplex.homologyMap (𝟙 K) i = 𝟙 (K.homology i)

full_name: HomologicalComplex.cyclesMap_id
code: @[simp]
lemma cyclesMap_id : cyclesMap (𝟙 K) i = 𝟙 _ 
goal: HomologicalComplex.cyclesMap (𝟙 K) i = 𝟙 (K.cycles i)

full_name: HomologicalComplex.opcyclesMap_id
code: @[simp]
lemma opcyclesMap_id : opcyclesMap (𝟙 K) i = 𝟙 _ 
goal: HomologicalComplex.opcyclesMap (𝟙 K) i = 𝟙 (K.opcycles i)

full_name: HomologicalComplex.homologyMap_comp
code: @[reassoc]
lemma homologyMap_comp : homologyMap (φ ≫ ψ) i = homologyMap φ i ≫ homologyMap ψ i 
goal: HomologicalComplex.homologyMap (φ ≫ ψ) i = HomologicalComplex.homologyMap φ i ≫ HomologicalComplex.homologyMap ψ i

full_name: HomologicalComplex.cyclesMap_comp
code: @[reassoc]
lemma cyclesMap_comp : cyclesMap (φ ≫ ψ) i = cyclesMap φ i ≫ cyclesMap ψ i 
goal: HomologicalComplex.cyclesMap (φ ≫ ψ) i = HomologicalComplex.cyclesMap φ i ≫ HomologicalComplex.cyclesMap ψ i

full_name: HomologicalComplex.opcyclesMap_comp
code: @[reassoc]
lemma opcyclesMap_comp : opcyclesMap (φ ≫ ψ) i = opcyclesMap φ i ≫ opcyclesMap ψ i 
goal: HomologicalComplex.opcyclesMap (φ ≫ ψ) i = HomologicalComplex.opcyclesMap φ i ≫ HomologicalComplex.opcyclesMap ψ i

full_name: HomologicalComplex.homologyMap_zero
code: @[simp]
lemma homologyMap_zero : homologyMap (0 : K ⟶ L) i = 0 
goal: HomologicalComplex.homologyMap 0 i = 0

full_name: HomologicalComplex.cyclesMap_zero
code: @[simp]
lemma cyclesMap_zero : cyclesMap (0 : K ⟶ L) i = 0 
goal: HomologicalComplex.cyclesMap 0 i = 0

full_name: HomologicalComplex.opcyclesMap_zero
code: @[simp]
lemma opcyclesMap_zero : opcyclesMap (0 : K ⟶ L) i = 0 
goal: HomologicalComplex.opcyclesMap 0 i = 0

full_name: HomologicalComplex.homologyπ_naturality
code: @[reassoc (attr := simp)]
lemma homologyπ_naturality :
    K.homologyπ i ≫ homologyMap φ i = cyclesMap φ i ≫ L.homologyπ i 
goal: K.homologyπ i ≫ HomologicalComplex.homologyMap φ i = HomologicalComplex.cyclesMap φ i ≫ L.homologyπ i

full_name: HomologicalComplex.homologyι_naturality
code: @[reassoc (attr := simp)]
lemma homologyι_naturality :
    homologyMap φ i ≫ L.homologyι i = K.homologyι i ≫ opcyclesMap φ i 
goal: HomologicalComplex.homologyMap φ i ≫ L.homologyι i = K.homologyι i ≫ HomologicalComplex.opcyclesMap φ i

full_name: HomologicalComplex.homology_π_ι
code: @[reassoc (attr := simp)]
lemma homology_π_ι :
    K.homologyπ i ≫ K.homologyι i = K.iCycles i ≫ K.pOpcycles i 
goal: K.homologyπ i ≫ K.homologyι i = K.iCycles i ≫ K.pOpcycles i

full_name: HomologicalComplex.opcyclesMap_comp_descOpcycles
code: @[reassoc (attr := simp)]
lemma opcyclesMap_comp_descOpcycles {A : C} (k : L.X i ⟶ A) (j : ι) (hj : c.prev i = j)
    (hk : L.d j i ≫ k = 0) (φ : K ⟶ L) :
    opcyclesMap φ i ≫ L.descOpcycles k j hj hk = K.descOpcycles (φ.f i ≫ k) j hj
      (by rw [← φ.comm_assoc, hk, comp_zero]) 
goal: HomologicalComplex.opcyclesMap φ i ≫ L.descOpcycles k j hj hk = K.descOpcycles (φ.f i ≫ k) j hj ⋯

full_name: HomologicalComplex.liftCycles_comp_cyclesMap
code: @[reassoc (attr := simp)]
lemma liftCycles_comp_cyclesMap {A : C} (k : A ⟶ K.X i) (j : ι) (hj : c.next i = j)
    (hk : k ≫ K.d i j = 0) (φ : K ⟶ L) :
    K.liftCycles k j hj hk ≫ cyclesMap φ i = L.liftCycles (k ≫ φ.f i) j hj
      (by rw [assoc, φ.comm, reassoc_of% hk, zero_comp]) 
goal: K.liftCycles k j hj hk ≫ HomologicalComplex.cyclesMap φ i = L.liftCycles (k ≫ φ.f i) j hj ⋯

full_name: HomologicalComplex.homologyFunctor_map
code: /-- The `i`th homology functor `HomologicalComplex C c ⥤ C`. -/
@[simps]
noncomputable def homologyFunctor [CategoryWithHomology C] : HomologicalComplex C c ⥤ C 
goal: ∀ {X Y : HomologicalComplex C c} (f : X ⟶ Y),
  (HomologicalComplex.homologyFunctor C c i).map f = HomologicalComplex.homologyMap f i

full_name: HomologicalComplex.homologyFunctor_obj
code: /-- The `i`th homology functor `HomologicalComplex C c ⥤ C`. -/
@[simps]
noncomputable def homologyFunctor [CategoryWithHomology C] : HomologicalComplex C c ⥤ C 
goal: (HomologicalComplex.homologyFunctor C c i).obj K = K.homology i

full_name: HomologicalComplex.homologyFunctor
code: /-- The `i`th homology functor `HomologicalComplex C c ⥤ C`. -/
@[simps]
noncomputable def homologyFunctor [CategoryWithHomology C] : HomologicalComplex C c ⥤ C 
goal: HomologicalComplex C c ⥤ C

full_name: HomologicalComplex.gradedHomologyFunctor_obj
code: /-- The homology functor to graded objects. -/
@[simps]
noncomputable def gradedHomologyFunctor [CategoryWithHomology C] :
    HomologicalComplex C c ⥤ GradedObject ι C 
goal: (HomologicalComplex.gradedHomologyFunctor C c).obj K i = K.homology i

full_name: HomologicalComplex.gradedHomologyFunctor
code: /-- The homology functor to graded objects. -/
@[simps]
noncomputable def gradedHomologyFunctor [CategoryWithHomology C] :
    HomologicalComplex C c ⥤ GradedObject ι C 
goal: HomologicalComplex C c ⥤ CategoryTheory.GradedObject ι C

full_name: HomologicalComplex.gradedHomologyFunctor_map
code: /-- The homology functor to graded objects. -/
@[simps]
noncomputable def gradedHomologyFunctor [CategoryWithHomology C] :
    HomologicalComplex C c ⥤ GradedObject ι C 
goal: ∀ {X Y : HomologicalComplex C c} (f : X ⟶ Y) (i : ι),
  (HomologicalComplex.gradedHomologyFunctor C c).map f i = HomologicalComplex.homologyMap f i

full_name: HomologicalComplex.cyclesFunctor_obj
code: /-- The `i`th cycles functor `HomologicalComplex C c ⥤ C`. -/
@[simps]
noncomputable def cyclesFunctor [CategoryWithHomology C] : HomologicalComplex C c ⥤ C 
goal: (HomologicalComplex.cyclesFunctor C c i).obj K = K.cycles i

full_name: HomologicalComplex.cyclesFunctor
code: /-- The `i`th cycles functor `HomologicalComplex C c ⥤ C`. -/
@[simps]
noncomputable def cyclesFunctor [CategoryWithHomology C] : HomologicalComplex C c ⥤ C 
goal: HomologicalComplex C c ⥤ C

full_name: HomologicalComplex.cyclesFunctor_map
code: /-- The `i`th cycles functor `HomologicalComplex C c ⥤ C`. -/
@[simps]
noncomputable def cyclesFunctor [CategoryWithHomology C] : HomologicalComplex C c ⥤ C 
goal: ∀ {X Y : HomologicalComplex C c} (f : X ⟶ Y),
  (HomologicalComplex.cyclesFunctor C c i).map f = HomologicalComplex.cyclesMap f i

full_name: HomologicalComplex.opcyclesFunctor
code: /-- The `i`th opcycles functor `HomologicalComplex C c ⥤ C`. -/
@[simps]
noncomputable def opcyclesFunctor [CategoryWithHomology C] : HomologicalComplex C c ⥤ C 
goal: HomologicalComplex C c ⥤ C

full_name: HomologicalComplex.opcyclesFunctor_map
code: /-- The `i`th opcycles functor `HomologicalComplex C c ⥤ C`. -/
@[simps]
noncomputable def opcyclesFunctor [CategoryWithHomology C] : HomologicalComplex C c ⥤ C 
goal: ∀ {X Y : HomologicalComplex C c} (f : X ⟶ Y),
  (HomologicalComplex.opcyclesFunctor C c i).map f = HomologicalComplex.opcyclesMap f i

full_name: HomologicalComplex.opcyclesFunctor_obj
code: /-- The `i`th opcycles functor `HomologicalComplex C c ⥤ C`. -/
@[simps]
noncomputable def opcyclesFunctor [CategoryWithHomology C] : HomologicalComplex C c ⥤ C 
goal: (HomologicalComplex.opcyclesFunctor C c i).obj K = K.opcycles i

full_name: HomologicalComplex.natTransHomologyπ_app
code: /-- The natural transformation `K.homologyπ i : K.cycles i ⟶ K.homology i`
for all `K : HomologicalComplex C c`. -/
@[simps]
noncomputable def natTransHomologyπ [CategoryWithHomology C] :
    cyclesFunctor C c i ⟶ homologyFunctor C c i 
goal: (HomologicalComplex.natTransHomologyπ C c i).app K = K.homologyπ i

full_name: HomologicalComplex.natTransHomologyπ
code: /-- The natural transformation `K.homologyπ i : K.cycles i ⟶ K.homology i`
for all `K : HomologicalComplex C c`. -/
@[simps]
noncomputable def natTransHomologyπ [CategoryWithHomology C] :
    cyclesFunctor C c i ⟶ homologyFunctor C c i 
goal: HomologicalComplex.cyclesFunctor C c i ⟶ HomologicalComplex.homologyFunctor C c i

full_name: HomologicalComplex.natTransHomologyι
code: /-- The natural transformation `K.homologyι i : K.homology i ⟶ K.opcycles i`
for all `K : HomologicalComplex C c`. -/
@[simps]
noncomputable def natTransHomologyι [CategoryWithHomology C] :
    homologyFunctor C c i ⟶ opcyclesFunctor C c i 
goal: HomologicalComplex.homologyFunctor C c i ⟶ HomologicalComplex.opcyclesFunctor C c i

full_name: HomologicalComplex.natTransHomologyι_app
code: /-- The natural transformation `K.homologyι i : K.homology i ⟶ K.opcycles i`
for all `K : HomologicalComplex C c`. -/
@[simps]
noncomputable def natTransHomologyι [CategoryWithHomology C] :
    homologyFunctor C c i ⟶ opcyclesFunctor C c i 
goal: (HomologicalComplex.natTransHomologyι C c i).app K = K.homologyι i

full_name: HomologicalComplex.homologyFunctorIso
code: /-- The natural isomorphism `K.homology i ≅ (K.sc i).homology`
for all homological complexes `K`. -/
@[simps!]
noncomputable def homologyFunctorIso [CategoryWithHomology C] :
    homologyFunctor C c i ≅
      shortComplexFunctor C c i ⋙ ShortComplex.homologyFunctor C 
goal: HomologicalComplex.homologyFunctor C c i ≅
  HomologicalComplex.shortComplexFunctor C c i ⋙ CategoryTheory.ShortComplex.homologyFunctor C

full_name: HomologicalComplex.homologyFunctorIso_inv_app
code: /-- The natural isomorphism `K.homology i ≅ (K.sc i).homology`
for all homological complexes `K`. -/
@[simps!]
noncomputable def homologyFunctorIso [CategoryWithHomology C] :
    homologyFunctor C c i ≅
      shortComplexFunctor C c i ⋙ ShortComplex.homologyFunctor C 
goal: (HomologicalComplex.homologyFunctorIso C c i).inv.app X = 𝟙 (X.homology i)

full_name: HomologicalComplex.homologyFunctorIso_hom_app
code: /-- The natural isomorphism `K.homology i ≅ (K.sc i).homology`
for all homological complexes `K`. -/
@[simps!]
noncomputable def homologyFunctorIso [CategoryWithHomology C] :
    homologyFunctor C c i ≅
      shortComplexFunctor C c i ⋙ ShortComplex.homologyFunctor C 
goal: (HomologicalComplex.homologyFunctorIso C c i).hom.app X = 𝟙 (X.homology i)

full_name: HomologicalComplex.homologyFunctorIso'
code: /-- The natural isomorphism `K.homology j ≅ (K.sc' i j k).homology`
for all homological complexes `K` when `c.prev j = i` and `c.next j = k`. -/
noncomputable def homologyFunctorIso' [CategoryWithHomology C]
    (hi : c.prev j = i) (hk : c.next j = k) :
    homologyFunctor C c j ≅
      shortComplexFunctor' C c i j k ⋙ ShortComplex.homologyFunctor C 
goal: HomologicalComplex.homologyFunctor C c j ≅
  HomologicalComplex.shortComplexFunctor' C c i j k ⋙ CategoryTheory.ShortComplex.homologyFunctor C

full_name: HomologicalComplex.instPreservesZeroMorphismsHomologyFunctor
code: instance [CategoryWithHomology C] : (homologyFunctor C c i).PreservesZeroMorphisms 
goal: (HomologicalComplex.homologyFunctor C c i).PreservesZeroMorphisms

full_name: HomologicalComplex.instPreservesZeroMorphismsOpcyclesFunctor
code: instance [CategoryWithHomology C] : (opcyclesFunctor C c i).PreservesZeroMorphisms 
goal: (HomologicalComplex.opcyclesFunctor C c i).PreservesZeroMorphisms

full_name: HomologicalComplex.instPreservesZeroMorphismsCyclesFunctor
code: instance [CategoryWithHomology C] : (cyclesFunctor C c i).PreservesZeroMorphisms 
goal: (HomologicalComplex.cyclesFunctor C c i).PreservesZeroMorphisms

full_name: HomologicalComplex.isIso_iCycles
code: lemma isIso_iCycles : IsIso (K.iCycles i) 
goal: CategoryTheory.IsIso (K.iCycles i)

full_name: HomologicalComplex.iCyclesIso
code: /-- The canonical isomorphism `K.cycles i ≅ K.X i` when the differential from `i` is zero. -/
@[simps! hom]
noncomputable def iCyclesIso : K.cycles i ≅ K.X i 
goal: K.cycles i ≅ K.X i

full_name: HomologicalComplex.iCyclesIso_hom
code: /-- The canonical isomorphism `K.cycles i ≅ K.X i` when the differential from `i` is zero. -/
@[simps! hom]
noncomputable def iCyclesIso : K.cycles i ≅ K.X i 
goal: (K.iCyclesIso i j hj h).hom = K.iCycles i

full_name: HomologicalComplex.iCyclesIso_hom_inv_id
code: @[reassoc (attr := simp)]
lemma iCyclesIso_hom_inv_id :
    K.iCycles i ≫ (K.iCyclesIso i j hj h).inv = 𝟙 _ 
goal: K.iCycles i ≫ (K.iCyclesIso i j hj h).inv = 𝟙 (K.cycles i)

full_name: HomologicalComplex.iCyclesIso_inv_hom_id
code: @[reassoc (attr := simp)]
lemma iCyclesIso_inv_hom_id :
    (K.iCyclesIso i j hj h).inv ≫ K.iCycles i = 𝟙 _ 
goal: (K.iCyclesIso i j hj h).inv ≫ K.iCycles i = 𝟙 (K.X i)

full_name: HomologicalComplex.isIso_homologyι
code: lemma isIso_homologyι : IsIso (K.homologyι i) 
goal: CategoryTheory.IsIso (K.homologyι i)

full_name: HomologicalComplex.isoHomologyι
code: /-- The canonical isomorphism `K.homology i ≅ K.opcycles i`
when the differential from `i` is zero. -/
@[simps! hom]
noncomputable def isoHomologyι : K.homology i ≅ K.opcycles i 
goal: K.homology i ≅ K.opcycles i

full_name: HomologicalComplex.isoHomologyι_hom
code: /-- The canonical isomorphism `K.homology i ≅ K.opcycles i`
when the differential from `i` is zero. -/
@[simps! hom]
noncomputable def isoHomologyι : K.homology i ≅ K.opcycles i 
goal: (K.isoHomologyι i j hj h).hom = K.homologyι i

full_name: HomologicalComplex.isoHomologyι_hom_inv_id
code: @[reassoc (attr := simp)]
lemma isoHomologyι_hom_inv_id :
    K.homologyι i ≫ (K.isoHomologyι i j hj h).inv = 𝟙 _ 
goal: K.homologyι i ≫ (K.isoHomologyι i j hj h).inv = 𝟙 (K.homology i)

full_name: HomologicalComplex.isoHomologyι_inv_hom_id
code: @[reassoc (attr := simp)]
lemma isoHomologyι_inv_hom_id :
    (K.isoHomologyι i j hj h).inv ≫ K.homologyι i = 𝟙 _ 
goal: (K.isoHomologyι i j hj h).inv ≫ K.homologyι i = 𝟙 (K.opcycles i)

full_name: HomologicalComplex.isIso_pOpcycles
code: lemma isIso_pOpcycles : IsIso (K.pOpcycles j) 
goal: CategoryTheory.IsIso (K.pOpcycles j)

full_name: HomologicalComplex.pOpcyclesIso_hom
code: /-- The canonical isomorphism `K.X j ≅ K.opCycles j` when the differential to `j` is zero. -/
@[simps! hom]
noncomputable def pOpcyclesIso : K.X j ≅ K.opcycles j 
goal: (K.pOpcyclesIso i j hi h).hom = K.pOpcycles j

full_name: HomologicalComplex.pOpcyclesIso
code: /-- The canonical isomorphism `K.X j ≅ K.opCycles j` when the differential to `j` is zero. -/
@[simps! hom]
noncomputable def pOpcyclesIso : K.X j ≅ K.opcycles j 
goal: K.X j ≅ K.opcycles j

full_name: HomologicalComplex.pOpcyclesIso_hom_inv_id
code: @[reassoc (attr := simp)]
lemma pOpcyclesIso_hom_inv_id :
    K.pOpcycles j ≫ (K.pOpcyclesIso i j hi h).inv = 𝟙 _ 
goal: K.pOpcycles j ≫ (K.pOpcyclesIso i j hi h).inv = 𝟙 (K.X j)

full_name: HomologicalComplex.pOpcyclesIso_inv_hom_id
code: @[reassoc (attr := simp)]
lemma pOpcyclesIso_inv_hom_id :
    (K.pOpcyclesIso i j hi h).inv ≫ K.pOpcycles j = 𝟙 _ 
goal: (K.pOpcyclesIso i j hi h).inv ≫ K.pOpcycles j = 𝟙 (K.opcycles j)

full_name: HomologicalComplex.isIso_homologyπ
code: lemma isIso_homologyπ : IsIso (K.homologyπ j) 
goal: CategoryTheory.IsIso (K.homologyπ j)

full_name: HomologicalComplex.isoHomologyπ_hom
code: /-- The canonical isomorphism `K.cycles j ≅ K.homology j`
when the differential to `j` is zero. -/
@[simps! hom]
noncomputable def isoHomologyπ : K.cycles j ≅ K.homology j 
goal: (K.isoHomologyπ i j hi h).hom = K.homologyπ j

full_name: HomologicalComplex.isoHomologyπ
code: /-- The canonical isomorphism `K.cycles j ≅ K.homology j`
when the differential to `j` is zero. -/
@[simps! hom]
noncomputable def isoHomologyπ : K.cycles j ≅ K.homology j 
goal: K.cycles j ≅ K.homology j

full_name: HomologicalComplex.isoHomologyπ_hom_inv_id
code: @[reassoc (attr := simp)]
lemma isoHomologyπ_hom_inv_id :
    K.homologyπ j ≫ (K.isoHomologyπ i j hi h).inv = 𝟙 _ 
goal: K.homologyπ j ≫ (K.isoHomologyπ i j hi h).inv = 𝟙 (K.cycles j)

full_name: HomologicalComplex.isoHomologyπ_inv_hom_id
code: @[reassoc (attr := simp)]
lemma isoHomologyπ_inv_hom_id :
    (K.isoHomologyπ i j hi h).inv ≫ K.homologyπ j = 𝟙 _ 
goal: (K.isoHomologyπ i j hi h).inv ≫ K.homologyπ j = 𝟙 (K.homology j)

full_name: HomologicalComplex.epi_homologyMap_of_epi_of_not_rel
code: lemma epi_homologyMap_of_epi_of_not_rel (φ : K ⟶ L) (i : ι)
    [K.HasHomology i] [L.HasHomology i] [Epi (φ.f i)] (hi : ∀ j, ¬ c.Rel i j) :
    Epi (homologyMap φ i) 
goal: CategoryTheory.Epi (HomologicalComplex.homologyMap φ i)

full_name: HomologicalComplex.mono_homologyMap_of_mono_of_not_rel
code: lemma mono_homologyMap_of_mono_of_not_rel (φ : K ⟶ L) (j : ι)
    [K.HasHomology j] [L.HasHomology j] [Mono (φ.f j)] (hj : ∀ i, ¬ c.Rel i j) :
    Mono (homologyMap φ j) 
goal: CategoryTheory.Mono (HomologicalComplex.homologyMap φ j)

full_name: HomologicalComplex.ExactAt
code: /-- A homological complex `K` is exact at `i` if the short complex `K.sc i` is exact. -/
def ExactAt 
goal: Prop

full_name: HomologicalComplex.exactAt_iff
code: lemma exactAt_iff :
    K.ExactAt i ↔ (K.sc i).Exact 
goal: K.ExactAt i ↔ (K.sc i).Exact

full_name: HomologicalComplex.ExactAt.of_iso
code: lemma ExactAt.of_iso (hK : K.ExactAt i) {L : HomologicalComplex C c} (e : K ≅ L) :
    L.ExactAt i 
goal: L.ExactAt i

full_name: HomologicalComplex.exactAt_iff'
code: lemma exactAt_iff' (hi : c.prev j = i) (hk : c.next j = k) :
    K.ExactAt j ↔ (K.sc' i j k).Exact 
goal: K.ExactAt j ↔ (K.sc' i j k).Exact

full_name: HomologicalComplex.exactAt_iff_isZero_homology
code: lemma exactAt_iff_isZero_homology [K.HasHomology i] :
    K.ExactAt i ↔ IsZero (K.homology i) 
goal: K.ExactAt i ↔ CategoryTheory.Limits.IsZero (K.homology i)

full_name: ChainComplex.isIso_homologyι₀
code: instance isIso_homologyι₀ :
    IsIso (K.homologyι 0) 
goal: CategoryTheory.IsIso (HomologicalComplex.homologyι K 0)

full_name: ChainComplex.isoHomologyι₀
code: /-- The canonical isomorphism `K.homology 0 ≅ K.opcycles 0` for a chain complex `K`
indexed by `ℕ`. -/
noncomputable abbrev isoHomologyι₀ :
  K.homology 0 ≅ K.opcycles 0 
goal: HomologicalComplex.homology K 0 ≅ HomologicalComplex.opcycles K 0

full_name: ChainComplex.isoHomologyι₀_inv_naturality
code: @[reassoc (attr := simp)]
lemma isoHomologyι₀_inv_naturality [L.HasHomology 0] :
    K.isoHomologyι₀.inv ≫ HomologicalComplex.homologyMap φ 0 =
      HomologicalComplex.opcyclesMap φ 0 ≫ L.isoHomologyι₀.inv 
goal: K.isoHomologyι₀.inv ≫ HomologicalComplex.homologyMap φ 0 = HomologicalComplex.opcyclesMap φ 0 ≫ L.isoHomologyι₀.inv

full_name: CochainComplex.isIso_homologyπ₀
code: instance isIso_homologyπ₀ :
    IsIso (K.homologyπ 0) 
goal: CategoryTheory.IsIso (HomologicalComplex.homologyπ K 0)

full_name: CochainComplex.isoHomologyπ₀
code: /-- The canonical isomorphism `K.cycles 0 ≅ K.homology 0` for a cochain complex `K`
indexed by `ℕ`. -/
noncomputable abbrev isoHomologyπ₀ :
  K.cycles 0 ≅ K.homology 0 
goal: HomologicalComplex.cycles K 0 ≅ HomologicalComplex.homology K 0

full_name: CochainComplex.isoHomologyπ₀_inv_naturality
code: @[reassoc (attr := simp)]
lemma isoHomologyπ₀_inv_naturality [L.HasHomology 0] :
    HomologicalComplex.homologyMap φ 0 ≫ L.isoHomologyπ₀.inv =
      K.isoHomologyπ₀.inv ≫ HomologicalComplex.cyclesMap φ 0 
goal: HomologicalComplex.homologyMap φ 0 ≫ L.isoHomologyπ₀.inv = K.isoHomologyπ₀.inv ≫ HomologicalComplex.cyclesMap φ 0

full_name: HomologicalComplex.homologyMap_neg
code: @[simp]
lemma homologyMap_neg : homologyMap (-φ) i = -homologyMap φ i 
goal: HomologicalComplex.homologyMap (-φ) i = -HomologicalComplex.homologyMap φ i

full_name: HomologicalComplex.homologyMap_add
code: @[simp]
lemma homologyMap_add : homologyMap (φ + ψ) i = homologyMap φ i + homologyMap ψ i 
goal: HomologicalComplex.homologyMap (φ + ψ) i = HomologicalComplex.homologyMap φ i + HomologicalComplex.homologyMap ψ i

full_name: HomologicalComplex.homologyMap_sub
code: @[simp]
lemma homologyMap_sub : homologyMap (φ - ψ) i = homologyMap φ i - homologyMap ψ i 
goal: HomologicalComplex.homologyMap (φ - ψ) i = HomologicalComplex.homologyMap φ i - HomologicalComplex.homologyMap ψ i

full_name: HomologicalComplex.instAdditiveHomologyFunctor
code: instance [CategoryWithHomology C] : (homologyFunctor C c i).Additive 
goal: (HomologicalComplex.homologyFunctor C c i).Additive

full_name: CochainComplex.isIso_liftCycles_iff
code: lemma isIso_liftCycles_iff (K : CochainComplex C ℕ) {X : C} (φ : X ⟶ K.X 0)
    [K.HasHomology 0] (hφ : φ ≫ K.d 0 1 = 0) :
    IsIso (K.liftCycles φ 1 (by simp) hφ) ↔
      (ShortComplex.mk _ _ hφ).Exact ∧ Mono φ 
goal: CategoryTheory.IsIso (HomologicalComplex.liftCycles K φ 1 ⋯ hφ) ↔
  (CategoryTheory.ShortComplex.mk φ (K.d 0 1) hφ).Exact ∧ CategoryTheory.Mono φ

full_name: ChainComplex.isIso_descOpcycles_iff
code: lemma isIso_descOpcycles_iff (K : ChainComplex C ℕ) {X : C} (φ : K.X 0 ⟶ X)
    [K.HasHomology 0] (hφ : K.d 1 0 ≫ φ = 0) :
    IsIso (K.descOpcycles φ 1 (by simp) hφ) ↔
      (ShortComplex.mk _ _ hφ).Exact ∧ Epi φ 
goal: CategoryTheory.IsIso (HomologicalComplex.descOpcycles K φ 1 ⋯ hφ) ↔
  (CategoryTheory.ShortComplex.mk (K.d 1 0) φ hφ).Exact ∧ CategoryTheory.Epi φ

full_name: HomologicalComplex.cyclesIsoSc'
code: /-- The cycles of a homological complex in degree `j` can be computed
by specifying a choice of `c.prev j` and `c.next j`. -/
noncomputable def cyclesIsoSc' : K.cycles j ≅ (K.sc' i j k).cycles 
goal: K.cycles j ≅ (K.sc' i j k).cycles

full_name: HomologicalComplex.cyclesIsoSc'_hom_iCycles
code: @[reassoc (attr := simp)]
lemma cyclesIsoSc'_hom_iCycles :
    (K.cyclesIsoSc' i j k hi hk).hom ≫ (K.sc' i j k).iCycles = K.iCycles j 
goal: (K.cyclesIsoSc' i j k hi hk).hom ≫ (K.sc' i j k).iCycles = K.iCycles j

full_name: HomologicalComplex.cyclesIsoSc'_inv_iCycles
code: @[reassoc (attr := simp)]
lemma cyclesIsoSc'_inv_iCycles :
    (K.cyclesIsoSc' i j k hi hk).inv ≫ K.iCycles j = (K.sc' i j k).iCycles 
goal: (K.cyclesIsoSc' i j k hi hk).inv ≫ K.iCycles j = (K.sc' i j k).iCycles

full_name: HomologicalComplex.toCycles_cyclesIsoSc'_hom
code: @[reassoc (attr := simp)]
lemma toCycles_cyclesIsoSc'_hom :
    K.toCycles i j ≫ (K.cyclesIsoSc' i j k hi hk).hom = (K.sc' i j k).toCycles 
goal: K.toCycles i j ≫ (K.cyclesIsoSc' i j k hi hk).hom = (K.sc' i j k).toCycles

full_name: HomologicalComplex.opcyclesIsoSc'
code: /-- The homology of a homological complex in degree `j` can be computed
by specifying a choice of `c.prev j` and `c.next j`. -/
noncomputable def opcyclesIsoSc' : K.opcycles j ≅ (K.sc' i j k).opcycles 
goal: K.opcycles j ≅ (K.sc' i j k).opcycles

full_name: HomologicalComplex.pOpcycles_opcyclesIsoSc'_inv
code: @[reassoc (attr := simp)]
lemma pOpcycles_opcyclesIsoSc'_inv :
    (K.sc' i j k).pOpcycles ≫ (K.opcyclesIsoSc' i j k hi hk).inv = K.pOpcycles j 
goal: (K.sc' i j k).pOpcycles ≫ (K.opcyclesIsoSc' i j k hi hk).inv = K.pOpcycles j

full_name: HomologicalComplex.pOpcycles_opcyclesIsoSc'_hom
code: @[reassoc (attr := simp)]
lemma pOpcycles_opcyclesIsoSc'_hom :
    K.pOpcycles j ≫ (K.opcyclesIsoSc' i j k hi hk).hom = (K.sc' i j k).pOpcycles 
goal: K.pOpcycles j ≫ (K.opcyclesIsoSc' i j k hi hk).hom = (K.sc' i j k).pOpcycles

full_name: HomologicalComplex.opcyclesIsoSc'_inv_fromOpcycles
code: @[reassoc (attr := simp)]
lemma opcyclesIsoSc'_inv_fromOpcycles :
    (K.opcyclesIsoSc' i j k hi hk).inv ≫ K.fromOpcycles j k =
      (K.sc' i j k).fromOpcycles 
goal: (K.opcyclesIsoSc' i j k hi hk).inv ≫ K.fromOpcycles j k = (K.sc' i j k).fromOpcycles

full_name: HomologicalComplex.homologyIsoSc'
code: /-- The opcycles of a homological complex in degree `j` can be computed
by specifying a choice of `c.prev j` and `c.next j`. -/
noncomputable def homologyIsoSc' : K.homology j ≅ (K.sc' i j k).homology 
goal: K.homology j ≅ (K.sc' i j k).homology

full_name: HomologicalComplex.π_homologyIsoSc'_hom
code: @[reassoc (attr := simp)]
lemma π_homologyIsoSc'_hom :
    K.homologyπ j ≫ (K.homologyIsoSc' i j k hi hk).hom =
      (K.cyclesIsoSc' i j k hi hk).hom ≫ (K.sc' i j k).homologyπ 
goal: K.homologyπ j ≫ (K.homologyIsoSc' i j k hi hk).hom = (K.cyclesIsoSc' i j k hi hk).hom ≫ (K.sc' i j k).homologyπ

full_name: HomologicalComplex.π_homologyIsoSc'_inv
code: @[reassoc (attr := simp)]
lemma π_homologyIsoSc'_inv :
    (K.sc' i j k).homologyπ ≫ (K.homologyIsoSc' i j k hi hk).inv =
      (K.cyclesIsoSc' i j k hi hk).inv ≫ K.homologyπ j 
goal: (K.sc' i j k).homologyπ ≫ (K.homologyIsoSc' i j k hi hk).inv = (K.cyclesIsoSc' i j k hi hk).inv ≫ K.homologyπ j

full_name: HomologicalComplex.homologyIsoSc'_hom_ι
code: @[reassoc (attr := simp)]
lemma homologyIsoSc'_hom_ι :
    (K.homologyIsoSc' i j k hi hk).hom ≫ (K.sc' i j k).homologyι =
      K.homologyι j ≫ (K.opcyclesIsoSc' i j k hi hk).hom 
goal: (K.homologyIsoSc' i j k hi hk).hom ≫ (K.sc' i j k).homologyι = K.homologyι j ≫ (K.opcyclesIsoSc' i j k hi hk).hom

full_name: HomologicalComplex.homologyIsoSc'_inv_ι
code: @[reassoc (attr := simp)]
lemma homologyIsoSc'_inv_ι :
    (K.homologyIsoSc' i j k hi hk).inv ≫ K.homologyι j =
      (K.sc' i j k).homologyι ≫ (K.opcyclesIsoSc' i j k hi hk).inv 
goal: (K.homologyIsoSc' i j k hi hk).inv ≫ K.homologyι j = (K.sc' i j k).homologyι ≫ (K.opcyclesIsoSc' i j k hi hk).inv