-- Lean 4 proof step from Mathlib.AlgebraicTopology.ExtraDegeneracy (goal)
Goal:
C : Type u_1
inst : Category.{v_1, u_1} C
inst_1 : Preadditive.{v_1, u_1} C
inst_2 : HasZeroObject.{v_1, u_1} C
X : Augmented.{v_1, u_1} C
ed : X.ExtraDegeneracy
i : ℕ
⊢ HomologicalComplex.Hom.f
      (CategoryStruct.comp (Y := Functor.obj (ChainComplex.single₀ C) (Functor.obj point X))
        (NatTrans.app AlternatingFaceMapComplex.ε X)
        ((Equiv.symm
              (ChainComplex.fromSingle₀Equiv (AlternatingFaceMapComplex.obj (Functor.obj drop X))
                (Functor.obj point X)) :
            (a : point.obj X ⟶ (AlternatingFaceMapComplex.obj (drop.obj X)).X 0) →
              (ChainComplex.single₀ C).obj (point.obj X) ⟶ AlternatingFaceMapComplex.obj (drop.obj X))
          ed.s'))
      i =
    HAdd.hAdd (α :=
        HomologicalComplex.X (AlternatingFaceMapComplex.obj (Functor.obj drop X)) i ⟶
          HomologicalComplex.X (AlternatingFaceMapComplex.obj (Functor.obj drop X)) i)
        (β :=
        HomologicalComplex.X (AlternatingFaceMapComplex.obj (Functor.obj drop X)) i ⟶
          HomologicalComplex.X (AlternatingFaceMapComplex.obj (Functor.obj drop X)) i)
        ((dNext i :
              (a :
                  (i j : ℕ) →
                    (AlternatingFaceMapComplex.obj (drop.obj X)).X i ⟶
                      (AlternatingFaceMapComplex.obj (drop.obj X)).X j) →
                (AlternatingFaceMapComplex.obj (drop.obj X)).X i ⟶ (AlternatingFaceMapComplex.obj (drop.obj X)).X i)
            fun (i : ℕ) ↦
            Pi.single (M := fun (j : ℕ) ↦
              HomologicalComplex.X (AlternatingFaceMapComplex.obj (Functor.obj drop X)) i ⟶
                HomologicalComplex.X (AlternatingFaceMapComplex.obj (Functor.obj drop X)) j)
              (i + 1) (-ed.s i) :
          HomologicalComplex.X (AlternatingFaceMapComplex.obj (Functor.obj drop X)) i ⟶
            HomologicalComplex.X (AlternatingFaceMapComplex.obj (Functor.obj drop X)) i)
        ((prevD i :
              (a :
                  (i j : ℕ) →
                    (AlternatingFaceMapComplex.obj (drop.obj X)).X i ⟶
                      (AlternatingFaceMapComplex.obj (drop.obj X)).X j) →
                (AlternatingFaceMapComplex.obj (drop.obj X)).X i ⟶ (AlternatingFaceMapComplex.obj (drop.obj X)).X i)
            fun (i : ℕ) ↦
            Pi.single (M := fun (j : ℕ) ↦
              HomologicalComplex.X (AlternatingFaceMapComplex.obj (Functor.obj drop X)) i ⟶
                HomologicalComplex.X (AlternatingFaceMapComplex.obj (Functor.obj drop X)) j)
              (i + 1) (-ed.s i) :
          HomologicalComplex.X (AlternatingFaceMapComplex.obj (Functor.obj drop X)) i ⟶
            HomologicalComplex.X (AlternatingFaceMapComplex.obj (Functor.obj drop X)) i) +
      HomologicalComplex.Hom.f (𝟙 (AlternatingFaceMapComplex.obj (Functor.obj drop X))) i
have zero : HomologicalComplex.Hom.f
    (CategoryStruct.comp (Y := Functor.obj (ChainComplex.single₀ C) (Functor.obj point X))
      (NatTrans.app AlternatingFaceMapComplex.ε X)
      ((Equiv.symm
            (ChainComplex.fromSingle₀Equiv (AlternatingFaceMapComplex.obj (Functor.obj drop X)) (Functor.obj point X)) :
          (a : point.obj X ⟶ (AlternatingFaceMapComplex.obj (drop.obj X)).X 0) →
            (ChainComplex.single₀ C).obj (point.obj X) ⟶ AlternatingFaceMapComplex.obj (drop.obj X))
        ed.s'))
    0 =
  HAdd.hAdd (α :=
      HomologicalComplex.X (AlternatingFaceMapComplex.obj (Functor.obj drop X)) 0 ⟶
        HomologicalComplex.X (AlternatingFaceMapComplex.obj (Functor.obj drop X)) 0)
      (β :=
      HomologicalComplex.X (AlternatingFaceMapComplex.obj (Functor.obj drop X)) 0 ⟶
        HomologicalComplex.X (AlternatingFaceMapComplex.obj (Functor.obj drop X)) 0)
      ((dNext 0 :
            (a :
                (i j : ℕ) →
                  (AlternatingFaceMapComplex.obj (drop.obj X)).X i ⟶ (AlternatingFaceMapComplex.obj (drop.obj X)).X j) →
              (AlternatingFaceMapComplex.obj (drop.obj X)).X 0 ⟶ (AlternatingFaceMapComplex.obj (drop.obj X)).X 0)
          fun (i : ℕ) ↦
          Pi.single (M := fun (j : ℕ) ↦
            HomologicalComplex.X (AlternatingFaceMapComplex.obj (Functor.obj drop X)) i ⟶
              HomologicalComplex.X (AlternatingFaceMapComplex.obj (Functor.obj drop X)) j)
            (i + 1) (-ed.s i) :
        HomologicalComplex.X (AlternatingFaceMapComplex.obj (Functor.obj drop X)) 0 ⟶
          HomologicalComplex.X (AlternatingFaceMapComplex.obj (Functor.obj drop X)) 0)
      ((prevD 0 :
            (a :
                (i j : ℕ) →
                  (AlternatingFaceMapComplex.obj (drop.obj X)).X i ⟶ (AlternatingFaceMapComplex.obj (drop.obj X)).X j) →
              (AlternatingFaceMapComplex.obj (drop.obj X)).X 0 ⟶ (AlternatingFaceMapComplex.obj (drop.obj X)).X 0)
          fun (i : ℕ) ↦
          Pi.single (M := fun (j : ℕ) ↦
            HomologicalComplex.X (AlternatingFaceMapComplex.obj (Functor.obj drop X)) i ⟶
              HomologicalComplex.X (AlternatingFaceMapComplex.obj (Functor.obj drop X)) j)
            (i + 1) (-ed.s i) :
        HomologicalComplex.X (AlternatingFaceMapComplex.obj (Functor.obj drop X)) 0 ⟶
          HomologicalComplex.X (AlternatingFaceMapComplex.obj (Functor.obj drop X)) 0) +
    HomologicalComplex.Hom.f (𝟙 (AlternatingFaceMapComplex.obj (Functor.obj drop X))) 0
Tactic: cases i with
        | zero =>
          rw [Homotopy.prevD_chainComplex, Homotopy.dNext_zero_chainComplex]
          simp [dsimp% ChainComplex.fromSingle₀Equiv_symm_apply_f_zero
            (C := AlternatingFaceMapComplex.obj X.left), s_comp_δ₀, s₀_comp_δ₁]
        | succ i =>
          rw [Homotopy.prevD_chainComplex, Homotopy.dNext_succ_chainComplex]
          simp [Fin.sum_univ_succ (n := i + 2), s_comp_δ₀, Preadditive.sum_comp,
            Preadditive.comp_sum,
            s_comp_δ, pow_succ]
Cleared hypotheses: i