Theorem: AlgebraicTopology.DoldKan.identity_N₂_objectwise
File: Mathlib/AlgebraicTopology/DoldKan/NCompGamma.lean

tactic: ext n
state_before: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
⊢ N₂Γ₂.inv.app (N₂.obj P) ≫ N₂.map (Γ₂N₂.natTrans.app P) = 𝟙 (N₂.obj P)
state_after: case h.h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
⊢ (N₂Γ₂.inv.app (N₂.obj P) ≫ N₂.map (Γ₂N₂.natTrans.app P)).f.f n = (𝟙 (N₂.obj P)).f.f n

tactic: have eq₁ : (N₂Γ₂.inv.app (N₂.obj P)).f.f n = PInfty.f n ≫ P.p.app (op [n]) ≫
    ((Γ₀.splitting (N₂.obj P).X).cofan _).inj (Splitting.IndexSet.id (op [n])) := by
  simp only [N₂Γ₂_inv_app_f_f, N₂_obj_p_f, assoc]
state_before: case h.h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
⊢ (N₂Γ₂.inv.app (N₂.obj P) ≫ N₂.map (Γ₂N₂.natTrans.app P)).f.f n = (𝟙 (N₂.obj P)).f.f n
state_after: case h.h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
eq₁ :
  (N₂Γ₂.inv.app (N₂.obj P)).f.f n =
    PInfty.f n ≫
      P.p.app { unop := [n] } ≫
        ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] })
⊢ (N₂Γ₂.inv.app (N₂.obj P) ≫ N₂.map (Γ₂N₂.natTrans.app P)).f.f n = (𝟙 (N₂.obj P)).f.f n

tactic: have eq₂ : ((Γ₀.splitting (N₂.obj P).X).cofan _).inj (Splitting.IndexSet.id (op [n])) ≫
    (N₂.map (Γ₂N₂.natTrans.app P)).f.f n = PInfty.f n ≫ P.p.app (op [n]) := by
  dsimp
  rw [PInfty_on_Γ₀_splitting_summand_eq_self_assoc, Γ₂N₂.natTrans_app_f_app]
  dsimp
  rw [Γ₂N₂ToKaroubiIso_hom_app, assoc, Splitting.ι_desc_assoc, assoc, assoc]
  dsimp [toKaroubi]
  rw [Splitting.ι_desc_assoc]
  dsimp
  simp only [assoc, Splitting.ι_desc_assoc, unop_op, Splitting.IndexSet.id_fst,
    len_mk, NatTrans.naturality, PInfty_f_idem_assoc,
    PInfty_f_naturality_assoc, app_idem_assoc]
  erw [P.X.map_id, comp_id]
state_before: case h.h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
eq₁ :
  (N₂Γ₂.inv.app (N₂.obj P)).f.f n =
    PInfty.f n ≫
      P.p.app { unop := [n] } ≫
        ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] })
⊢ (N₂Γ₂.inv.app (N₂.obj P) ≫ N₂.map (Γ₂N₂.natTrans.app P)).f.f n = (𝟙 (N₂.obj P)).f.f n
state_after: case h.h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
eq₁ :
  (N₂Γ₂.inv.app (N₂.obj P)).f.f n =
    PInfty.f n ≫
      P.p.app { unop := [n] } ≫
        ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] })
eq₂ :
  ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] }) ≫
      (N₂.map (Γ₂N₂.natTrans.app P)).f.f n =
    PInfty.f n ≫ P.p.app { unop := [n] }
⊢ (N₂Γ₂.inv.app (N₂.obj P) ≫ N₂.map (Γ₂N₂.natTrans.app P)).f.f n = (𝟙 (N₂.obj P)).f.f n

tactic: simp only [Karoubi.comp_f, HomologicalComplex.comp_f, Karoubi.id_eq, N₂_obj_p_f, assoc,
  eq₁, eq₂, PInfty_f_naturality_assoc, app_idem, PInfty_f_idem_assoc]
state_before: case h.h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
eq₁ :
  (N₂Γ₂.inv.app (N₂.obj P)).f.f n =
    PInfty.f n ≫
      P.p.app { unop := [n] } ≫
        ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] })
eq₂ :
  ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] }) ≫
      (N₂.map (Γ₂N₂.natTrans.app P)).f.f n =
    PInfty.f n ≫ P.p.app { unop := [n] }
⊢ (N₂Γ₂.inv.app (N₂.obj P) ≫ N₂.map (Γ₂N₂.natTrans.app P)).f.f n = (𝟙 (N₂.obj P)).f.f n
state_after: no goals

