Theorem: CochainComplex.mappingConeHomOfDegreewiseSplitIso_inv_f
File: Mathlib/Algebra/Homology/HomotopyCategory/DegreewiseSplit.lean

Proof steps:
state_before: C : Type u_1
inst✝² : Category.{?u.76625, u_1} C
inst✝¹ : Preadditive C
S : ShortComplex (CochainComplex C ℤ)
σ : (n : ℤ) → (S.map (eval C (ComplexShape.up ℤ) n)).Splitting
inst✝ : HasBinaryBiproducts C
⊢ ∀ (i j : ℤ),
    (ComplexShape.up ℤ).Rel i j →
      ((fun p => mappingConeHomOfDegreewiseSplitXIso S σ p (p + { as := 1 }.as) ⋯) i).hom ≫
          ((CategoryTheory.shiftFunctor (HomologicalComplex C (ComplexShape.up ℤ)) 1).obj S.X₂).d i j =
        (mappingCone (homOfDegreewiseSplit S σ)).d i j ≫
          ((fun p => mappingConeHomOfDegreewiseSplitXIso S σ p (p + { as := 1 }.as) ⋯) j).hom
state_after: C : Type u_1
inst✝² : Category.{?u.76625, u_1} C
inst✝¹ : Preadditive C
S : ShortComplex (CochainComplex C ℤ)
σ : (n : ℤ) → (S.map (eval C (ComplexShape.up ℤ) n)).Splitting
inst✝ : HasBinaryBiproducts C
p : ℤ
⊢ ((fun p => mappingConeHomOfDegreewiseSplitXIso S σ p (p + { as := 1 }.as) ⋯) p).hom ≫
      ((CategoryTheory.shiftFunctor (HomologicalComplex C (ComplexShape.up ℤ)) 1).obj S.X₂).d p (p + 1) =
    (mappingCone (homOfDegreewiseSplit S σ)).d p (p + 1) ≫
      ((fun p => mappingConeHomOfDegreewiseSplitXIso S σ p (p + { as := 1 }.as) ⋯) (p + 1)).hom
tactic: rintro p _ rfl
state_before: C : Type u_1
inst✝² : Category.{?u.76625, u_1} C
inst✝¹ : Preadditive C
S : ShortComplex (CochainComplex C ℤ)
σ : (n : ℤ) → (S.map (eval C (ComplexShape.up ℤ) n)).Splitting
inst✝ : HasBinaryBiproducts C
p : ℤ
⊢ ((fun p => mappingConeHomOfDegreewiseSplitXIso S σ p (p + { as := 1 }.as) ⋯) p).hom ≫
      ((CategoryTheory.shiftFunctor (HomologicalComplex C (ComplexShape.up ℤ)) 1).obj S.X₂).d p (p + 1) =
    (mappingCone (homOfDegreewiseSplit S σ)).d p (p + 1) ≫
      ((fun p => mappingConeHomOfDegreewiseSplitXIso S σ p (p + { as := 1 }.as) ⋯) (p + 1)).hom
state_after: C : Type u_1
inst✝² : Category.{?u.76625, u_1} C
inst✝¹ : Preadditive C
S : ShortComplex (CochainComplex C ℤ)
σ : (n : ℤ) → (S.map (eval C (ComplexShape.up ℤ) n)).Splitting
inst✝ : HasBinaryBiproducts C
p : ℤ
r_f :
  (σ (p + 1 + 1)).r ≫ (S.map (eval C (ComplexShape.up ℤ) (p + 1 + 1))).f =
    𝟙 (S.map (eval C (ComplexShape.up ℤ) (p + 1 + 1))).X₂ -
      (S.map (eval C (ComplexShape.up ℤ) (p + 1 + 1))).g ≫ (σ (p + 1 + 1)).s
