Theorem: CategoryTheory.InjectiveResolution.ofCocomplex_exactAt_succ
File: Mathlib/CategoryTheory/Abelian/InjectiveResolution.lean

Proof steps:
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : EnoughInjectives C
Z : C
n : ℕ
⊢ HomologicalComplex.ExactAt (ofCocomplex Z) (n + 1)
state_after: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : EnoughInjectives C
Z : C
n : ℕ
⊢ (HomologicalComplex.sc' (ofCocomplex Z) n (n + 1) (n + 1 + 1)).Exact
tactic: rw [HomologicalComplex.exactAt_iff' _ n (n + 1) (n + 1 + 1) (by simp) (by simp)]
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : EnoughInjectives C
Z : C
n : ℕ
⊢ (HomologicalComplex.sc' (ofCocomplex Z) n (n + 1) (n + 1 + 1)).Exact
state_after: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : EnoughInjectives C
Z : C
n : ℕ
⊢ (ShortComplex.mk
      ((CochainComplex.of
            (fun n =>
              (CochainComplex.mkAux (under Z) (syzygies (Injective.ι Z)) (syzygies (d (Injective.ι Z)))
                  (d (Injective.ι Z)) (d (d (Injective.ι Z))) ⋯ (fun S => ⟨syzygies S.g, ⟨d S.g, ⋯⟩⟩) n).X₁)
            (fun n =>
              (CochainComplex.mkAux (under Z) (syzygies (Injective.ι Z)) (syzygies (d (Injective.ι Z)))
                  (d (Injective.ι Z)) (d (d (Injective.ι Z))) ⋯ (fun S => ⟨syzygies S.g, ⟨d S.g, ⋯⟩⟩) n).f)
            ⋯).d
        n (n + 1))
      ((CochainComplex.of
            (fun n =>
              (CochainComplex.mkAux (under Z) (syzygies (Injective.ι Z)) (syzygies (d (Injective.ι Z)))
                  (d (Injective.ι Z)) (d (d (Injective.ι Z))) ⋯ (fun S => ⟨syzygies S.g, ⟨d S.g, ⋯⟩⟩) n).X₁)
            (fun n =>
              (CochainComplex.mkAux (under Z) (syzygies (Injective.ι Z)) (syzygies (d (Injective.ι Z)))
                  (d (Injective.ι Z)) (d (d (Injective.ι Z))) ⋯ (fun S => ⟨syzygies S.g, ⟨d S.g, ⋯⟩⟩) n).f)
            ⋯).d
        (n + 1) (n + 1 + 1))
      ⋯).Exact
tactic: dsimp [ofCocomplex, CochainComplex.mk', CochainComplex.mk, HomologicalComplex.sc',
      HomologicalComplex.shortComplexFunctor']
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : EnoughInjectives C
Z : C
n : ℕ
⊢ (ShortComplex.mk
      ((CochainComplex.of
            (fun n =>
              (CochainComplex.mkAux (under Z) (syzygies (Injective.ι Z)) (syzygies (d (Injective.ι Z)))
                  (d (Injective.ι Z)) (d (d (Injective.ι Z))) ⋯ (fun S => ⟨syzygies S.g, ⟨d S.g, ⋯⟩⟩) n).X₁)
            (fun n =>
              (CochainComplex.mkAux (under Z) (syzygies (Injective.ι Z)) (syzygies (d (Injective.ι Z)))
                  (d (Injective.ι Z)) (d (d (Injective.ι Z))) ⋯ (fun S => ⟨syzygies S.g, ⟨d S.g, ⋯⟩⟩) n).f)
            ⋯).d
        n (n + 1))
      ((CochainComplex.of
            (fun n =>
              (CochainComplex.mkAux (under Z) (syzygies (Injective.ι Z)) (syzygies (d (Injective.ι Z)))
                  (d (Injective.ι Z)) (d (d (Injective.ι Z))) ⋯ (fun S => ⟨syzygies S.g, ⟨d S.g, ⋯⟩⟩) n).X₁)
            (fun n =>
              (CochainComplex.mkAux (under Z) (syzygies (Injective.ι Z)) (syzygies (d (Injective.ι Z)))
                  (d (Injective.ι Z)) (d (d (Injective.ι Z))) ⋯ (fun S => ⟨syzygies S.g, ⟨d S.g, ⋯⟩⟩) n).f)
            ⋯).d
        (n + 1) (n + 1 + 1))
      ⋯).Exact
state_after: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : EnoughInjectives C
Z : C
n : ℕ
⊢ (ShortComplex.mk
      (CochainComplex.mkAux (under Z) (syzygies (Injective.ι Z)) (syzygies (d (Injective.ι Z))) (d (Injective.ι Z))
          (d (d (Injective.ι Z))) ⋯ (fun S => ⟨syzygies S.g, ⟨d S.g, ⋯⟩⟩) n).f
      (CochainComplex.mkAux (under Z) (syzygies (Injective.ι Z)) (syzygies (d (Injective.ι Z))) (d (Injective.ι Z))
          (d (d (Injective.ι Z))) ⋯ (fun S => ⟨syzygies S.g, ⟨d S.g, ⋯⟩⟩) (n + 1)).f
      ⋯).Exact
tactic: simp only [CochainComplex.of_d]
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : EnoughInjectives C
Z : C
n : ℕ
⊢ (ShortComplex.mk
      (CochainComplex.mkAux (under Z) (syzygies (Injective.ι Z)) (syzygies (d (Injective.ι Z))) (d (Injective.ι Z))
          (d (d (Injective.ι Z))) ⋯ (fun S => ⟨syzygies S.g, ⟨d S.g, ⋯⟩⟩) n).f
      (CochainComplex.mkAux (under Z) (syzygies (Injective.ι Z)) (syzygies (d (Injective.ι Z))) (d (Injective.ι Z))
          (d (d (Injective.ι Z))) ⋯ (fun S => ⟨syzygies S.g, ⟨d S.g, ⋯⟩⟩) (n + 1)).f
      ⋯).Exact
state_after: no goals
tactic: match n with
  | 0 => apply exact_f_d ((CochainComplex.mkAux _ _ _
      (d (Injective.ι Z)) (d (d (Injective.ι Z))) _ _ 0).f)
  | n+1 => apply exact_f_d ((CochainComplex.mkAux _ _ _
      (d (Injective.ι Z)) (d (d (Injective.ι Z))) _ _ (n+1)).f)