tactic: simp only [N₂Γ₂_inv_app_f_f, N₂_obj_p_f, assoc]
state_before: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
⊢ (N₂Γ₂.inv.app (N₂.obj P)).f.f n =
    PInfty.f n ≫
      P.p.app { unop := [n] } ≫
        ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] })
state_after: no goals

tactic: dsimp
state_before: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
eq₁ :
  (N₂Γ₂.inv.app (N₂.obj P)).f.f n =
    PInfty.f n ≫
      P.p.app { unop := [n] } ≫
        ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] })
⊢ ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] }) ≫
      (N₂.map (Γ₂N₂.natTrans.app P)).f.f n =
    PInfty.f n ≫ P.p.app { unop := [n] }
state_after: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
eq₁ :
  (N₂Γ₂.inv.app (N₂.obj P)).f.f n =
    PInfty.f n ≫
      P.p.app { unop := [n] } ≫
        ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] })
⊢ ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] }) ≫
      PInfty.f n ≫ (Γ₂N₂.natTrans.app P).f.app { unop := [n] } =
    PInfty.f n ≫ P.p.app { unop := [n] }

tactic: rw [PInfty_on_Γ₀_splitting_summand_eq_self_assoc, Γ₂N₂.natTrans_app_f_app]
state_before: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
eq₁ :
  (N₂Γ₂.inv.app (N₂.obj P)).f.f n =
    PInfty.f n ≫
      P.p.app { unop := [n] } ≫
        ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] })
⊢ ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] }) ≫
      PInfty.f n ≫ (Γ₂N₂.natTrans.app P).f.app { unop := [n] } =
    PInfty.f n ≫ P.p.app { unop := [n] }
state_after: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
eq₁ :
  (N₂Γ₂.inv.app (N₂.obj P)).f.f n =
    PInfty.f n ≫
      P.p.app { unop := [n] } ≫
        ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] })
⊢ ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] }) ≫
      ((N₂ ⋙ Γ₂).map P.decompId_i ≫ (Γ₂N₂ToKaroubiIso.hom ≫ Γ₂N₁.natTrans).app P.X ≫ P.decompId_p).f.app
        { unop := [n] } =
    PInfty.f n ≫ P.p.app { unop := [n] }

tactic: dsimp
state_before: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
eq₁ :
  (N₂Γ₂.inv.app (N₂.obj P)).f.f n =
    PInfty.f n ≫
      P.p.app { unop := [n] } ≫
        ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] })
⊢ ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] }) ≫
      ((N₂ ⋙ Γ₂).map P.decompId_i ≫ (Γ₂N₂ToKaroubiIso.hom ≫ Γ₂N₁.natTrans).app P.X ≫ P.decompId_p).f.app
        { unop := [n] } =
    PInfty.f n ≫ P.p.app { unop := [n] }
state_after: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
eq₁ :
  (N₂Γ₂.inv.app (N₂.obj P)).f.f n =
    PInfty.f n ≫
      P.p.app { unop := [n] } ≫
        ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] })
⊢ ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] }) ≫
      ((Γ₀.splitting (N₂.obj P).X).desc { unop := [n] } fun A =>
          (PInfty.f A.fst.unop.len ≫ P.p.app A.fst) ≫
            ((Γ₀.splitting (N₂.obj { X := P.X, p := 𝟙 P.X, idem := ⋯ }).X).cofan { unop := [n] }).inj A) ≫
        ((Γ₂N₂ToKaroubiIso.hom.app P.X).f.app { unop := [n] } ≫
            (Γ₀.splitting K[P.X]).desc { unop := [n] } fun A => PInfty.f A.fst.unop.len ≫ P.X.map A.e.op) ≫
          P.p.app { unop := [n] } =
    PInfty.f n ≫ P.p.app { unop := [n] }

tactic: rw [Γ₂N₂ToKaroubiIso_hom_app, assoc, Splitting.ι_desc_assoc, assoc, assoc]
state_before: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
eq₁ :
  (N₂Γ₂.inv.app (N₂.obj P)).f.f n =
    PInfty.f n ≫
      P.p.app { unop := [n] } ≫
        ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] })
