-- Mathlib/Algebra/Homology/DerivedCategory/Ext/ExactSequences.lean
/-- Alternative formulation of `contravariant_sequence_exact₂` -/
lemma contravariant_sequence_exact₂' (n : ℕ) :
    (ShortComplex.mk (AddCommGrp.ofHom ((mk₀ S.g).precomp Y (zero_add n)))
      (AddCommGrp.ofHom ((mk₀ S.f).precomp Y (zero_add n))) (by
        ext
        dsimp
        simp only [mk₀_comp_mk₀_assoc, ShortComplex.zero, mk₀_zero, zero_comp])).Exact

Proof state:
case comm₁₂
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasExt C
S : ShortComplex C
hS : S.ShortExact
Y : C
n : ℕ
this✝ : HasDerivedCategory C := HasDerivedCategory.standard C
this :
  Function.Exact
    ⇑(ConcreteCategory.hom
        (ShortComplex.mk
            (((preadditiveYoneda.obj ((singleFunctor C 0).obj Y)).shift ↑n).map
              ((triangleOpEquivalence (DerivedCategory C)).functor.obj (op hS.singleTriangle)).mor₁)
            (((preadditiveYoneda.obj ((singleFunctor C 0).obj Y)).shift ↑n).map
              ((triangleOpEquivalence (DerivedCategory C)).functor.obj (op hS.singleTriangle)).mor₂)
            ⋯).f)
    ⇑(ConcreteCategory.hom
        (ShortComplex.mk
            (((preadditiveYoneda.obj ((singleFunctor C 0).obj Y)).shift ↑n).map
              ((triangleOpEquivalence (DerivedCategory C)).functor.obj (op hS.singleTriangle)).mor₁)
            (((preadditiveYoneda.obj ((singleFunctor C 0).obj Y)).shift ↑n).map
              ((triangleOpEquivalence (DerivedCategory C)).functor.obj (op hS.singleTriangle)).mor₂)
            ⋯).g)
⊢ (ConcreteCategory.hom
          (ShortComplex.mk
              (((preadditiveYoneda.obj ((singleFunctor C 0).obj Y)).shift ↑n).map
                ((triangleOpEquivalence (DerivedCategory C)).functor.obj (op hS.singleTriangle)).mor₁)
              (((preadditiveYoneda.obj ((singleFunctor C 0).obj Y)).shift ↑n).map
                ((triangleOpEquivalence (DerivedCategory C)).functor.obj (op hS.singleTriangle)).mor₂)
              ⋯).f).comp
      ↑homAddEquiv =
    (↑homAddEquiv).comp
      (ConcreteCategory.hom
        (ShortComplex.mk (AddCommGrp.ofHom ((mk₀ S.g).precomp Y ⋯)) (AddCommGrp.ofHom ((mk₀ S.f).precomp Y ⋯)) ⋯).f)

case comm₂₃
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasExt C
S : ShortComplex C
hS : S.ShortExact
Y : C
n : ℕ
this✝ : HasDerivedCategory C := HasDerivedCategory.standard C
this :
  Function.Exact
    ⇑(ConcreteCategory.hom
        (ShortComplex.mk
            (((preadditiveYoneda.obj ((singleFunctor C 0).obj Y)).shift ↑n).map
              ((triangleOpEquivalence (DerivedCategory C)).functor.obj (op hS.singleTriangle)).mor₁)
            (((preadditiveYoneda.obj ((singleFunctor C 0).obj Y)).shift ↑n).map
              ((triangleOpEquivalence (DerivedCategory C)).functor.obj (op hS.singleTriangle)).mor₂)
            ⋯).f)
    ⇑(ConcreteCategory.hom
        (ShortComplex.mk
            (((preadditiveYoneda.obj ((singleFunctor C 0).obj Y)).shift ↑n).map
              ((triangleOpEquivalence (DerivedCategory C)).functor.obj (op hS.singleTriangle)).mor₁)
            (((preadditiveYoneda.obj ((singleFunctor C 0).obj Y)).shift ↑n).map
              ((triangleOpEquivalence (DerivedCategory C)).functor.obj (op hS.singleTriangle)).mor₂)
            ⋯).g)
