lemma ofCocomplex_exactAt_succ (n : ℕ) :
    (ofCocomplex Z).ExactAt (n + 1) := by
  rw [HomologicalComplex.exactAt_iff' _ n (n + 1) (n + 1 + 1) (by simp) (by simp)]
  cases n
  all_goals
    dsimp [ofCocomplex, HomologicalComplex.sc', HomologicalComplex.shortComplexFunctor',
      CochainComplex.mk', CochainComplex.mk]
    simp
    

Proof state:
case succ
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : EnoughInjectives C
Z : C
n✝ : ℕ
⊢ ShortComplex.Exact
    (ShortComplex.mk
      (CochainComplex.mkAux (under Z) (syzygies (Injective.ι Z)) (syzygies (d (Injective.ι Z))) (d (Injective.ι Z))
          (d (d (Injective.ι Z)))
          (_ :
            { fst := under Z, snd := { fst := syzygies (Injective.ι Z), snd := d (Injective.ι Z) } }.snd.snd ≫
                {
                      fst :=
                        syzygies
                          { fst := under Z,
                                snd := { fst := syzygies (Injective.ι Z), snd := d (Injective.ι Z) } }.2.snd,
                      snd :=
                        {
                          fst :=
                            d
                              { fst := under Z,
                                    snd := { fst := syzygies (Injective.ι Z), snd := d (Injective.ι Z) } }.2.snd,
                          snd :=
                            (_ :
                              { fst := under Z,
                                        snd := { fst := syzygies (Injective.ι Z), snd := d (Injective.ι Z) } }.2.snd ≫
                                  cokernel.π
                                      { fst := under Z,
                                            snd :=
                                              { fst := syzygies (Injective.ι Z), snd := d (Injective.ι Z) } }.2.snd ≫
                                    Injective.ι
                                      (cokernel
                                        { fst := under Z,
                                              snd :=
                                                { fst := syzygies (Injective.ι Z), snd := d (Injective.ι Z) } }.2.snd) =
                                0) } }.snd.fst =
              0)
          (fun t =>
            { fst := syzygies t.snd.snd.snd.snd.fst,
              snd :=
                { fst := d t.snd.snd.snd.snd.fst,
                  snd :=
                    (_ :
                      t.snd.snd.snd.snd.fst ≫
                          cokernel.π t.snd.snd.snd.snd.fst ≫ Injective.ι (cokernel t.snd.snd.snd.snd.fst) =
                        0) } })
          (Nat.succ n✝)).d₀
      (CochainComplex.mkAux (under Z) (syzygies (Injective.ι Z)) (syzygies (d (Injective.ι Z))) (d (Injective.ι Z))
          (d (d (Injective.ι Z)))
          (_ :
            { fst := under Z, snd := { fst := syzygies (Injective.ι Z), snd := d (Injective.ι Z) } }.snd.snd ≫
                {
                      fst :=
                        syzygies
                          { fst := under Z,
                                snd := { fst := syzygies (Injective.ι Z), snd := d (Injective.ι Z) } }.2.snd,
                      snd :=
                        {
                          fst :=
                            d
                              { fst := under Z,
                                    snd := { fst := syzygies (Injective.ι Z), snd := d (Injective.ι Z) } }.2.snd,
                          snd :=
                            (_ :
                              { fst := under Z,
                                        snd := { fst := syzygies (Injective.ι Z), snd := d (Injective.ι Z) } }.2.snd ≫
                                  cokernel.π
                                      { fst := under Z,
                                            snd :=
                                              { fst := syzygies (Injective.ι Z), snd := d (Injective.ι Z) } }.2.snd ≫
                                    Injective.ι
                                      (cokernel
                                        { fst := under Z,
                                              snd :=
                                                { fst := syzygies (Injective.ι Z), snd := d (Injective.ι Z) } }.2.snd) =
                                0) } }.snd.fst =
              0)
          (fun t =>
            { fst := syzygies t.snd.snd.snd.snd.fst,
              snd :=
                { fst := d t.snd.snd.snd.snd.fst,
                  snd :=
                    (_ :
                      t.snd.snd.snd.snd.fst ≫
                          cokernel.π t.snd.snd.snd.snd.fst ≫ Injective.ι (cokernel t.snd.snd.snd.snd.fst) =
                        0) } })
          (Nat.succ n✝ + 1)).d₀
      (_ :
        (CochainComplex.mkAux (under Z) (syzygies (Injective.ι Z)) (syzygies (d (Injective.ι Z))) (d (Injective.ι Z))
                (d (d (Injective.ι Z)))
                (_ :
                  { fst := under Z, snd := { fst := syzygies (Injective.ι Z), snd := d (Injective.ι Z) } }.snd.snd ≫
                      {
                            fst :=
                              syzygies
                                { fst := under Z,
                                      snd := { fst := syzygies (Injective.ι Z), snd := d (Injective.ι Z) } }.2.snd,
                            snd :=
                              {
                                fst :=
                                  d
                                    { fst := under Z,
                                          snd := { fst := syzygies (Injective.ι Z), snd := d (Injective.ι Z) } }.2.snd,
                                snd :=
                                  (_ :
                                    { fst := under Z,
                                              snd :=
                                                { fst := syzygies (Injective.ι Z), snd := d (Injective.ι Z) } }.2.snd ≫
                                        cokernel.π
                                            { fst := under Z,
                                                  snd :=
                                                    { fst := syzygies (Injective.ι Z),
                                                      snd := d (Injective.ι Z) } }.2.snd ≫
                                          Injective.ι
                                            (cokernel
                                              { fst := under Z,
                                                    snd :=
                                                      { fst := syzygies (Injective.ι Z),
                                                        snd := d (Injective.ι Z) } }.2.snd) =
                                      0) } }.snd.fst =
                    0)
                (fun t =>
                  { fst := syzygies t.snd.snd.snd.snd.fst,
                    snd :=
                      { fst := d t.snd.snd.snd.snd.fst,
                        snd :=
                          (_ :
                            t.snd.snd.snd.snd.fst ≫
                                cokernel.π t.snd.snd.snd.snd.fst ≫ Injective.ι (cokernel t.snd.snd.snd.snd.fst) =
                              0) } })
                (Nat.succ n✝)).d₀ ≫
            (CochainComplex.mkAux (under Z) (syzygies (Injective.ι Z)) (syzygies (d (Injective.ι Z)))
                (d (Injective.ι Z)) (d (d (Injective.ι Z)))
                (_ :
                  { fst := under Z, snd := { fst := syzygies (Injective.ι Z), snd := d (Injective.ι Z) } }.snd.snd ≫
                      {
                            fst :=
                              syzygies
                                { fst := under Z,
                                      snd := { fst := syzygies (Injective.ι Z), snd := d (Injective.ι Z) } }.2.snd,
                            snd :=
                              {
                                fst :=
                                  d
                                    { fst := under Z,
                                          snd := { fst := syzygies (Injective.ι Z), snd := d (Injective.ι Z) } }.2.snd,
                                snd :=
                                  (_ :
                                    { fst := under Z,
                                              snd :=
                                                { fst := syzygies (Injective.ι Z), snd := d (Injective.ι Z) } }.2.snd ≫
                                        cokernel.π
                                            { fst := under Z,
                                                  snd :=
                                                    { fst := syzygies (Injective.ι Z),
                                                      snd := d (Injective.ι Z) } }.2.snd ≫
                                          Injective.ι
                                            (cokernel
                                              { fst := under Z,
                                                    snd :=
                                                      { fst := syzygies (Injective.ι Z),
                                                        snd := d (Injective.ι Z) } }.2.snd) =
                                      0) } }.snd.fst =
                    0)
                (fun t =>
                  { fst := syzygies t.snd.snd.snd.snd.fst,
                    snd :=
                      { fst := d t.snd.snd.snd.snd.fst,
                        snd :=
                          (_ :
                            t.snd.snd.snd.snd.fst ≫
                                cokernel.π t.snd.snd.snd.snd.fst ≫ Injective.ι (cokernel t.snd.snd.snd.snd.fst) =
                              0) } })
                (Nat.succ n✝ + 1)).d₀ =
          0))

Next tactic:
apply exact_f_d