⊢ ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] }) ≫
      ((Γ₀.splitting (N₂.obj P).X).desc { unop := [n] } fun A =>
          (PInfty.f A.fst.unop.len ≫ P.p.app A.fst) ≫
            ((Γ₀.splitting (N₂.obj { X := P.X, p := 𝟙 P.X, idem := ⋯ }).X).cofan { unop := [n] }).inj A) ≫
        ((Γ₂N₂ToKaroubiIso.hom.app P.X).f.app { unop := [n] } ≫
            (Γ₀.splitting K[P.X]).desc { unop := [n] } fun A => PInfty.f A.fst.unop.len ≫ P.X.map A.e.op) ≫
          P.p.app { unop := [n] } =
    PInfty.f n ≫ P.p.app { unop := [n] }
state_after: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
eq₁ :
  (N₂Γ₂.inv.app (N₂.obj P)).f.f n =
    PInfty.f n ≫
      P.p.app { unop := [n] } ≫
        ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] })
⊢ PInfty.f (Splitting.IndexSet.id { unop := [n] }).fst.unop.len ≫
      P.p.app (Splitting.IndexSet.id { unop := [n] }).fst ≫
        ((Γ₀.splitting (N₂.obj { X := P.X, p := 𝟙 P.X, idem := ⋯ }).X).cofan { unop := [n] }).inj
            (Splitting.IndexSet.id { unop := [n] }) ≫
          (Γ₂.map (toKaroubiCompN₂IsoN₁.hom.app P.X)).f.app { unop := [n] } ≫
            ((Γ₀.splitting K[P.X]).desc { unop := [n] } fun A => PInfty.f A.fst.unop.len ≫ P.X.map A.e.op) ≫
              P.p.app { unop := [n] } =
    PInfty.f n ≫ P.p.app { unop := [n] }

tactic: dsimp [toKaroubi]
state_before: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
eq₁ :
  (N₂Γ₂.inv.app (N₂.obj P)).f.f n =
    PInfty.f n ≫
      P.p.app { unop := [n] } ≫
        ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] })
⊢ PInfty.f (Splitting.IndexSet.id { unop := [n] }).fst.unop.len ≫
      P.p.app (Splitting.IndexSet.id { unop := [n] }).fst ≫
        ((Γ₀.splitting (N₂.obj { X := P.X, p := 𝟙 P.X, idem := ⋯ }).X).cofan { unop := [n] }).inj
            (Splitting.IndexSet.id { unop := [n] }) ≫
          (Γ₂.map (toKaroubiCompN₂IsoN₁.hom.app P.X)).f.app { unop := [n] } ≫
            ((Γ₀.splitting K[P.X]).desc { unop := [n] } fun A => PInfty.f A.fst.unop.len ≫ P.X.map A.e.op) ≫
              P.p.app { unop := [n] } =
    PInfty.f n ≫ P.p.app { unop := [n] }
state_after: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
eq₁ :
  (N₂Γ₂.inv.app (N₂.obj P)).f.f n =
    PInfty.f n ≫
      P.p.app { unop := [n] } ≫
        ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] })
⊢ PInfty.f n ≫
      P.p.app { unop := [n] } ≫
        ((Γ₀.splitting (N₂.obj { X := P.X, p := 𝟙 P.X, idem := ⋯ }).X).cofan { unop := [n] }).inj
            (Splitting.IndexSet.id { unop := [n] }) ≫
          ((Γ₀.splitting (N₂.obj { X := P.X, p := 𝟙 P.X, idem := ⋯ }).X).desc { unop := [n] } fun A =>
              PInfty.f A.fst.unop.len ≫ ((Γ₀.splitting K[P.X]).cofan { unop := [n] }).inj A) ≫
            ((Γ₀.splitting K[P.X]).desc { unop := [n] } fun A => PInfty.f A.fst.unop.len ≫ P.X.map A.e.op) ≫
              P.p.app { unop := [n] } =
    PInfty.f n ≫ P.p.app { unop := [n] }

tactic: rw [Splitting.ι_desc_assoc]
state_before: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
eq₁ :
  (N₂Γ₂.inv.app (N₂.obj P)).f.f n =
    PInfty.f n ≫
      P.p.app { unop := [n] } ≫
        ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] })
⊢ PInfty.f n ≫
      P.p.app { unop := [n] } ≫
        ((Γ₀.splitting (N₂.obj { X := P.X, p := 𝟙 P.X, idem := ⋯ }).X).cofan { unop := [n] }).inj
            (Splitting.IndexSet.id { unop := [n] }) ≫
          ((Γ₀.splitting (N₂.obj { X := P.X, p := 𝟙 P.X, idem := ⋯ }).X).desc { unop := [n] } fun A =>
              PInfty.f A.fst.unop.len ≫ ((Γ₀.splitting K[P.X]).cofan { unop := [n] }).inj A) ≫
            ((Γ₀.splitting K[P.X]).desc { unop := [n] } fun A => PInfty.f A.fst.unop.len ≫ P.X.map A.e.op) ≫
              P.p.app { unop := [n] } =
    PInfty.f n ≫ P.p.app { unop := [n] }
