Theorem: HomologicalComplex.HomologySequence.composableArrows₃_exact
File: Mathlib/Algebra/Homology/HomologySequence.lean

tactic: let S := ShortComplex.mk (K.homologyι i) (K.opcyclesToCycles i j) (by simp)
state_before: C : Type u_1
ι : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι
K : HomologicalComplex C c
i j : ι
hij : c.Rel i j
inst✝ : CategoryWithHomology C
⊢ (composableArrows₃ K i j).Exact
state_after: C : Type u_1
ι : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι
K : HomologicalComplex C c
i j : ι
hij : c.Rel i j
inst✝ : CategoryWithHomology C
S : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.opcyclesToCycles i j) ⋯
⊢ (composableArrows₃ K i j).Exact

tactic: let S' := ShortComplex.mk (K.homologyι i) (K.fromOpcycles i j) (by simp)
state_before: C : Type u_1
ι : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι
K : HomologicalComplex C c
i j : ι
hij : c.Rel i j
inst✝ : CategoryWithHomology C
S : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.opcyclesToCycles i j) ⋯
⊢ (composableArrows₃ K i j).Exact
state_after: C : Type u_1
ι : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι
K : HomologicalComplex C c
i j : ι
hij : c.Rel i j
inst✝ : CategoryWithHomology C
S : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.opcyclesToCycles i j) ⋯
S' : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.fromOpcycles i j) ⋯
⊢ (composableArrows₃ K i j).Exact

tactic: let ι : S ⟶ S' :=
  { τ₁ := 𝟙 _
    τ₂ := 𝟙 _
    τ₃ := K.iCycles j }
state_before: C : Type u_1
ι : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι
K : HomologicalComplex C c
i j : ι
hij : c.Rel i j
inst✝ : CategoryWithHomology C
S : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.opcyclesToCycles i j) ⋯
S' : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.fromOpcycles i j) ⋯
⊢ (composableArrows₃ K i j).Exact
state_after: C : Type u_1
ι✝ : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι✝
K : HomologicalComplex C c
i j : ι✝
hij : c.Rel i j
inst✝ : CategoryWithHomology C
S : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.opcyclesToCycles i j) ⋯
S' : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.fromOpcycles i j) ⋯
ι : S ⟶ S' := { τ₁ := 𝟙 S.X₁, τ₂ := 𝟙 S.X₂, τ₃ := K.iCycles j, comm₁₂ := ⋯, comm₂₃ := ⋯ }
⊢ (composableArrows₃ K i j).Exact

tactic: have hS : S.Exact := by
  rw [ShortComplex.exact_iff_of_epi_of_isIso_of_mono ι]
  exact S'.exact_of_f_is_kernel (K.homologyIsKernel i j (c.next_eq' hij))
state_before: C : Type u_1
ι✝ : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι✝
K : HomologicalComplex C c
i j : ι✝
hij : c.Rel i j
inst✝ : CategoryWithHomology C
S : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.opcyclesToCycles i j) ⋯
S' : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.fromOpcycles i j) ⋯
ι : S ⟶ S' := { τ₁ := 𝟙 S.X₁, τ₂ := 𝟙 S.X₂, τ₃ := K.iCycles j, comm₁₂ := ⋯, comm₂₃ := ⋯ }
⊢ (composableArrows₃ K i j).Exact
state_after: C : Type u_1
ι✝ : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι✝
K : HomologicalComplex C c
i j : ι✝
hij : c.Rel i j
inst✝ : CategoryWithHomology C
S : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.opcyclesToCycles i j) ⋯
S' : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.fromOpcycles i j) ⋯
ι : S ⟶ S' := { τ₁ := 𝟙 S.X₁, τ₂ := 𝟙 S.X₂, τ₃ := K.iCycles j, comm₁₂ := ⋯, comm₂₃ := ⋯ }
hS : S.Exact
⊢ (composableArrows₃ K i j).Exact

