Theorem: HomologicalComplex.Hom.fromSingle₀KernelAtZeroIso_inv_eq
File: Mathlib/Algebra/Homology/QuasiIso.lean

tactic: rw [f.2 0 1 rfl]
state_before: ι : Type ?u.69952
V : Type u
inst✝⁸ : Category 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.70126
inst✝¹ : Category W
inst✝ : Abelian W
X : CochainComplex W ℕ
Y : W
f : (CochainComplex.single₀ W).obj Y ⟶ X
hf : QuasiIso f
⊢ HomologicalComplex.Hom.f f 0 ≫ d X 0 1 = 0

tactic: exact zero_comp
state_before: ι : Type ?u.69952
V : Type u
inst✝⁸ : Category 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.70126
inst✝¹ : Category W
inst✝ : Abelian W
X : CochainComplex W ℕ
Y : W
f : (CochainComplex.single₀ W).obj Y ⟶ X
hf : QuasiIso f
⊢ d ((CochainComplex.single₀ W).obj Y) 0 1 ≫ HomologicalComplex.Hom.f f 1 = 0

tactic: apply equalizer.hom_ext
state_before: ι : Type ?u.69952
V : Type u
inst✝⁸ : Category 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 W
inst✝ : Abelian W
X : CochainComplex W ℕ
Y : W
f : (CochainComplex.single₀ W).obj Y ⟶ X
hf : QuasiIso f
⊢ (fromSingle₀KernelAtZeroIso f).inv =
    kernel.lift (d X 0 1) (HomologicalComplex.Hom.f f 0) (_ : HomologicalComplex.Hom.f f 0 ≫ d X 0 1 = 0)

tactic: dsimp only [fromSingle₀KernelAtZeroIso, CochainComplex.homologyZeroIso, homologyOfZeroLeft,
  homology.mapIso, CochainComplex.homologyFunctor0Single₀, kernel.map]
state_before: case h
ι : Type ?u.69952
V : Type u
inst✝⁸ : Category 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 W
inst✝ : Abelian W
X : CochainComplex W ℕ
Y : W
f : (CochainComplex.single₀ W).obj Y ⟶ X
hf : QuasiIso f
⊢ (fromSingle₀KernelAtZeroIso f).inv ≫ equalizer.ι (d X 0 1) 0 =
    kernel.lift (d X 0 1) (HomologicalComplex.Hom.f f 0) (_ : HomologicalComplex.Hom.f f 0 ≫ d X 0 1 = 0) ≫
      equalizer.ι (d X 0 1) 0

tactic: simp only [Iso.trans_inv, Iso.app_inv, Iso.symm_inv, Category.assoc, equalizer_as_kernel,
  kernel.lift_ι]
state_before: case h
ι : Type ?u.69952
V : Type u
inst✝⁸ : Category 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 W
inst✝ : Abelian W
X : CochainComplex W ℕ
Y : W
f : (CochainComplex.single₀ W).obj Y ⟶ X
hf : QuasiIso f
⊢ ((Iso.mk
                (homology.map (_ : dTo X 0 ≫ dFrom X 0 = 0) (_ : 0 ≫ d X 0 1 = 0)
                  (Arrow.isoMk (xPrevIsoSelf X CochainComplex.homologyZeroIso.proof_9)
                      (Iso.refl (Arrow.mk (dTo X 0)).right)).hom
                  (Arrow.isoMk (Iso.refl (Arrow.mk (dFrom X 0)).left)
                      (xNextIso X CochainComplex.homologyZeroIso.proof_11)).hom
                  (_ : 𝟙 (HomologicalComplex.X X 0) = 𝟙 (HomologicalComplex.X X 0)))
                (homology.map (_ : 0 ≫ d X 0 1 = 0) (_ : dTo X 0 ≫ dFrom X 0 = 0)
                  (Arrow.isoMk (xPrevIsoSelf X CochainComplex.homologyZeroIso.proof_9)
                      (Iso.refl (Arrow.mk (dTo X 0)).right)).inv
                  (Arrow.isoMk (Iso.refl (Arrow.mk (dFrom X 0)).left)
                      (xNextIso X CochainComplex.homologyZeroIso.proof_11)).inv
                  (_ :
                    (Arrow.isoMk (xPrevIsoSelf X CochainComplex.homologyZeroIso.proof_9)
                            (Iso.refl (Arrow.mk (dTo X 0)).right)).inv.right =
                      (Arrow.isoMk (Iso.refl (Arrow.mk (dFrom X 0)).left)
                            (xNextIso X CochainComplex.homologyZeroIso.proof_11)).inv.left)) ≪≫
              (cokernelIsoOfEq (_ : imageToKernel 0 (d X 0 1) (_ : 0 ≫ d X 0 1 = 0) = 0) ≪≫ cokernelZeroIsoTarget) ≪≫
                kernelSubobjectIso (d X 0 1)).symm ≪≫
          (asIso ((homologyFunctor W (ComplexShape.up ℕ) 0).map f)).symm ≪≫
            (NatIso.ofComponents fun X =>
                  homology.congr
                      (_ : dTo ((CochainComplex.single₀ W).obj X) 0 ≫ dFrom ((CochainComplex.single₀ W).obj X) 0 = 0)
                      (_ : 0 ≫ 0 = 0)
                      (_ : d ((CochainComplex.single₀ W).obj X) (ComplexShape.prev (ComplexShape.up ℕ) 0) 0 = 0)
                      (_ : 0 = 0) ≪≫
                    homologyZeroZero).app
              Y).inv ≫
      equalizer.ι (d X 0 1) 0 =
    kernel.lift (d X 0 1) (HomologicalComplex.Hom.f f 0) (_ : HomologicalComplex.Hom.f f 0 ≫ d X 0 1 = 0) ≫
      equalizer.ι (d X 0 1) 0

