Theorem: homology.hom_from_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 : homology f g w ⟶ W
h : π' f g w ≫ a = π' f g w ≫ b
⊢ a = b

tactic: apply_fun fun e => (homologyIsoCokernelLift f g w).inv ≫ e
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 : homology f g w ⟶ W
h :
  (cokernel.π (kernel.lift g f w) ≫ (homologyIsoCokernelLift f g w).inv) ≫ a =
    (cokernel.π (kernel.lift g f w) ≫ (homologyIsoCokernelLift f g w).inv) ≫ b
⊢ 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 : homology f g w ⟶ W
h :
  (cokernel.π (kernel.lift g f w) ≫ (homologyIsoCokernelLift f g w).inv) ≫ a =
    (cokernel.π (kernel.lift g f w) ≫ (homologyIsoCokernelLift f g w).inv) ≫ b
⊢ (fun e => (homologyIsoCokernelLift f g w).inv ≫ e) a = (fun e => (homologyIsoCokernelLift f g w).inv ≫ e) 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 : homology f g w ⟶ W
h :
  (cokernel.π (kernel.lift g f w) ≫ (homologyIsoCokernelLift f g w).inv) ≫ a =
    (cokernel.π (kernel.lift g f w) ≫ (homologyIsoCokernelLift f g w).inv) ≫ b
⊢ Function.Injective fun e => (homologyIsoCokernelLift f g w).inv ≫ e

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 : homology f g w ⟶ W
h :
  (cokernel.π (kernel.lift g f w) ≫ (homologyIsoCokernelLift f g w).inv) ≫ a =
    (cokernel.π (kernel.lift g f w) ≫ (homologyIsoCokernelLift f g w).inv) ≫ b
⊢ (fun e => (homologyIsoCokernelLift f g w).inv ≫ e) a = (fun e => (homologyIsoCokernelLift f g w).inv ≫ e) b

tactic: exact coequalizer.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 : homology f g w ⟶ W
h :
  cokernel.π (kernel.lift g f w) ≫ (homologyIsoCokernelLift f g w).inv ≫ a =
    cokernel.π (kernel.lift g f w) ≫ (homologyIsoCokernelLift f g w).inv ≫ b
⊢ (fun e => (homologyIsoCokernelLift f g w).inv ≫ e) a = (fun e => (homologyIsoCokernelLift f g w).inv ≫ e) 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 : homology f g w ⟶ W
h :
  (cokernel.π (kernel.lift g f w) ≫ (homologyIsoCokernelLift f g w).inv) ≫ a =
    (cokernel.π (kernel.lift g f w) ≫ (homologyIsoCokernelLift f g w).inv) ≫ b
⊢ Function.Injective fun e => (homologyIsoCokernelLift f g w).inv ≫ e

tactic: apply_fun fun e => (homologyIsoCokernelLift f g w).hom ≫ e  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 : homology f g w ⟶ W
h :
  (cokernel.π (kernel.lift g f w) ≫ (homologyIsoCokernelLift f g w).inv) ≫ a =
    (cokernel.π (kernel.lift g f w) ≫ (homologyIsoCokernelLift f g w).inv) ≫ b
i j : homology f g w ⟶ W
hh : (fun e => (homologyIsoCokernelLift f g w).inv ≫ e) i = (fun e => (homologyIsoCokernelLift f g w).inv ≫ e) 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 : homology f g w ⟶ W
h :
  (cokernel.π (kernel.lift g f w) ≫ (homologyIsoCokernelLift f g w).inv) ≫ a =
    (cokernel.π (kernel.lift g f w) ≫ (homologyIsoCokernelLift f g w).inv) ≫ b
i j : homology f g w ⟶ W
hh :
  (homologyIsoCokernelLift f g w).hom ≫ (fun e => (homologyIsoCokernelLift f g w).inv ≫ e) i =
    (homologyIsoCokernelLift f g w).hom ≫ (fun e => (homologyIsoCokernelLift f g w).inv ≫ e) j
⊢ i = j