-- Mathlib/Algebra/Homology/DerivedCategory/Ext/ExactSequences.lean
/-- Alternative formulation of `contravariant_sequence_exact₃` -/
lemma contravariant_sequence_exact₃' :
    (ShortComplex.mk (AddCommGrp.ofHom (hS.extClass.precomp Y h))
      (AddCommGrp.ofHom (((mk₀ S.g).precomp Y (zero_add n₁)))) (by
        ext
        dsimp
        simp only [ShortComplex.ShortExact.comp_extClass_assoc])).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₀ n₁ : ℕ
h : 1 + n₀ = n₁
this✝ : HasDerivedCategory C := HasDerivedCategory.standard C
this :
  Function.Exact
    ⇑(ConcreteCategory.hom
        (ShortComplex.mk
            ((preadditiveYoneda.obj ((singleFunctor C 0).obj Y)).homologySequenceδ
              ((triangleOpEquivalence (DerivedCategory C)).functor.obj (op hS.singleTriangle)) ↑n₀ ↑n₁ ⋯)
            (((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)).homologySequenceδ
              ((triangleOpEquivalence (DerivedCategory C)).functor.obj (op hS.singleTriangle)) ↑n₀ ↑n₁ ⋯)
            (((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)).homologySequenceδ
                ((triangleOpEquivalence (DerivedCategory C)).functor.obj (op hS.singleTriangle)) ↑n₀ ↑n₁ ⋯)
              (((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 (hS.extClass.precomp Y h)) (AddCommGrp.ofHom ((mk₀ S.g).precomp Y ⋯)) ⋯).g)

Tactic:
ext

Result:
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₀ n₁ : ℕ
h : 1 + n₀ = n₁
this✝ : HasDerivedCategory C := HasDerivedCategory.standard C
this :
  Function.Exact
    ⇑(ConcreteCategory.hom
        (ShortComplex.mk
            ((preadditiveYoneda.obj ((singleFunctor C 0).obj Y)).homologySequenceδ
              ((triangleOpEquivalence (DerivedCategory C)).functor.obj (op hS.singleTriangle)) ↑n₀ ↑n₁ ⋯)
            (((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)).homologySequenceδ
              ((triangleOpEquivalence (DerivedCategory C)).functor.obj (op hS.singleTriangle)) ↑n₀ ↑n₁ ⋯)
            (((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)).homologySequenceδ
                  ((triangleOpEquivalence (DerivedCategory C)).functor.obj (op hS.singleTriangle)) ↑n₀ ↑n₁ ⋯)
                (((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 (hS.extClass.precomp Y h)) (AddCommGrp.ofHom ((mk₀ S.g).precomp Y ⋯))
              ⋯).g))
      x✝

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₀ n₁ : ℕ
h : 1 + n₀ = n₁
this✝ : HasDerivedCategory C := HasDerivedCategory.standard C
this :
  Function.Exact
    ⇑(ConcreteCategory.hom
        (ShortComplex.mk
            ((preadditiveYoneda.obj ((singleFunctor C 0).obj Y)).homologySequenceδ
              ((triangleOpEquivalence (DerivedCategory C)).functor.obj (op hS.singleTriangle)) ↑n₀ ↑n₁ ⋯)
            (((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)).homologySequenceδ
              ((triangleOpEquivalence (DerivedCategory C)).functor.obj (op hS.singleTriangle)) ↑n₀ ↑n₁ ⋯)
            (((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)).homologySequenceδ
                  ((triangleOpEquivalence (DerivedCategory C)).functor.obj (op hS.singleTriangle)) ↑n₀ ↑n₁ ⋯)
                (((preadditiveYoneda.obj ((singleFunctor C 0).obj Y)).shift ↑n₁).map
                  ((triangleOpEquivalence (DerivedCategory C)).functor.obj (op hS.singleTriangle)).mor₁)
                ⋯).f).comp
        ↑homAddEquiv)
      x✝ =
    ((↑homAddEquiv).comp
        (ConcreteCategory.hom
          (ShortComplex.mk (AddCommGrp.ofHom (hS.extClass.precomp Y h)) (AddCommGrp.ofHom ((mk₀ S.g).precomp Y ⋯))
              ⋯).f))
      x✝

Tactic:
dsimp

Result:
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₀ n₁ : ℕ
h : 1 + n₀ = n₁
this✝ : HasDerivedCategory C := HasDerivedCategory.standard C
this :
  Function.Exact
    ⇑(ConcreteCategory.hom
        (ShortComplex.mk
            ((preadditiveYoneda.obj ((singleFunctor C 0).obj Y)).homologySequenceδ
              ((triangleOpEquivalence (DerivedCategory C)).functor.obj (op hS.singleTriangle)) ↑n₀ ↑n₁ ⋯)
            (((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)).homologySequenceδ
              ((triangleOpEquivalence (DerivedCategory C)).functor.obj (op hS.singleTriangle)) ↑n₀ ↑n₁ ⋯)
            (((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
        ((preadditiveYonedaObj ((singleFunctor C 0).obj Y) ⋙
              forget₂ (ModuleCat (End ((singleFunctor C 0).obj Y))) AddCommGrp).homologySequenceδ
          (Triangle.mk ((singleFunctor C 0).map S.g).op ((singleFunctor C 0).map S.f).op
            ((opShiftFunctorEquivalence (DerivedCategory C) 1).counitIso.inv.app (op ((singleFunctor C 0).obj S.X₁)) ≫
              (shiftFunctor (DerivedCategory C)ᵒᵖ 1).map hS.singleδ.op))
          ↑n₀ ↑n₁ ⋯))
      x✝.hom =
    (hS.extClass.comp x✝ h).hom