Theorem: HomologicalComplex.Hom.to_single₀_epi_at_zero
File: Mathlib/Algebra/Homology/QuasiIso.lean

tactic: constructor
state_before: ι : Type ?u.40001
V : Type u
inst✝⁸ : Category V
inst✝⁷ : HasZeroMorphisms V
inst✝⁶ : HasZeroObject V
inst✝⁵ : HasEqualizers V
inst✝⁴ : HasImages V
inst✝³ : HasImageMaps V
inst✝² : HasCokernels V
c : ComplexShape ι
C D E : HomologicalComplex V c
W : Type u_2
inst✝¹ : Category W
inst✝ : Abelian W
X : ChainComplex W ℕ
Y : W
f : X ⟶ (ChainComplex.single₀ W).obj Y
hf✝ hf : QuasiIso f
⊢ Epi (HomologicalComplex.Hom.f f 0)

tactic: intro Z g h Hgh
state_before: case left_cancellation
ι : Type ?u.40001
V : Type u
inst✝⁸ : Category V
inst✝⁷ : HasZeroMorphisms V
inst✝⁶ : HasZeroObject V
inst✝⁵ : HasEqualizers V
inst✝⁴ : HasImages V
inst✝³ : HasImageMaps V
inst✝² : HasCokernels V
c : ComplexShape ι
C D E : HomologicalComplex V c
W : Type u_2
inst✝¹ : Category W
inst✝ : Abelian W
X : ChainComplex W ℕ
Y : W
f : X ⟶ (ChainComplex.single₀ W).obj Y
hf✝ hf : QuasiIso f
⊢ ∀ {Z : W} (g h : HomologicalComplex.X ((ChainComplex.single₀ W).obj Y) 0 ⟶ Z),
    HomologicalComplex.Hom.f f 0 ≫ g = HomologicalComplex.Hom.f f 0 ≫ h → g = h

tactic: rw [← cokernel.π_desc (X.d 1 0) (f.f 0) (by rw [← f.2 1 0 rfl]; exact comp_zero),
  ← toSingle₀CokernelAtZeroIso_hom_eq] at Hgh
state_before: case left_cancellation
ι : Type ?u.40001
V : Type u
inst✝⁸ : Category V
inst✝⁷ : HasZeroMorphisms V
inst✝⁶ : HasZeroObject V
inst✝⁵ : HasEqualizers V
inst✝⁴ : HasImages V
inst✝³ : HasImageMaps V
inst✝² : HasCokernels V
c : ComplexShape ι
C D E : HomologicalComplex V c
W : Type u_2
inst✝¹ : Category W
inst✝ : Abelian W
X : ChainComplex W ℕ
Y : W
f : X ⟶ (ChainComplex.single₀ W).obj Y
hf✝ hf : QuasiIso f
Z : W
g h : HomologicalComplex.X ((ChainComplex.single₀ W).obj Y) 0 ⟶ Z
Hgh : HomologicalComplex.Hom.f f 0 ≫ g = HomologicalComplex.Hom.f f 0 ≫ h
⊢ g = h

tactic: rw [(@cancel_epi _ _ _ _ _ _ (epi_comp _ _) _ _).1 Hgh]
state_before: case left_cancellation
ι : Type ?u.40001
V : Type u
inst✝⁸ : Category V
inst✝⁷ : HasZeroMorphisms V
inst✝⁶ : HasZeroObject V
inst✝⁵ : HasEqualizers V
inst✝⁴ : HasImages V
inst✝³ : HasImageMaps V
inst✝² : HasCokernels V
c : ComplexShape ι
C D E : HomologicalComplex V c
W : Type u_2
inst✝¹ : Category W
inst✝ : Abelian W
X : ChainComplex W ℕ
Y : W
f : X ⟶ (ChainComplex.single₀ W).obj Y
hf✝ hf : QuasiIso f
Z : W
g h : HomologicalComplex.X ((ChainComplex.single₀ W).obj Y) 0 ⟶ Z
Hgh✝ : HomologicalComplex.Hom.f f 0 ≫ g = HomologicalComplex.Hom.f f 0 ≫ h
Hgh :
  (cokernel.π (d X 1 0) ≫ (toSingle₀CokernelAtZeroIso f).hom) ≫ g =
    (cokernel.π (d X 1 0) ≫ (toSingle₀CokernelAtZeroIso f).hom) ≫ h
⊢ g = h

tactic: rw [← f.2 1 0 rfl]
state_before: ι : Type ?u.40001
V : Type u
inst✝⁸ : Category V
inst✝⁷ : HasZeroMorphisms V
inst✝⁶ : HasZeroObject V
inst✝⁵ : HasEqualizers V
inst✝⁴ : HasImages V
inst✝³ : HasImageMaps V
inst✝² : HasCokernels V
c : ComplexShape ι
C D E : HomologicalComplex V c
W : Type u_2
inst✝¹ : Category W
inst✝ : Abelian W
X : ChainComplex W ℕ
Y : W
f : X ⟶ (ChainComplex.single₀ W).obj Y
hf✝ hf : QuasiIso f
Z : W
g h : HomologicalComplex.X ((ChainComplex.single₀ W).obj Y) 0 ⟶ Z
Hgh : HomologicalComplex.Hom.f f 0 ≫ g = HomologicalComplex.Hom.f f 0 ≫ h
⊢ d X 1 0 ≫ HomologicalComplex.Hom.f f 0 = 0

tactic: exact comp_zero
state_before: ι : Type ?u.40001
V : Type u
inst✝⁸ : Category V
inst✝⁷ : HasZeroMorphisms V
inst✝⁶ : HasZeroObject V
inst✝⁵ : HasEqualizers V
inst✝⁴ : HasImages V
inst✝³ : HasImageMaps V
inst✝² : HasCokernels V
c : ComplexShape ι
C D E : HomologicalComplex V c
W : Type u_2
inst✝¹ : Category W
inst✝ : Abelian W
X : ChainComplex W ℕ
Y : W
f : X ⟶ (ChainComplex.single₀ W).obj Y
hf✝ hf : QuasiIso f
Z : W
g h : HomologicalComplex.X ((ChainComplex.single₀ W).obj Y) 0 ⟶ Z
Hgh : HomologicalComplex.Hom.f f 0 ≫ g = HomologicalComplex.Hom.f f 0 ≫ h
⊢ HomologicalComplex.Hom.f f 1 ≫ d ((ChainComplex.single₀ W).obj Y) 1 0 = 0