tactic: dsimp [asIso]
state_before: case h
ι : Type ?u.69952
V : Type u
inst✝⁸ : Category 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 W
inst✝ : Abelian W
X : CochainComplex W ℕ
Y : W
f : (CochainComplex.single₀ W).obj Y ⟶ X
hf : QuasiIso f
⊢ (NatIso.ofComponents fun X =>
              homology.congr
                  (_ : dTo ((CochainComplex.single₀ W).obj X) 0 ≫ dFrom ((CochainComplex.single₀ W).obj X) 0 = 0)
                  (_ : 0 ≫ 0 = 0)
                  (_ : d ((CochainComplex.single₀ W).obj X) (ComplexShape.prev (ComplexShape.up ℕ) 0) 0 = 0)
                  (_ : 0 = 0) ≪≫
                homologyZeroZero).inv.app
        Y ≫
      (asIso ((homologyFunctor W (ComplexShape.up ℕ) 0).map f)).hom ≫
        (Iso.mk
                (homology.map (_ : dTo X 0 ≫ dFrom X 0 = 0) (_ : 0 ≫ d X 0 1 = 0)
                  (Arrow.isoMk (xPrevIsoSelf X CochainComplex.homologyZeroIso.proof_9)
                      (Iso.refl (Arrow.mk (dTo X 0)).right)).hom
                  (Arrow.isoMk (Iso.refl (Arrow.mk (dFrom X 0)).left)
                      (xNextIso X CochainComplex.homologyZeroIso.proof_11)).hom
                  (_ : 𝟙 (HomologicalComplex.X X 0) = 𝟙 (HomologicalComplex.X X 0)))
                (homology.map (_ : 0 ≫ d X 0 1 = 0) (_ : dTo X 0 ≫ dFrom X 0 = 0)
                  (Arrow.isoMk (xPrevIsoSelf X CochainComplex.homologyZeroIso.proof_9)
                      (Iso.refl (Arrow.mk (dTo X 0)).right)).inv
                  (Arrow.isoMk (Iso.refl (Arrow.mk (dFrom X 0)).left)
                      (xNextIso X CochainComplex.homologyZeroIso.proof_11)).inv
                  (_ :
                    (Arrow.isoMk (xPrevIsoSelf X CochainComplex.homologyZeroIso.proof_9)
                            (Iso.refl (Arrow.mk (dTo X 0)).right)).inv.right =
                      (Arrow.isoMk (Iso.refl (Arrow.mk (dFrom X 0)).left)
                            (xNextIso X CochainComplex.homologyZeroIso.proof_11)).inv.left)) ≪≫
              (cokernelIsoOfEq (_ : imageToKernel 0 (d X 0 1) (_ : 0 ≫ d X 0 1 = 0) = 0) ≪≫ cokernelZeroIsoTarget) ≪≫
                kernelSubobjectIso (d X 0 1)).hom ≫
          kernel.ι (d X 0 1) =
    HomologicalComplex.Hom.f f 0

