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

tactic: constructor
state_before: ι : Type u_1
V : Type u
inst✝⁸ : Category.{v, u} 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.{u_3, u_2} W
inst✝ : Abelian W
X : ChainComplex W ℕ
Y : W
f : X ⟶ (ChainComplex.single₀ W).obj Y
hf✝ hf : QuasiIso' f
⊢ Epi (f.f 0)
state_after: case left_cancellation
ι : Type u_1
V : Type u
inst✝⁸ : Category.{v, u} 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.{u_3, u_2} W
inst✝ : Abelian W
X : ChainComplex W ℕ
Y : W
f : X ⟶ (ChainComplex.single₀ W).obj Y
hf✝ hf : QuasiIso' f
⊢ ∀ {Z : W} (g h : ((ChainComplex.single₀ W).obj Y).X 0 ⟶ Z), f.f 0 ≫ g = f.f 0 ≫ h → g = h

tactic: intro Z g h Hgh
state_before: case left_cancellation
ι : Type u_1
V : Type u
inst✝⁸ : Category.{v, u} 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.{u_3, u_2} W
inst✝ : Abelian W
X : ChainComplex W ℕ
Y : W
f : X ⟶ (ChainComplex.single₀ W).obj Y
hf✝ hf : QuasiIso' f
⊢ ∀ {Z : W} (g h : ((ChainComplex.single₀ W).obj Y).X 0 ⟶ Z), f.f 0 ≫ g = f.f 0 ≫ h → g = h
state_after: case left_cancellation
ι : Type u_1
V : Type u
inst✝⁸ : Category.{v, u} 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.{u_3, u_2} W
inst✝ : Abelian W
X : ChainComplex W ℕ
Y : W
f : X ⟶ (ChainComplex.single₀ W).obj Y
hf✝ hf : QuasiIso' f
Z : W
g h : ((ChainComplex.single₀ W).obj Y).X 0 ⟶ Z
Hgh : f.f 0 ≫ g = 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_1
V : Type u
inst✝⁸ : Category.{v, u} 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.{u_3, u_2} W
inst✝ : Abelian W
X : ChainComplex W ℕ
Y : W
f : X ⟶ (ChainComplex.single₀ W).obj Y
hf✝ hf : QuasiIso' f
Z : W
g h : ((ChainComplex.single₀ W).obj Y).X 0 ⟶ Z
Hgh : f.f 0 ≫ g = f.f 0 ≫ h
⊢ g = h
state_after: case left_cancellation
ι : Type u_1
V : Type u
inst✝⁸ : Category.{v, u} 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.{u_3, u_2} W
inst✝ : Abelian W
X : ChainComplex W ℕ
Y : W
f : X ⟶ (ChainComplex.single₀ W).obj Y
hf✝ hf : QuasiIso' f
Z : W
g h : ((ChainComplex.single₀ W).obj Y).X 0 ⟶ Z
Hgh :
  (cokernel.π (X.d 1 0) ≫ (toSingle₀CokernelAtZeroIso f).hom) ≫ g =
    (cokernel.π (X.d 1 0) ≫ (toSingle₀CokernelAtZeroIso f).hom) ≫ h
⊢ g = h

tactic: rw [(@cancel_epi _ _ _ _ _ _ (epi_comp _ _) _ _).1 Hgh]
state_before: case left_cancellation
ι : Type u_1
V : Type u
inst✝⁸ : Category.{v, u} 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.{u_3, u_2} W
inst✝ : Abelian W
X : ChainComplex W ℕ
Y : W
f : X ⟶ (ChainComplex.single₀ W).obj Y
hf✝ hf : QuasiIso' f
Z : W
g h : ((ChainComplex.single₀ W).obj Y).X 0 ⟶ Z
Hgh :
  (cokernel.π (X.d 1 0) ≫ (toSingle₀CokernelAtZeroIso f).hom) ≫ g =
    (cokernel.π (X.d 1 0) ≫ (toSingle₀CokernelAtZeroIso f).hom) ≫ h
⊢ g = h
state_after: no goals

tactic: rw [← f.2 1 0 rfl]
state_before: ι : Type u_1
V : Type u
inst✝⁸ : Category.{v, u} 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.{u_3, u_2} W
inst✝ : Abelian W
X : ChainComplex W ℕ
Y : W
f : X ⟶ (ChainComplex.single₀ W).obj Y
hf✝ hf : QuasiIso' f
Z : W
g h : ((ChainComplex.single₀ W).obj Y).X 0 ⟶ Z
Hgh : f.f 0 ≫ g = f.f 0 ≫ h
⊢ X.d 1 0 ≫ f.f 0 = 0
state_after: ι : Type u_1
V : Type u
inst✝⁸ : Category.{v, u} 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.{u_3, u_2} W
inst✝ : Abelian W
X : ChainComplex W ℕ
Y : W
f : X ⟶ (ChainComplex.single₀ W).obj Y
hf✝ hf : QuasiIso' f
Z : W
g h : ((ChainComplex.single₀ W).obj Y).X 0 ⟶ Z
Hgh : f.f 0 ≫ g = f.f 0 ≫ h
⊢ f.f 1 ≫ ((ChainComplex.single₀ W).obj Y).d 1 0 = 0

tactic: exact comp_zero
state_before: ι : Type u_1
V : Type u
inst✝⁸ : Category.{v, u} 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.{u_3, u_2} W
inst✝ : Abelian W
X : ChainComplex W ℕ
Y : W
f : X ⟶ (ChainComplex.single₀ W).obj Y
hf✝ hf : QuasiIso' f
Z : W
g h : ((ChainComplex.single₀ W).obj Y).X 0 ⟶ Z
Hgh : f.f 0 ≫ g = f.f 0 ≫ h
⊢ f.f 1 ≫ ((ChainComplex.single₀ W).obj Y).d 1 0 = 0
state_after: no goals