⊢ (ConcreteCategory.hom
          (ShortComplex.mk
              (((preadditiveYoneda.obj ((singleFunctor C 0).obj Y)).shift ↑n).map
                ((triangleOpEquivalence (DerivedCategory C)).functor.obj (op hS.singleTriangle)).mor₁)
              (((preadditiveYoneda.obj ((singleFunctor C 0).obj Y)).shift ↑n).map
                ((triangleOpEquivalence (DerivedCategory C)).functor.obj (op hS.singleTriangle)).mor₂)
              ⋯).g).comp
      ↑homAddEquiv =
    (↑homAddEquiv).comp
      (ConcreteCategory.hom
        (ShortComplex.mk (AddCommGrp.ofHom ((mk₀ S.g).precomp Y ⋯)) (AddCommGrp.ofHom ((mk₀ S.f).precomp Y ⋯)) ⋯).g)

Tactic:
all_goals ext; apply singleFunctor_map_comp_hom (C := C)

Result:
no goals

Proof state:
case hf.h
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasExt C
S : ShortComplex C
hS : S.ShortExact
Y : C
n : ℕ
x✝ : ↑(AddCommGrp.of (Ext S.X₃ Y n))
⊢ (AddCommGrp.Hom.hom (AddCommGrp.ofHom ((mk₀ S.g).precomp Y ⋯) ≫ AddCommGrp.ofHom ((mk₀ S.f).precomp Y ⋯))) x✝ =
    (AddCommGrp.Hom.hom 0) x✝

Tactic:
dsimp

Result:
case hf.h
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasExt C
S : ShortComplex C
hS : S.ShortExact
Y : C
n : ℕ
x✝ : ↑(AddCommGrp.of (Ext S.X₃ Y n))
⊢ (mk₀ S.f).comp ((mk₀ S.g).comp x✝ ⋯) ⋯ = 0

Proof state:
case comm₂₃.h
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasExt C
S : ShortComplex C
hS : S.ShortExact
Y : C
n : ℕ
this✝ : HasDerivedCategory C := HasDerivedCategory.standard C
this :
  Function.Exact
    ⇑(ConcreteCategory.hom
        (ShortComplex.mk
            (((preadditiveYoneda.obj ((singleFunctor C 0).obj Y)).shift ↑n).map
              ((triangleOpEquivalence (DerivedCategory C)).functor.obj (op hS.singleTriangle)).mor₁)
            (((preadditiveYoneda.obj ((singleFunctor C 0).obj Y)).shift ↑n).map
              ((triangleOpEquivalence (DerivedCategory C)).functor.obj (op hS.singleTriangle)).mor₂)
            ⋯).f)
    ⇑(ConcreteCategory.hom
        (ShortComplex.mk
            (((preadditiveYoneda.obj ((singleFunctor C 0).obj Y)).shift ↑n).map
              ((triangleOpEquivalence (DerivedCategory C)).functor.obj (op hS.singleTriangle)).mor₁)
            (((preadditiveYoneda.obj ((singleFunctor C 0).obj Y)).shift ↑n).map
              ((triangleOpEquivalence (DerivedCategory C)).functor.obj (op hS.singleTriangle)).mor₂)
            ⋯).g)
x✝ : Ext S.X₂ Y n
⊢ ((ConcreteCategory.hom
            (ShortComplex.mk
                (((preadditiveYoneda.obj ((singleFunctor C 0).obj Y)).shift ↑n).map
                  ((triangleOpEquivalence (DerivedCategory C)).functor.obj (op hS.singleTriangle)).mor₁)
                (((preadditiveYoneda.obj ((singleFunctor C 0).obj Y)).shift ↑n).map
                  ((triangleOpEquivalence (DerivedCategory C)).functor.obj (op hS.singleTriangle)).mor₂)
                ⋯).g).comp
        ↑homAddEquiv)
      x✝ =
    ((↑homAddEquiv).comp
        (ConcreteCategory.hom
          (ShortComplex.mk (AddCommGrp.ofHom ((mk₀ S.g).precomp Y ⋯)) (AddCommGrp.ofHom ((mk₀ S.f).precomp Y ⋯)) ⋯).g))
      x✝

Tactic:
apply singleFunctor_map_comp_hom (C := C)

Result:
no goals