-- Lean 4 proof step from Mathlib.Algebra.Homology.CochainComplexOpposite (goal)
Goal:
C : Type u_1
inst : Category.{v_1, u_1} C
inst_1 : Preadditive.{v_1, u_1} C
K L : CochainComplex.{v_1, u_1, 0} C ℤ
f g : K ⟶ L
h : Homotopy f g
n : ℤ
⊢ HomologicalComplex.Hom.f (CategoryTheory.Functor.map (Equivalence.functor (opEquivalence C)) f.op) n =
    HAdd.hAdd (α :=
        (Functor.obj (Equivalence.functor (opEquivalence C)) (op L)).X n ⟶
          (Functor.obj (Equivalence.functor (opEquivalence C)) (op K)).X n)
        (β :=
        (Functor.obj (Equivalence.functor (opEquivalence C)) (op L)).X n ⟶
          (Functor.obj (Equivalence.functor (opEquivalence C)) (op K)).X n)
        (((dNext.{v_1, u_1, 0} (V := Cᵒᵖ) (c := ComplexShape.up ℤ) (C :=
                  Functor.obj (Equivalence.functor (opEquivalence C)) (op L)) (D :=
                  Functor.obj (Equivalence.functor (opEquivalence C)) (op K)) n :
                ((i j : ℤ) →
                    (Functor.obj (Equivalence.functor (opEquivalence C)) (op L)).X i ⟶
                      (Functor.obj (Equivalence.functor (opEquivalence C)) (op K)).X j) →+
                  ((Functor.obj (Equivalence.functor (opEquivalence C)) (op L)).X n ⟶
                    (Functor.obj (Equivalence.functor (opEquivalence C)) (op K)).X n)) :
              (a :
                  (i j : ℤ) → ((opEquivalence C).functor.obj (op L)).X i ⟶ ((opEquivalence C).functor.obj (op K)).X j) →
                ((opEquivalence C).functor.obj (op L)).X n ⟶ ((opEquivalence C).functor.obj (op K)).X n)
            fun (p q : ℤ) ↦ Quiver.Hom.op (h.hom (-q) (-p)) :
          (Functor.obj (Equivalence.functor (opEquivalence C)) (op L)).X n ⟶
            (Functor.obj (Equivalence.functor (opEquivalence C)) (op K)).X n)
        (((prevD.{v_1, u_1, 0} (V := Cᵒᵖ) (c := ComplexShape.up ℤ) (C :=
                  Functor.obj (Equivalence.functor (opEquivalence C)) (op L)) (D :=
                  Functor.obj (Equivalence.functor (opEquivalence C)) (op K)) n :
                ((i j : ℤ) →
                    (Functor.obj (Equivalence.functor (opEquivalence C)) (op L)).X i ⟶
                      (Functor.obj (Equivalence.functor (opEquivalence C)) (op K)).X j) →+
                  ((Functor.obj (Equivalence.functor (opEquivalence C)) (op L)).X n ⟶
                    (Functor.obj (Equivalence.functor (opEquivalence C)) (op K)).X n)) :
              (a :
                  (i j : ℤ) → ((opEquivalence C).functor.obj (op L)).X i ⟶ ((opEquivalence C).functor.obj (op K)).X j) →
                ((opEquivalence C).functor.obj (op L)).X n ⟶ ((opEquivalence C).functor.obj (op K)).X n)
            fun (p q : ℤ) ↦ Quiver.Hom.op (h.hom (-q) (-p)) :
          (Functor.obj (Equivalence.functor (opEquivalence C)) (op L)).X n ⟶
            (Functor.obj (Equivalence.functor (opEquivalence C)) (op K)).X n) +
      HomologicalComplex.Hom.f (CategoryTheory.Functor.map (Equivalence.functor (opEquivalence C)) g.op) n
have dsimp : Quiver.Hom.op (f.f (-n)) =
  HAdd.hAdd (α := op (L.X (-n)) ⟶ op (K.X (-n))) (β := op (L.X (-n)) ⟶ op (K.X (-n)))
      (((dNext.{v_1, u_1, 0} (V := Cᵒᵖ) (c := ComplexShape.up ℤ) (C :=
                (HomologicalComplex.op L).restriction ComplexShape.embeddingUpIntDownInt) (D :=
                (HomologicalComplex.op K).restriction ComplexShape.embeddingUpIntDownInt) n :
              ((i j : ℤ) →
                  ((HomologicalComplex.op L).restriction ComplexShape.embeddingUpIntDownInt).X i ⟶
                    ((HomologicalComplex.op K).restriction ComplexShape.embeddingUpIntDownInt).X j) →+
                (((HomologicalComplex.op L).restriction ComplexShape.embeddingUpIntDownInt).X n ⟶
                  ((HomologicalComplex.op K).restriction ComplexShape.embeddingUpIntDownInt).X n)) :
            (a : (i j : ℤ) → op (L.X (-i)) ⟶ op (K.X (-j))) → op (L.X (-n)) ⟶ op (K.X (-n)))
          fun (p q : ℤ) ↦ Quiver.Hom.op (h.hom (-q) (-p)) :
        op (L.X (-n)) ⟶ op (K.X (-n)))
      (((prevD.{v_1, u_1, 0} (V := Cᵒᵖ) (c := ComplexShape.up ℤ) (C :=
                (HomologicalComplex.op L).restriction ComplexShape.embeddingUpIntDownInt) (D :=
                (HomologicalComplex.op K).restriction ComplexShape.embeddingUpIntDownInt) n :
              ((i j : ℤ) →
                  ((HomologicalComplex.op L).restriction ComplexShape.embeddingUpIntDownInt).X i ⟶
                    ((HomologicalComplex.op K).restriction ComplexShape.embeddingUpIntDownInt).X j) →+
                (((HomologicalComplex.op L).restriction ComplexShape.embeddingUpIntDownInt).X n ⟶
                  ((HomologicalComplex.op K).restriction ComplexShape.embeddingUpIntDownInt).X n)) :
            (a : (i j : ℤ) → op (L.X (-i)) ⟶ op (K.X (-j))) → op (L.X (-n)) ⟶ op (K.X (-n)))
          fun (p q : ℤ) ↦ Quiver.Hom.op (h.hom (-q) (-p)) :
        op (L.X (-n)) ⟶ op (K.X (-n))) +
    Quiver.Hom.op (g.f (-n))
Tactic: dsimp