Theorem: HomologicalComplex.HomologySequence.snakeInput_L₂
File: Mathlib/Algebra/Homology/HomologySequence.lean

Proof steps:
state_before: C : Type u_1
ι : Type u_2
inst✝¹ : Category.{?u.76393, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
⊢ IsLimit (KernelFork.ofι (S.mapNatTrans (natTransHomologyι C c i)) ⋯)
state_after: case h₁
C : Type u_1
ι : Type u_2
inst✝¹ : Category.{?u.76393, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
⊢ IsLimit (ShortComplex.π₁.mapCone (KernelFork.ofι (S.mapNatTrans (natTransHomologyι C c i)) ⋯))

case h₂
C : Type u_1
ι : Type u_2
inst✝¹ : Category.{?u.76393, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
⊢ IsLimit (ShortComplex.π₂.mapCone (KernelFork.ofι (S.mapNatTrans (natTransHomologyι C c i)) ⋯))

case h₃
C : Type u_1
ι : Type u_2
inst✝¹ : Category.{?u.76393, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
⊢ IsLimit (ShortComplex.π₃.mapCone (KernelFork.ofι (S.mapNatTrans (natTransHomologyι C c i)) ⋯))
tactic: apply ShortComplex.isLimitOfIsLimitπ
state_before: case h₁
C : Type u_1
ι : Type u_2
inst✝¹ : Category.{?u.76393, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
⊢ IsLimit (ShortComplex.π₁.mapCone (KernelFork.ofι (S.mapNatTrans (natTransHomologyι C c i)) ⋯))

case h₂
C : Type u_1
ι : Type u_2
inst✝¹ : Category.{?u.76393, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
⊢ IsLimit (ShortComplex.π₂.mapCone (KernelFork.ofι (S.mapNatTrans (natTransHomologyι C c i)) ⋯))

case h₃
C : Type u_1
ι : Type u_2
inst✝¹ : Category.{?u.76393, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
⊢ IsLimit (ShortComplex.π₃.mapCone (KernelFork.ofι (S.mapNatTrans (natTransHomologyι C c i)) ⋯))
state_after: no goals
tactic: all_goals
      exact (KernelFork.isLimitMapConeEquiv _ _).symm
        ((composableArrows₃_exact _ i j hij).exact 0).fIsKernel
state_before: C : Type u_1
ι : Type u_2
inst✝¹ : Category.{?u.76393, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
⊢ IsColimit (CokernelCofork.ofπ (S.mapNatTrans (natTransHomologyπ C c j)) ⋯)
state_after: case h₁
C : Type u_1
ι : Type u_2
inst✝¹ : Category.{?u.76393, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
⊢ IsColimit (ShortComplex.π₁.mapCocone (CokernelCofork.ofπ (S.mapNatTrans (natTransHomologyπ C c j)) ⋯))

case h₂
C : Type u_1
ι : Type u_2
inst✝¹ : Category.{?u.76393, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
⊢ IsColimit (ShortComplex.π₂.mapCocone (CokernelCofork.ofπ (S.mapNatTrans (natTransHomologyπ C c j)) ⋯))

case h₃
C : Type u_1
ι : Type u_2
inst✝¹ : Category.{?u.76393, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
⊢ IsColimit (ShortComplex.π₃.mapCocone (CokernelCofork.ofπ (S.mapNatTrans (natTransHomologyπ C c j)) ⋯))
tactic: apply ShortComplex.isColimitOfIsColimitπ
state_before: case h₁
C : Type u_1
ι : Type u_2
inst✝¹ : Category.{?u.76393, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
⊢ IsColimit (ShortComplex.π₁.mapCocone (CokernelCofork.ofπ (S.mapNatTrans (natTransHomologyπ C c j)) ⋯))

case h₂
C : Type u_1
ι : Type u_2
inst✝¹ : Category.{?u.76393, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
⊢ IsColimit (ShortComplex.π₂.mapCocone (CokernelCofork.ofπ (S.mapNatTrans (natTransHomologyπ C c j)) ⋯))

case h₃
C : Type u_1
ι : Type u_2
inst✝¹ : Category.{?u.76393, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
⊢ IsColimit (ShortComplex.π₃.mapCocone (CokernelCofork.ofπ (S.mapNatTrans (natTransHomologyπ C c j)) ⋯))
state_after: no goals
tactic: all_goals
      exact (CokernelCofork.isColimitMapCoconeEquiv _ _).symm
        ((composableArrows₃_exact _ i j hij).exact 1).gIsCokernel
state_before: C : Type u_1
ι : Type u_2
inst✝¹ : Category.{?u.76393, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
⊢ ((opcyclesFunctor C c i).mapShortComplex.obj S).Exact
state_after: C : Type u_1
ι : Type u_2
inst✝¹ : Category.{?u.76393, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
this : Epi S.g
⊢ ((opcyclesFunctor C c i).mapShortComplex.obj S).Exact
tactic: have := hS.epi_g
state_before: C : Type u_1
ι : Type u_2
inst✝¹ : Category.{?u.76393, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
this : Epi S.g
⊢ ((opcyclesFunctor C c i).mapShortComplex.obj S).Exact
state_after: no goals
tactic: exact opcycles_right_exact S hS.exact i
state_before: C : Type u_1
ι : Type u_2
inst✝¹ : Category.{?u.76393, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
⊢ ((cyclesFunctor C c j).mapShortComplex.obj S).Exact
state_after: C : Type u_1
ι : Type u_2
inst✝¹ : Category.{?u.76393, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
this : Mono S.f
⊢ ((cyclesFunctor C c j).mapShortComplex.obj S).Exact
tactic: have := hS.mono_f
state_before: C : Type u_1
ι : Type u_2
inst✝¹ : Category.{?u.76393, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
this : Mono S.f
⊢ ((cyclesFunctor C c j).mapShortComplex.obj S).Exact
state_after: no goals
tactic: exact cycles_left_exact S hS.exact j
state_before: C : Type u_1
ι : Type u_2
inst✝¹ : Category.{?u.76393, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
⊢ Epi ((opcyclesFunctor C c i).mapShortComplex.obj S).g
state_after: C : Type u_1
ι : Type u_2
inst✝¹ : Category.{?u.76393, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
this : Epi S.g
⊢ Epi ((opcyclesFunctor C c i).mapShortComplex.obj S).g
tactic: have := hS.epi_g
state_before: C : Type u_1
ι : Type u_2
inst✝¹ : Category.{?u.76393, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
this : Epi S.g
⊢ Epi ((opcyclesFunctor C c i).mapShortComplex.obj S).g
state_after: C : Type u_1
ι : Type u_2
inst✝¹ : Category.{?u.76393, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
this : Epi S.g
⊢ Epi (opcyclesMap S.g i)
tactic: dsimp
state_before: C : Type u_1
ι : Type u_2
inst✝¹ : Category.{?u.76393, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
this : Epi S.g
⊢ Epi (opcyclesMap S.g i)
state_after: no goals
tactic: infer_instance
state_before: C : Type u_1
ι : Type u_2
inst✝¹ : Category.{?u.76393, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
⊢ Mono ((cyclesFunctor C c j).mapShortComplex.obj S).f
state_after: C : Type u_1
ι : Type u_2
inst✝¹ : Category.{?u.76393, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
this : Mono S.f
⊢ Mono ((cyclesFunctor C c j).mapShortComplex.obj S).f
tactic: have := hS.mono_f
state_before: C : Type u_1
ι : Type u_2
inst✝¹ : Category.{?u.76393, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
this : Mono S.f
⊢ Mono ((cyclesFunctor C c j).mapShortComplex.obj S).f
state_after: C : Type u_1
ι : Type u_2
inst✝¹ : Category.{?u.76393, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
this : Mono S.f
⊢ Mono (cyclesMap S.f j)
tactic: dsimp
state_before: C : Type u_1
ι : Type u_2
inst✝¹ : Category.{?u.76393, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
this : Mono S.f
⊢ Mono (cyclesMap S.f j)
state_after: no goals
tactic: infer_instance