state_after: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
eq₁ :
  (N₂Γ₂.inv.app (N₂.obj P)).f.f n =
    PInfty.f n ≫
      P.p.app { unop := [n] } ≫
        ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] })
⊢ PInfty.f n ≫
      P.p.app { unop := [n] } ≫
        (PInfty.f (Splitting.IndexSet.id { unop := [n] }).fst.unop.len ≫
            ((Γ₀.splitting K[P.X]).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] })) ≫
          ((Γ₀.splitting K[P.X]).desc { unop := [n] } fun A => PInfty.f A.fst.unop.len ≫ P.X.map A.e.op) ≫
            P.p.app { unop := [n] } =
    PInfty.f n ≫ P.p.app { unop := [n] }

tactic: dsimp
state_before: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
eq₁ :
  (N₂Γ₂.inv.app (N₂.obj P)).f.f n =
    PInfty.f n ≫
      P.p.app { unop := [n] } ≫
        ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] })
⊢ PInfty.f n ≫
      P.p.app { unop := [n] } ≫
        (PInfty.f (Splitting.IndexSet.id { unop := [n] }).fst.unop.len ≫
            ((Γ₀.splitting K[P.X]).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] })) ≫
          ((Γ₀.splitting K[P.X]).desc { unop := [n] } fun A => PInfty.f A.fst.unop.len ≫ P.X.map A.e.op) ≫
            P.p.app { unop := [n] } =
    PInfty.f n ≫ P.p.app { unop := [n] }
state_after: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
eq₁ :
  (N₂Γ₂.inv.app (N₂.obj P)).f.f n =
    PInfty.f n ≫
      P.p.app { unop := [n] } ≫
        ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] })
⊢ PInfty.f n ≫
      P.p.app { unop := [n] } ≫
        (PInfty.f n ≫ ((Γ₀.splitting K[P.X]).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] })) ≫
          ((Γ₀.splitting K[P.X]).desc { unop := [n] } fun A => PInfty.f A.fst.unop.len ≫ P.X.map A.e.op) ≫
            P.p.app { unop := [n] } =
    PInfty.f n ≫ P.p.app { unop := [n] }

tactic: simp only [assoc, Splitting.ι_desc_assoc, unop_op, Splitting.IndexSet.id_fst,
  len_mk, NatTrans.naturality, PInfty_f_idem_assoc,
  PInfty_f_naturality_assoc, app_idem_assoc]
state_before: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
eq₁ :
  (N₂Γ₂.inv.app (N₂.obj P)).f.f n =
    PInfty.f n ≫
      P.p.app { unop := [n] } ≫
        ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] })
⊢ PInfty.f n ≫
      P.p.app { unop := [n] } ≫
        (PInfty.f n ≫ ((Γ₀.splitting K[P.X]).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] })) ≫
          ((Γ₀.splitting K[P.X]).desc { unop := [n] } fun A => PInfty.f A.fst.unop.len ≫ P.X.map A.e.op) ≫
            P.p.app { unop := [n] } =
    PInfty.f n ≫ P.p.app { unop := [n] }
state_after: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
eq₁ :
  (N₂Γ₂.inv.app (N₂.obj P)).f.f n =
    PInfty.f n ≫
      P.p.app { unop := [n] } ≫
        ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] })
⊢ PInfty.f n ≫ P.p.app { unop := [n] } ≫ P.X.map (Splitting.IndexSet.id { unop := [n] }).e.op =
    PInfty.f n ≫ P.p.app { unop := [n] }

tactic: erw [P.X.map_id, comp_id]
state_before: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
eq₁ :
  (N₂Γ₂.inv.app (N₂.obj P)).f.f n =
    PInfty.f n ≫
      P.p.app { unop := [n] } ≫
        ((Γ₀.splitting (N₂.obj P).X).cofan { unop := [n] }).inj (Splitting.IndexSet.id { unop := [n] })
⊢ PInfty.f n ≫ P.p.app { unop := [n] } ≫ P.X.map (Splitting.IndexSet.id { unop := [n] }).e.op =
    PInfty.f n ≫ P.p.app { unop := [n] }
state_after: no goals