tactic: let T := ShortComplex.mk (K.opcyclesToCycles i j) (K.homologyπ j) (by simp)
state_before: C : Type u_1
ι✝ : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι✝
K : HomologicalComplex C c
i j : ι✝
hij : c.Rel i j
inst✝ : CategoryWithHomology C
S : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.opcyclesToCycles i j) ⋯
S' : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.fromOpcycles i j) ⋯
ι : S ⟶ S' := { τ₁ := 𝟙 S.X₁, τ₂ := 𝟙 S.X₂, τ₃ := K.iCycles j, comm₁₂ := ⋯, comm₂₃ := ⋯ }
hS : S.Exact
⊢ (composableArrows₃ K i j).Exact
state_after: C : Type u_1
ι✝ : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι✝
K : HomologicalComplex C c
i j : ι✝
hij : c.Rel i j
inst✝ : CategoryWithHomology C
S : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.opcyclesToCycles i j) ⋯
S' : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.fromOpcycles i j) ⋯
ι : S ⟶ S' := { τ₁ := 𝟙 S.X₁, τ₂ := 𝟙 S.X₂, τ₃ := K.iCycles j, comm₁₂ := ⋯, comm₂₃ := ⋯ }
hS : S.Exact
T : ShortComplex C := ShortComplex.mk (K.opcyclesToCycles i j) (K.homologyπ j) ⋯
⊢ (composableArrows₃ K i j).Exact

tactic: let T' := ShortComplex.mk (K.toCycles i j) (K.homologyπ j) (by simp)
state_before: C : Type u_1
ι✝ : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι✝
K : HomologicalComplex C c
i j : ι✝
hij : c.Rel i j
inst✝ : CategoryWithHomology C
S : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.opcyclesToCycles i j) ⋯
S' : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.fromOpcycles i j) ⋯
ι : S ⟶ S' := { τ₁ := 𝟙 S.X₁, τ₂ := 𝟙 S.X₂, τ₃ := K.iCycles j, comm₁₂ := ⋯, comm₂₃ := ⋯ }
hS : S.Exact
T : ShortComplex C := ShortComplex.mk (K.opcyclesToCycles i j) (K.homologyπ j) ⋯
⊢ (composableArrows₃ K i j).Exact
state_after: C : Type u_1
ι✝ : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι✝
K : HomologicalComplex C c
i j : ι✝
hij : c.Rel i j
inst✝ : CategoryWithHomology C
S : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.opcyclesToCycles i j) ⋯
S' : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.fromOpcycles i j) ⋯
ι : S ⟶ S' := { τ₁ := 𝟙 S.X₁, τ₂ := 𝟙 S.X₂, τ₃ := K.iCycles j, comm₁₂ := ⋯, comm₂₃ := ⋯ }
hS : S.Exact
T : ShortComplex C := ShortComplex.mk (K.opcyclesToCycles i j) (K.homologyπ j) ⋯
T' : ShortComplex C := ShortComplex.mk (K.toCycles i j) (K.homologyπ j) ⋯
⊢ (composableArrows₃ K i j).Exact

tactic: let π : T' ⟶ T :=
  { τ₁ := K.pOpcycles i
    τ₂ := 𝟙 _
    τ₃ := 𝟙 _ }
state_before: C : Type u_1
ι✝ : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι✝
K : HomologicalComplex C c
i j : ι✝
hij : c.Rel i j
inst✝ : CategoryWithHomology C
S : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.opcyclesToCycles i j) ⋯
S' : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.fromOpcycles i j) ⋯
ι : S ⟶ S' := { τ₁ := 𝟙 S.X₁, τ₂ := 𝟙 S.X₂, τ₃ := K.iCycles j, comm₁₂ := ⋯, comm₂₃ := ⋯ }
hS : S.Exact
T : ShortComplex C := ShortComplex.mk (K.opcyclesToCycles i j) (K.homologyπ j) ⋯
T' : ShortComplex C := ShortComplex.mk (K.toCycles i j) (K.homologyπ j) ⋯
⊢ (composableArrows₃ K i j).Exact
state_after: C : Type u_1
ι✝ : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι✝
K : HomologicalComplex C c
i j : ι✝
hij : c.Rel i j
inst✝ : CategoryWithHomology C
S : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.opcyclesToCycles i j) ⋯
S' : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.fromOpcycles i j) ⋯
ι : S ⟶ S' := { τ₁ := 𝟙 S.X₁, τ₂ := 𝟙 S.X₂, τ₃ := K.iCycles j, comm₁₂ := ⋯, comm₂₃ := ⋯ }
hS : S.Exact
T : ShortComplex C := ShortComplex.mk (K.opcyclesToCycles i j) (K.homologyπ j) ⋯
T' : ShortComplex C := ShortComplex.mk (K.toCycles i j) (K.homologyπ j) ⋯
π : T' ⟶ T := { τ₁ := K.pOpcycles i, τ₂ := 𝟙 T'.X₂, τ₃ := 𝟙 T'.X₃, comm₁₂ := ⋯, comm₂₃ := ⋯ }
⊢ (composableArrows₃ K i j).Exact

