Theorem: homology.hom_to_ext
File: Mathlib/CategoryTheory/Abelian/Homology.lean

tactic: dsimp [ι] at h
state_before: A : Type u
inst✝¹ : Category A
inst✝ : Abelian A
X Y Z : A
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
W : A
a b : W ⟶ homology f g w
h : a ≫ ι f g w = b ≫ ι f g w
⊢ a = b

tactic: apply_fun fun e => e ≫ (homologyIsoKernelDesc f g w).hom
state_before: A : Type u
inst✝¹ : Category A
inst✝ : Abelian A
X Y Z : A
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
W : A
a b : W ⟶ homology f g w
h :
  a ≫ (homologyIsoKernelDesc f g w).hom ≫ kernel.ι (cokernel.desc f g w) =
    b ≫ (homologyIsoKernelDesc f g w).hom ≫ kernel.ι (cokernel.desc f g w)
⊢ a = b

tactic: swap
state_before: A : Type u
inst✝¹ : Category A
inst✝ : Abelian A
X Y Z : A
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
W : A
a b : W ⟶ homology f g w
h :
  a ≫ (homologyIsoKernelDesc f g w).hom ≫ kernel.ι (cokernel.desc f g w) =
    b ≫ (homologyIsoKernelDesc f g w).hom ≫ kernel.ι (cokernel.desc f g w)
⊢ (fun e => e ≫ (homologyIsoKernelDesc f g w).hom) a = (fun e => e ≫ (homologyIsoKernelDesc f g w).hom) b

case inj
A : Type u
inst✝¹ : Category A
inst✝ : Abelian A
X Y Z : A
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
W : A
a b : W ⟶ homology f g w
h :
  a ≫ (homologyIsoKernelDesc f g w).hom ≫ kernel.ι (cokernel.desc f g w) =
    b ≫ (homologyIsoKernelDesc f g w).hom ≫ kernel.ι (cokernel.desc f g w)
⊢ Function.Injective fun e => e ≫ (homologyIsoKernelDesc f g w).hom

tactic: simp only [← Category.assoc] at h
state_before: A : Type u
inst✝¹ : Category A
inst✝ : Abelian A
X Y Z : A
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
W : A
a b : W ⟶ homology f g w
h :
  a ≫ (homologyIsoKernelDesc f g w).hom ≫ kernel.ι (cokernel.desc f g w) =
    b ≫ (homologyIsoKernelDesc f g w).hom ≫ kernel.ι (cokernel.desc f g w)
⊢ (fun e => e ≫ (homologyIsoKernelDesc f g w).hom) a = (fun e => e ≫ (homologyIsoKernelDesc f g w).hom) b

tactic: exact equalizer.hom_ext h
state_before: A : Type u
inst✝¹ : Category A
inst✝ : Abelian A
X Y Z : A
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
W : A
a b : W ⟶ homology f g w
h :
  (a ≫ (homologyIsoKernelDesc f g w).hom) ≫ kernel.ι (cokernel.desc f g w) =
    (b ≫ (homologyIsoKernelDesc f g w).hom) ≫ kernel.ι (cokernel.desc f g w)
⊢ (fun e => e ≫ (homologyIsoKernelDesc f g w).hom) a = (fun e => e ≫ (homologyIsoKernelDesc f g w).hom) b

tactic: intro i j hh
state_before: case inj
A : Type u
inst✝¹ : Category A
inst✝ : Abelian A
X Y Z : A
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
W : A
a b : W ⟶ homology f g w
h :
  a ≫ (homologyIsoKernelDesc f g w).hom ≫ kernel.ι (cokernel.desc f g w) =
    b ≫ (homologyIsoKernelDesc f g w).hom ≫ kernel.ι (cokernel.desc f g w)
⊢ Function.Injective fun e => e ≫ (homologyIsoKernelDesc f g w).hom

tactic: apply_fun fun e => e ≫ (homologyIsoKernelDesc f g w).inv  at hh
state_before: case inj
A : Type u
inst✝¹ : Category A
inst✝ : Abelian A
X Y Z : A
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
W : A
a b : W ⟶ homology f g w
h :
  a ≫ (homologyIsoKernelDesc f g w).hom ≫ kernel.ι (cokernel.desc f g w) =
    b ≫ (homologyIsoKernelDesc f g w).hom ≫ kernel.ι (cokernel.desc f g w)
i j : W ⟶ homology f g w
hh : (fun e => e ≫ (homologyIsoKernelDesc f g w).hom) i = (fun e => e ≫ (homologyIsoKernelDesc f g w).hom) j
⊢ i = j

tactic: simpa using hh
state_before: case inj
A : Type u
inst✝¹ : Category A
inst✝ : Abelian A
X Y Z : A
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
W : A
a b : W ⟶ homology f g w
h :
  a ≫ (homologyIsoKernelDesc f g w).hom ≫ kernel.ι (cokernel.desc f g w) =
    b ≫ (homologyIsoKernelDesc f g w).hom ≫ kernel.ι (cokernel.desc f g w)
i j : W ⟶ homology f g w
hh :
  (fun e => e ≫ (homologyIsoKernelDesc f g w).hom) i ≫ (homologyIsoKernelDesc f g w).inv =
    (fun e => e ≫ (homologyIsoKernelDesc f g w).hom) j ≫ (homologyIsoKernelDesc f g w).inv
⊢ i = j