Theorem: homology'.π'_eq_π
File: Mathlib/CategoryTheory/Abelian/Homology.lean

tactic: dsimp [π', homology'IsoCokernelLift]
state_before: A : Type u
inst✝¹ : Category.{v, u} A
inst✝ : Abelian A
X Y Z : A
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ (kernelSubobjectIso g).hom ≫ π' f g w = π f g w
state_after: A : Type u
inst✝¹ : Category.{v, u} A
inst✝ : Abelian A
X Y Z : A
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ (kernelSubobjectIso g).hom ≫
      cokernel.π (kernel.lift g f w) ≫
        ((cokernelIsoOfEq ⋯).inv ≫
            cokernel.desc (factorThruImage f ≫ imageToKernel' f g w) (cokernel.π (imageToKernel' f g w)) ⋯) ≫
          (homology'IsoCokernelImageToKernel' f g w).inv =
    π f g w

tactic: simp only [← Category.assoc]
state_before: A : Type u
inst✝¹ : Category.{v, u} A
inst✝ : Abelian A
X Y Z : A
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ (kernelSubobjectIso g).hom ≫
      cokernel.π (kernel.lift g f w) ≫
        ((cokernelIsoOfEq ⋯).inv ≫
            cokernel.desc (factorThruImage f ≫ imageToKernel' f g w) (cokernel.π (imageToKernel' f g w)) ⋯) ≫
          (homology'IsoCokernelImageToKernel' f g w).inv =
    π f g w
state_after: A : Type u
inst✝¹ : Category.{v, u} A
inst✝ : Abelian A
X Y Z : A
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ ((((kernelSubobjectIso g).hom ≫ cokernel.π (kernel.lift g f w)) ≫ (cokernelIsoOfEq ⋯).inv) ≫
        cokernel.desc (factorThruImage f ≫ imageToKernel' f g w) (cokernel.π (imageToKernel' f g w)) ⋯) ≫
      (homology'IsoCokernelImageToKernel' f g w).inv =
    π f g w

tactic: rw [Iso.comp_inv_eq]
state_before: A : Type u
inst✝¹ : Category.{v, u} A
inst✝ : Abelian A
X Y Z : A
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ ((((kernelSubobjectIso g).hom ≫ cokernel.π (kernel.lift g f w)) ≫ (cokernelIsoOfEq ⋯).inv) ≫
        cokernel.desc (factorThruImage f ≫ imageToKernel' f g w) (cokernel.π (imageToKernel' f g w)) ⋯) ≫
      (homology'IsoCokernelImageToKernel' f g w).inv =
    π f g w
state_after: A : Type u
inst✝¹ : Category.{v, u} A
inst✝ : Abelian A
X Y Z : A
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ (((kernelSubobjectIso g).hom ≫ cokernel.π (kernel.lift g f w)) ≫ (cokernelIsoOfEq ⋯).inv) ≫
      cokernel.desc (factorThruImage f ≫ imageToKernel' f g w) (cokernel.π (imageToKernel' f g w)) ⋯ =
    π f g w ≫ (homology'IsoCokernelImageToKernel' f g w).hom

tactic: dsimp [π, homology'IsoCokernelImageToKernel']
state_before: A : Type u
inst✝¹ : Category.{v, u} A
inst✝ : Abelian A
X Y Z : A
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ (((kernelSubobjectIso g).hom ≫ cokernel.π (kernel.lift g f w)) ≫ (cokernelIsoOfEq ⋯).inv) ≫
      cokernel.desc (factorThruImage f ≫ imageToKernel' f g w) (cokernel.π (imageToKernel' f g w)) ⋯ =
    π f g w ≫ (homology'IsoCokernelImageToKernel' f g w).hom
state_after: A : Type u
inst✝¹ : Category.{v, u} A
inst✝ : Abelian A
X Y Z : A
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ (((kernelSubobjectIso g).hom ≫ cokernel.π (kernel.lift g f w)) ≫ (cokernelIsoOfEq ⋯).inv) ≫
      cokernel.desc (factorThruImage f ≫ imageToKernel' f g w) (cokernel.π (imageToKernel' f g w)) ⋯ =
    cokernel.π (imageToKernel f g w) ≫
      cokernel.map (imageToKernel f g w) (imageToKernel' f g w) (imageSubobjectIso f).hom (kernelSubobjectIso g).hom ⋯

tactic: simp
state_before: A : Type u
inst✝¹ : Category.{v, u} A
inst✝ : Abelian A
X Y Z : A
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ (((kernelSubobjectIso g).hom ≫ cokernel.π (kernel.lift g f w)) ≫ (cokernelIsoOfEq ⋯).inv) ≫
      cokernel.desc (factorThruImage f ≫ imageToKernel' f g w) (cokernel.π (imageToKernel' f g w)) ⋯ =
    cokernel.π (imageToKernel f g w) ≫
      cokernel.map (imageToKernel f g w) (imageToKernel' f g w) (imageSubobjectIso f).hom (kernelSubobjectIso g).hom ⋯
state_after: no goals