tactic: simp only [Category.assoc, homology.π_map, cokernelZeroIsoTarget_hom,
  cokernelIsoOfEq_hom_comp_desc, kernelSubobject_arrow, homology.π_map_assoc, IsIso.inv_comp_eq]
state_before: case h
ι : Type ?u.69952
V : Type u
inst✝⁸ : Category 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 W
inst✝ : Abelian W
X : CochainComplex W ℕ
Y : W
f : (CochainComplex.single₀ W).obj Y ⟶ X
hf : QuasiIso f
⊢ ((inv (Subobject.arrow (kernelSubobject 0)) ≫ homology.π 0 0 (_ : 0 ≫ 0 = 0)) ≫
        homology.map (_ : 0 ≫ 0 = 0)
          (_ : dTo ((CochainComplex.single₀ W).obj Y) 0 ≫ dFrom ((CochainComplex.single₀ W).obj Y) 0 = 0)
          (CommaMorphism.mk (𝟙 (xPrev ((CochainComplex.single₀ W).obj Y) 0)) (𝟙 Y))
          (CommaMorphism.mk (𝟙 Y) (𝟙 (xNext ((CochainComplex.single₀ W).obj Y) 0)))
          (_ :
            (CommaMorphism.mk (𝟙 (Arrow.mk 0).left) (𝟙 (Arrow.mk 0).right)).right =
              (CommaMorphism.mk (𝟙 (Arrow.mk 0).left) (𝟙 (Arrow.mk 0).right)).right)) ≫
      homology.map (_ : dTo ((CochainComplex.single₀ W).obj Y) 0 ≫ dFrom ((CochainComplex.single₀ W).obj Y) 0 = 0)
          (_ : dTo X 0 ≫ dFrom X 0 = 0) (sqTo f 0) (sqFrom f 0) (_ : (sqTo f 0).right = (sqTo f 0).right) ≫
        (homology.map (_ : dTo X 0 ≫ dFrom X 0 = 0) (_ : 0 ≫ d X 0 1 = 0)
              (Arrow.isoMk (xPrevIsoSelf X CochainComplex.homologyZeroIso.proof_9)
                  (Iso.refl (HomologicalComplex.X X 0))).hom
              (Arrow.isoMk (Iso.refl (HomologicalComplex.X X 0))
                  (xNextIso X CochainComplex.homologyZeroIso.proof_11)).hom
              (_ : 𝟙 (HomologicalComplex.X X 0) = 𝟙 (HomologicalComplex.X X 0)) ≫
            ((cokernelIsoOfEq (_ : imageToKernel 0 (d X 0 1) (_ : 0 ≫ d X 0 1 = 0) = 0)).hom ≫
                cokernelZeroIsoTarget.hom) ≫
              (kernelSubobjectIso (d X 0 1)).hom) ≫
          kernel.ι (d X 0 1) =
    HomologicalComplex.Hom.f f 0

tactic: simp [homology.π, kernelSubobjectMap_comp, Iso.refl_hom (X.X 0), Category.comp_id]
state_before: case h
ι : Type ?u.69952
V : Type u
inst✝⁸ : Category 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 W
inst✝ : Abelian W
X : CochainComplex W ℕ
Y : W
f : (CochainComplex.single₀ W).obj Y ⟶ X
hf : QuasiIso f
⊢ kernelSubobjectMap (CommaMorphism.mk (𝟙 Y) (𝟙 (xNext ((CochainComplex.single₀ W).obj Y) 0))) ≫
      kernelSubobjectMap (sqFrom f 0) ≫
        kernelSubobjectMap
            (Arrow.isoMk (Iso.refl (HomologicalComplex.X X 0))
                (xNextIso X CochainComplex.homologyZeroIso.proof_11)).hom ≫
          homology.π 0 (d X 0 1) (_ : 0 ≫ d X 0 1 = 0) ≫
            cokernel.desc (imageToKernel 0 (d X 0 1) (_ : 0 ≫ d X 0 1 = 0))
                (𝟙 (Subobject.underlying.obj (kernelSubobject (d X 0 1))))
                (_ :
                  imageToKernel 0 (d X 0 1) (_ : 0 ≫ d X 0 1 = 0) ≫
                      𝟙 (Subobject.underlying.obj (kernelSubobject (d X 0 1))) =
                    0) ≫
              Subobject.arrow (kernelSubobject (d X 0 1)) =
    Subobject.arrow (kernelSubobject 0) ≫ HomologicalComplex.Hom.f f 0