tactic: have hT : T.Exact := by
  rw [← ShortComplex.exact_iff_of_epi_of_isIso_of_mono π]
  exact T'.exact_of_g_is_cokernel (K.homologyIsCokernel i j (c.prev_eq' hij))
state_before: C : Type u_1
ι✝ : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι✝
K : HomologicalComplex C c
i j : ι✝
hij : c.Rel i j
inst✝ : CategoryWithHomology C
S : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.opcyclesToCycles i j) ⋯
S' : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.fromOpcycles i j) ⋯
ι : S ⟶ S' := { τ₁ := 𝟙 S.X₁, τ₂ := 𝟙 S.X₂, τ₃ := K.iCycles j, comm₁₂ := ⋯, comm₂₃ := ⋯ }
hS : S.Exact
T : ShortComplex C := ShortComplex.mk (K.opcyclesToCycles i j) (K.homologyπ j) ⋯
T' : ShortComplex C := ShortComplex.mk (K.toCycles i j) (K.homologyπ j) ⋯
π : T' ⟶ T := { τ₁ := K.pOpcycles i, τ₂ := 𝟙 T'.X₂, τ₃ := 𝟙 T'.X₃, comm₁₂ := ⋯, comm₂₃ := ⋯ }
⊢ (composableArrows₃ K i j).Exact
state_after: C : Type u_1
ι✝ : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι✝
K : HomologicalComplex C c
i j : ι✝
hij : c.Rel i j
inst✝ : CategoryWithHomology C
S : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.opcyclesToCycles i j) ⋯
S' : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.fromOpcycles i j) ⋯
ι : S ⟶ S' := { τ₁ := 𝟙 S.X₁, τ₂ := 𝟙 S.X₂, τ₃ := K.iCycles j, comm₁₂ := ⋯, comm₂₃ := ⋯ }
hS : S.Exact
T : ShortComplex C := ShortComplex.mk (K.opcyclesToCycles i j) (K.homologyπ j) ⋯
T' : ShortComplex C := ShortComplex.mk (K.toCycles i j) (K.homologyπ j) ⋯
π : T' ⟶ T := { τ₁ := K.pOpcycles i, τ₂ := 𝟙 T'.X₂, τ₃ := 𝟙 T'.X₃, comm₁₂ := ⋯, comm₂₃ := ⋯ }
hT : T.Exact
⊢ (composableArrows₃ K i j).Exact

