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

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.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: 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 : ℕ
⊢ (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: 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.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: 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)
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: simp
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : EnoughInjectives C
Z : C
n : ℕ
⊢ (ComplexShape.up ℕ).prev (n + 1) = n
state_after: no goals

tactic: simp
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : EnoughInjectives C
Z : C
n : ℕ
⊢ (ComplexShape.up ℕ).next (n + 1) = n + 1 + 1
state_after: no goals

tactic: apply exact_f_d ((CochainComplex.mkAux _ _ _
(d (Injective.ι Z)) (d (d (Injective.ι Z))) _ _ 0).f)
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, ⋯⟩⟩) 0).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, ⋯⟩⟩) (0 + 1)).f
      ⋯).Exact
state_after: no goals

tactic: apply exact_f_d ((CochainComplex.mkAux _ _ _
(d (Injective.ι Z)) (d (d (Injective.ι Z))) _ _ (n+1)).f)
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : EnoughInjectives C
Z : C
n✝ 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 + 1)).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 + 1)).f
      ⋯).Exact
state_after: no goals