⊢ ((fun p => mappingConeHomOfDegreewiseSplitXIso S σ p (p + { as := 1 }.as) ⋯) p).hom ≫
      ((CategoryTheory.shiftFunctor (HomologicalComplex C (ComplexShape.up ℤ)) 1).obj S.X₂).d p (p + 1) =
    (mappingCone (homOfDegreewiseSplit S σ)).d p (p + 1) ≫
      ((fun p => mappingConeHomOfDegreewiseSplitXIso S σ p (p + { as := 1 }.as) ⋯) (p + 1)).hom
tactic: have r_f := (σ (p + 1 + 1)).r_f
state_before: C : Type u_1
inst✝² : Category.{?u.76625, u_1} C
inst✝¹ : Preadditive C
S : ShortComplex (CochainComplex C ℤ)
σ : (n : ℤ) → (S.map (eval C (ComplexShape.up ℤ) n)).Splitting
inst✝ : HasBinaryBiproducts C
p : ℤ
r_f :
  (σ (p + 1 + 1)).r ≫ (S.map (eval C (ComplexShape.up ℤ) (p + 1 + 1))).f =
    𝟙 (S.map (eval C (ComplexShape.up ℤ) (p + 1 + 1))).X₂ -
      (S.map (eval C (ComplexShape.up ℤ) (p + 1 + 1))).g ≫ (σ (p + 1 + 1)).s
⊢ ((fun p => mappingConeHomOfDegreewiseSplitXIso S σ p (p + { as := 1 }.as) ⋯) p).hom ≫
      ((CategoryTheory.shiftFunctor (HomologicalComplex C (ComplexShape.up ℤ)) 1).obj S.X₂).d p (p + 1) =
    (mappingCone (homOfDegreewiseSplit S σ)).d p (p + 1) ≫
      ((fun p => mappingConeHomOfDegreewiseSplitXIso S σ p (p + { as := 1 }.as) ⋯) (p + 1)).hom
state_after: C : Type u_1
inst✝² : Category.{?u.76625, u_1} C
inst✝¹ : Preadditive C
S : ShortComplex (CochainComplex C ℤ)
σ : (n : ℤ) → (S.map (eval C (ComplexShape.up ℤ) n)).Splitting
inst✝ : HasBinaryBiproducts C
p : ℤ
r_f :
  (σ (p + 1 + 1)).r ≫ (S.map (eval C (ComplexShape.up ℤ) (p + 1 + 1))).f =
    𝟙 (S.map (eval C (ComplexShape.up ℤ) (p + 1 + 1))).X₂ -
      (S.map (eval C (ComplexShape.up ℤ) (p + 1 + 1))).g ≫ (σ (p + 1 + 1)).s
s_g : (σ (p + 1)).s ≫ (S.map (eval C (ComplexShape.up ℤ) (p + 1))).g = 𝟙 (S.map (eval C (ComplexShape.up ℤ) (p + 1))).X₃
⊢ ((fun p => mappingConeHomOfDegreewiseSplitXIso S σ p (p + { as := 1 }.as) ⋯) p).hom ≫
      ((CategoryTheory.shiftFunctor (HomologicalComplex C (ComplexShape.up ℤ)) 1).obj S.X₂).d p (p + 1) =
    (mappingCone (homOfDegreewiseSplit S σ)).d p (p + 1) ≫
      ((fun p => mappingConeHomOfDegreewiseSplitXIso S σ p (p + { as := 1 }.as) ⋯) (p + 1)).hom
tactic: have s_g := (σ (p + 1)).s_g
state_before: C : Type u_1
inst✝² : Category.{?u.76625, u_1} C
inst✝¹ : Preadditive C
S : ShortComplex (CochainComplex C ℤ)
σ : (n : ℤ) → (S.map (eval C (ComplexShape.up ℤ) n)).Splitting
inst✝ : HasBinaryBiproducts C
p : ℤ
r_f :
  (σ (p + 1 + 1)).r ≫ (S.map (eval C (ComplexShape.up ℤ) (p + 1 + 1))).f =
    𝟙 (S.map (eval C (ComplexShape.up ℤ) (p + 1 + 1))).X₂ -
      (S.map (eval C (ComplexShape.up ℤ) (p + 1 + 1))).g ≫ (σ (p + 1 + 1)).s