tactic: apply ComposableArrows.exact_of_δ₀
state_before: C : Type u_1
ι✝ : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι✝
K : HomologicalComplex C c
i j : ι✝
hij : c.Rel i j
inst✝ : CategoryWithHomology C
S : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.opcyclesToCycles i j) ⋯
S' : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.fromOpcycles i j) ⋯
ι : S ⟶ S' := { τ₁ := 𝟙 S.X₁, τ₂ := 𝟙 S.X₂, τ₃ := K.iCycles j, comm₁₂ := ⋯, comm₂₃ := ⋯ }
hS : S.Exact
T : ShortComplex C := ShortComplex.mk (K.opcyclesToCycles i j) (K.homologyπ j) ⋯
T' : ShortComplex C := ShortComplex.mk (K.toCycles i j) (K.homologyπ j) ⋯
π : T' ⟶ T := { τ₁ := K.pOpcycles i, τ₂ := 𝟙 T'.X₂, τ₃ := 𝟙 T'.X₃, comm₁₂ := ⋯, comm₂₃ := ⋯ }
hT : T.Exact
⊢ (composableArrows₃ K i j).Exact
state_after: case h
C : Type u_1
ι✝ : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι✝
K : HomologicalComplex C c
i j : ι✝
hij : c.Rel i j
inst✝ : CategoryWithHomology C
S : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.opcyclesToCycles i j) ⋯
S' : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.fromOpcycles i j) ⋯
ι : S ⟶ S' := { τ₁ := 𝟙 S.X₁, τ₂ := 𝟙 S.X₂, τ₃ := K.iCycles j, comm₁₂ := ⋯, comm₂₃ := ⋯ }
hS : S.Exact
T : ShortComplex C := ShortComplex.mk (K.opcyclesToCycles i j) (K.homologyπ j) ⋯
T' : ShortComplex C := ShortComplex.mk (K.toCycles i j) (K.homologyπ j) ⋯
π : T' ⟶ T := { τ₁ := K.pOpcycles i, τ₂ := 𝟙 T'.X₂, τ₃ := 𝟙 T'.X₃, comm₁₂ := ⋯, comm₂₃ := ⋯ }
hT : T.Exact
⊢ (ComposableArrows.mk₂ ((composableArrows₃ K i j).map' 0 1 ⋯ ⋯) ((composableArrows₃ K i j).map' 1 2 ⋯ ⋯)).Exact

case h₀
C : Type u_1
ι✝ : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι✝
K : HomologicalComplex C c
i j : ι✝
hij : c.Rel i j
inst✝ : CategoryWithHomology C
S : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.opcyclesToCycles i j) ⋯
S' : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.fromOpcycles i j) ⋯
ι : S ⟶ S' := { τ₁ := 𝟙 S.X₁, τ₂ := 𝟙 S.X₂, τ₃ := K.iCycles j, comm₁₂ := ⋯, comm₂₃ := ⋯ }
hS : S.Exact
T : ShortComplex C := ShortComplex.mk (K.opcyclesToCycles i j) (K.homologyπ j) ⋯
T' : ShortComplex C := ShortComplex.mk (K.toCycles i j) (K.homologyπ j) ⋯
π : T' ⟶ T := { τ₁ := K.pOpcycles i, τ₂ := 𝟙 T'.X₂, τ₃ := 𝟙 T'.X₃, comm₁₂ := ⋯, comm₂₃ := ⋯ }
hT : T.Exact
⊢ (composableArrows₃ K i j).δ₀.Exact

tactic: simp
state_before: C : Type u_1
ι : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι
K : HomologicalComplex C c
i j : ι
hij : c.Rel i j
inst✝ : CategoryWithHomology C
⊢ K.homologyι i ≫ K.opcyclesToCycles i j = 0
state_after: no goals

tactic: simp
state_before: C : Type u_1
ι : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι
K : HomologicalComplex C c
i j : ι
hij : c.Rel i j
inst✝ : CategoryWithHomology C
S : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.opcyclesToCycles i j) ⋯
⊢ K.homologyι i ≫ K.fromOpcycles i j = 0
state_after: no goals

tactic: rw [ShortComplex.exact_iff_of_epi_of_isIso_of_mono ι]
state_before: C : Type u_1
ι✝ : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι✝
K : HomologicalComplex C c
i j : ι✝
hij : c.Rel i j
inst✝ : CategoryWithHomology C
S : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.opcyclesToCycles i j) ⋯
S' : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.fromOpcycles i j) ⋯
ι : S ⟶ S' := { τ₁ := 𝟙 S.X₁, τ₂ := 𝟙 S.X₂, τ₃ := K.iCycles j, comm₁₂ := ⋯, comm₂₃ := ⋯ }
⊢ S.Exact
state_after: C : Type u_1
ι✝ : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι✝
K : HomologicalComplex C c
i j : ι✝
hij : c.Rel i j
inst✝ : CategoryWithHomology C
S : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.opcyclesToCycles i j) ⋯
S' : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.fromOpcycles i j) ⋯
ι : S ⟶ S' := { τ₁ := 𝟙 S.X₁, τ₂ := 𝟙 S.X₂, τ₃ := K.iCycles j, comm₁₂ := ⋯, comm₂₃ := ⋯ }
⊢ S'.Exact

