Theorem: HomologicalComplex.Hom.from_single₀_mono_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 : CochainComplex W ℕ
Y : W
f : (CochainComplex.single₀ W).obj Y ⟶ X
hf : QuasiIso' f
⊢ Mono (f.f 0)
state_after: case right_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 : CochainComplex W ℕ
Y : W
f : (CochainComplex.single₀ W).obj Y ⟶ X
hf : QuasiIso' f
⊢ ∀ {Z : W} (g h : Z ⟶ ((CochainComplex.single₀ W).obj Y).X 0), g ≫ f.f 0 = h ≫ f.f 0 → g = h

tactic: intro Z g h Hgh
state_before: case right_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 : CochainComplex W ℕ
Y : W
f : (CochainComplex.single₀ W).obj Y ⟶ X
hf : QuasiIso' f
⊢ ∀ {Z : W} (g h : Z ⟶ ((CochainComplex.single₀ W).obj Y).X 0), g ≫ f.f 0 = h ≫ f.f 0 → g = h
state_after: case right_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 : CochainComplex W ℕ
Y : W
f : (CochainComplex.single₀ W).obj Y ⟶ X
hf : QuasiIso' f
Z : W
g h : Z ⟶ ((CochainComplex.single₀ W).obj Y).X 0
Hgh : g ≫ f.f 0 = h ≫ f.f 0
⊢ g = h

tactic: rw [← kernel.lift_ι (X.d 0 1) (f.f 0) (by rw [f.2 0 1 rfl]; exact zero_comp),
  ← fromSingle₀KernelAtZeroIso_inv_eq] at Hgh
state_before: case right_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 : CochainComplex W ℕ
Y : W
f : (CochainComplex.single₀ W).obj Y ⟶ X
hf : QuasiIso' f
Z : W
g h : Z ⟶ ((CochainComplex.single₀ W).obj Y).X 0
Hgh : g ≫ f.f 0 = h ≫ f.f 0
⊢ g = h
state_after: case right_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 : CochainComplex W ℕ
Y : W
f : (CochainComplex.single₀ W).obj Y ⟶ X
hf : QuasiIso' f
Z : W
g h : Z ⟶ ((CochainComplex.single₀ W).obj Y).X 0
Hgh :
  g ≫ (fromSingle₀KernelAtZeroIso f).inv ≫ kernel.ι (X.d 0 1) =
    h ≫ (fromSingle₀KernelAtZeroIso f).inv ≫ kernel.ι (X.d 0 1)
⊢ g = h

tactic: rw [(@cancel_mono _ _ _ _ _ _ (mono_comp _ _) _ _).1 Hgh]
state_before: case right_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 : CochainComplex W ℕ
Y : W
f : (CochainComplex.single₀ W).obj Y ⟶ X
hf : QuasiIso' f
Z : W
g h : Z ⟶ ((CochainComplex.single₀ W).obj Y).X 0
Hgh :
  g ≫ (fromSingle₀KernelAtZeroIso f).inv ≫ kernel.ι (X.d 0 1) =
    h ≫ (fromSingle₀KernelAtZeroIso f).inv ≫ kernel.ι (X.d 0 1)
⊢ g = h
state_after: no goals

tactic: rw [f.2 0 1 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 : CochainComplex W ℕ
Y : W
f : (CochainComplex.single₀ W).obj Y ⟶ X
hf : QuasiIso' f
Z : W
g h : Z ⟶ ((CochainComplex.single₀ W).obj Y).X 0
Hgh : g ≫ f.f 0 = h ≫ f.f 0
⊢ f.f 0 ≫ X.d 0 1 = 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 : CochainComplex W ℕ
Y : W
f : (CochainComplex.single₀ W).obj Y ⟶ X
hf : QuasiIso' f
Z : W
g h : Z ⟶ ((CochainComplex.single₀ W).obj Y).X 0
Hgh : g ≫ f.f 0 = h ≫ f.f 0
⊢ ((CochainComplex.single₀ W).obj Y).d 0 1 ≫ f.f 1 = 0

tactic: exact zero_comp
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 : CochainComplex W ℕ
Y : W
f : (CochainComplex.single₀ W).obj Y ⟶ X
hf : QuasiIso' f
Z : W
g h : Z ⟶ ((CochainComplex.single₀ W).obj Y).X 0
Hgh : g ≫ f.f 0 = h ≫ f.f 0
⊢ ((CochainComplex.single₀ W).obj Y).d 0 1 ≫ f.f 1 = 0
state_after: no goals