s_g : (σ (p + 1)).s ≫ (S.map (eval C (ComplexShape.up ℤ) (p + 1))).g = 𝟙 (S.map (eval C (ComplexShape.up ℤ) (p + 1))).X₃
⊢ ((fun p => mappingConeHomOfDegreewiseSplitXIso S σ p (p + { as := 1 }.as) ⋯) p).hom ≫
      ((CategoryTheory.shiftFunctor (HomologicalComplex C (ComplexShape.up ℤ)) 1).obj S.X₂).d p (p + 1) =
    (mappingCone (homOfDegreewiseSplit S σ)).d p (p + 1) ≫
      ((fun p => mappingConeHomOfDegreewiseSplitXIso S σ p (p + { as := 1 }.as) ⋯) (p + 1)).hom
state_after: C : Type u_1
inst✝² : Category.{?u.76625, u_1} C
inst✝¹ : Preadditive C
S : ShortComplex (CochainComplex C ℤ)
σ : (n : ℤ) → (S.map (eval C (ComplexShape.up ℤ) n)).Splitting
inst✝ : HasBinaryBiproducts C
p : ℤ
r_f : (σ (p + 1 + 1)).r ≫ S.f.f (p + 1 + 1) = 𝟙 (S.X₂.X (p + 1 + 1)) - S.g.f (p + 1 + 1) ≫ (σ (p + 1 + 1)).s
s_g : (σ (p + 1)).s ≫ S.g.f (p + 1) = 𝟙 (S.X₃.X (p + 1))
⊢ ((fun p => mappingConeHomOfDegreewiseSplitXIso S σ p (p + { as := 1 }.as) ⋯) p).hom ≫
      ((CategoryTheory.shiftFunctor (HomologicalComplex C (ComplexShape.up ℤ)) 1).obj S.X₂).d p (p + 1) =
    (mappingCone (homOfDegreewiseSplit S σ)).d p (p + 1) ≫
      ((fun p => mappingConeHomOfDegreewiseSplitXIso S σ p (p + { as := 1 }.as) ⋯) (p + 1)).hom
tactic: dsimp at r_f s_g
state_before: C : Type u_1
inst✝² : Category.{?u.76625, u_1} C
inst✝¹ : Preadditive C
S : ShortComplex (CochainComplex C ℤ)
σ : (n : ℤ) → (S.map (eval C (ComplexShape.up ℤ) n)).Splitting
inst✝ : HasBinaryBiproducts C
p : ℤ
r_f : (σ (p + 1 + 1)).r ≫ S.f.f (p + 1 + 1) = 𝟙 (S.X₂.X (p + 1 + 1)) - S.g.f (p + 1 + 1) ≫ (σ (p + 1 + 1)).s
s_g : (σ (p + 1)).s ≫ S.g.f (p + 1) = 𝟙 (S.X₃.X (p + 1))
⊢ ((fun p => mappingConeHomOfDegreewiseSplitXIso S σ p (p + { as := 1 }.as) ⋯) p).hom ≫
      ((CategoryTheory.shiftFunctor (HomologicalComplex C (ComplexShape.up ℤ)) 1).obj S.X₂).d p (p + 1) =
    (mappingCone (homOfDegreewiseSplit S σ)).d p (p + 1) ≫
      ((fun p => mappingConeHomOfDegreewiseSplitXIso S σ p (p + { as := 1 }.as) ⋯) (p + 1)).hom
state_after: no goals
tactic: set_option tactic.skipAssignedInstances false in
    simp [mappingConeHomOfDegreewiseSplitXIso, mappingCone.ext_from_iff _ _ _ rfl,
      mappingCone.inl_v_d_assoc _ (p + 1) _ (p + 1 + 1) (by linarith) (by linarith),
      cocycleOfDegreewiseSplit, r_f]
    rw [← S.g.comm_assoc, reassoc_of% s_g]
    abel