tactic: exact S'.exact_of_f_is_kernel (K.homologyIsKernel i j (c.next_eq' hij))
state_before: C : Type u_1
ι✝ : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι✝
K : HomologicalComplex C c
i j : ι✝
hij : c.Rel i j
inst✝ : CategoryWithHomology C
S : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.opcyclesToCycles i j) ⋯
S' : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.fromOpcycles i j) ⋯
ι : S ⟶ S' := { τ₁ := 𝟙 S.X₁, τ₂ := 𝟙 S.X₂, τ₃ := K.iCycles j, comm₁₂ := ⋯, comm₂₃ := ⋯ }
⊢ S'.Exact
state_after: no goals

tactic: simp
state_before: C : Type u_1
ι✝ : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι✝
K : HomologicalComplex C c
i j : ι✝
hij : c.Rel i j
inst✝ : CategoryWithHomology C
S : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.opcyclesToCycles i j) ⋯
S' : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.fromOpcycles i j) ⋯
ι : S ⟶ S' := { τ₁ := 𝟙 S.X₁, τ₂ := 𝟙 S.X₂, τ₃ := K.iCycles j, comm₁₂ := ⋯, comm₂₃ := ⋯ }
hS : S.Exact
⊢ K.opcyclesToCycles i j ≫ K.homologyπ j = 0
state_after: no goals

tactic: simp
state_before: C : Type u_1
ι✝ : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι✝
K : HomologicalComplex C c
i j : ι✝
hij : c.Rel i j
inst✝ : CategoryWithHomology C
S : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.opcyclesToCycles i j) ⋯
S' : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.fromOpcycles i j) ⋯
ι : S ⟶ S' := { τ₁ := 𝟙 S.X₁, τ₂ := 𝟙 S.X₂, τ₃ := K.iCycles j, comm₁₂ := ⋯, comm₂₃ := ⋯ }
hS : S.Exact
T : ShortComplex C := ShortComplex.mk (K.opcyclesToCycles i j) (K.homologyπ j) ⋯
⊢ K.toCycles i j ≫ K.homologyπ j = 0
state_after: no goals

tactic: rw [← ShortComplex.exact_iff_of_epi_of_isIso_of_mono π]
state_before: C : Type u_1
ι✝ : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι✝
K : HomologicalComplex C c
i j : ι✝
hij : c.Rel i j
inst✝ : CategoryWithHomology C
S : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.opcyclesToCycles i j) ⋯
S' : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.fromOpcycles i j) ⋯
ι : S ⟶ S' := { τ₁ := 𝟙 S.X₁, τ₂ := 𝟙 S.X₂, τ₃ := K.iCycles j, comm₁₂ := ⋯, comm₂₃ := ⋯ }
hS : S.Exact
T : ShortComplex C := ShortComplex.mk (K.opcyclesToCycles i j) (K.homologyπ j) ⋯
T' : ShortComplex C := ShortComplex.mk (K.toCycles i j) (K.homologyπ j) ⋯
π : T' ⟶ T := { τ₁ := K.pOpcycles i, τ₂ := 𝟙 T'.X₂, τ₃ := 𝟙 T'.X₃, comm₁₂ := ⋯, comm₂₃ := ⋯ }
⊢ T.Exact
state_after: C : Type u_1
ι✝ : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι✝
K : HomologicalComplex C c
i j : ι✝
hij : c.Rel i j
inst✝ : CategoryWithHomology C
S : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.opcyclesToCycles i j) ⋯
S' : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.fromOpcycles i j) ⋯
ι : S ⟶ S' := { τ₁ := 𝟙 S.X₁, τ₂ := 𝟙 S.X₂, τ₃ := K.iCycles j, comm₁₂ := ⋯, comm₂₃ := ⋯ }
hS : S.Exact
T : ShortComplex C := ShortComplex.mk (K.opcyclesToCycles i j) (K.homologyπ j) ⋯
T' : ShortComplex C := ShortComplex.mk (K.toCycles i j) (K.homologyπ j) ⋯
π : T' ⟶ T := { τ₁ := K.pOpcycles i, τ₂ := 𝟙 T'.X₂, τ₃ := 𝟙 T'.X₃, comm₁₂ := ⋯, comm₂₃ := ⋯ }
⊢ T'.Exact

tactic: exact T'.exact_of_g_is_cokernel (K.homologyIsCokernel i j (c.prev_eq' hij))
state_before: C : Type u_1
ι✝ : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι✝
K : HomologicalComplex C c
i j : ι✝
hij : c.Rel i j
inst✝ : CategoryWithHomology C
S : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.opcyclesToCycles i j) ⋯
S' : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.fromOpcycles i j) ⋯
ι : S ⟶ S' := { τ₁ := 𝟙 S.X₁, τ₂ := 𝟙 S.X₂, τ₃ := K.iCycles j, comm₁₂ := ⋯, comm₂₃ := ⋯ }
hS : S.Exact
T : ShortComplex C := ShortComplex.mk (K.opcyclesToCycles i j) (K.homologyπ j) ⋯
T' : ShortComplex C := ShortComplex.mk (K.toCycles i j) (K.homologyπ j) ⋯
π : T' ⟶ T := { τ₁ := K.pOpcycles i, τ₂ := 𝟙 T'.X₂, τ₃ := 𝟙 T'.X₃, comm₁₂ := ⋯, comm₂₃ := ⋯ }
⊢ T'.Exact
state_after: no goals

tactic: exact hS.exact_toComposableArrows
state_before: case h
C : Type u_1
ι✝ : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι✝
K : HomologicalComplex C c
i j : ι✝
hij : c.Rel i j
inst✝ : CategoryWithHomology C
S : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.opcyclesToCycles i j) ⋯
S' : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.fromOpcycles i j) ⋯
ι : S ⟶ S' := { τ₁ := 𝟙 S.X₁, τ₂ := 𝟙 S.X₂, τ₃ := K.iCycles j, comm₁₂ := ⋯, comm₂₃ := ⋯ }
hS : S.Exact
T : ShortComplex C := ShortComplex.mk (K.opcyclesToCycles i j) (K.homologyπ j) ⋯
T' : ShortComplex C := ShortComplex.mk (K.toCycles i j) (K.homologyπ j) ⋯
π : T' ⟶ T := { τ₁ := K.pOpcycles i, τ₂ := 𝟙 T'.X₂, τ₃ := 𝟙 T'.X₃, comm₁₂ := ⋯, comm₂₃ := ⋯ }
hT : T.Exact
⊢ (ComposableArrows.mk₂ ((composableArrows₃ K i j).map' 0 1 ⋯ ⋯) ((composableArrows₃ K i j).map' 1 2 ⋯ ⋯)).Exact
state_after: no goals

tactic: exact hT.exact_toComposableArrows
state_before: case h₀
C : Type u_1
ι✝ : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Preadditive C
c : ComplexShape ι✝
K : HomologicalComplex C c
i j : ι✝
hij : c.Rel i j
inst✝ : CategoryWithHomology C
S : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.opcyclesToCycles i j) ⋯
S' : ShortComplex C := ShortComplex.mk (K.homologyι i) (K.fromOpcycles i j) ⋯
ι : S ⟶ S' := { τ₁ := 𝟙 S.X₁, τ₂ := 𝟙 S.X₂, τ₃ := K.iCycles j, comm₁₂ := ⋯, comm₂₃ := ⋯ }
hS : S.Exact
T : ShortComplex C := ShortComplex.mk (K.opcyclesToCycles i j) (K.homologyπ j) ⋯
T' : ShortComplex C := ShortComplex.mk (K.toCycles i j) (K.homologyπ j) ⋯
π : T' ⟶ T := { τ₁ := K.pOpcycles i, τ₂ := 𝟙 T'.X₂, τ₃ := 𝟙 T'.X₃, comm₁₂ := ⋯, comm₂₃ := ⋯ }
hT : T.Exact
⊢ (composableArrows₃ K i j).δ₀.Exact
state_after: no goals