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

tactic: ext n
state_before: C : Type u_1
inst✝² : Category 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)

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).ιSummand (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 C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
⊢ HomologicalComplex.Hom.f (N₂Γ₂.inv.app (N₂.obj P) ≫ N₂.map (Γ₂N₂.natTrans.app P)).f n =
    HomologicalComplex.Hom.f (𝟙 (N₂.obj P)).f n

tactic: have eq₂ : (Γ₀.splitting (N₂.obj P).X).ιSummand (Splitting.IndexSet.id (op [n])) ≫
    (N₂.map (Γ₂N₂.natTrans.app P)).f.f n = PInfty.f n ≫ P.p.app (op [n]) := by
  dsimp
  simp only [assoc, Γ₂N₂.natTrans_app_f_app, Functor.comp_map, NatTrans.comp_app,
    Karoubi.comp_f, compatibility_Γ₂N₁_Γ₂N₂_hom_app, eqToHom_refl, Karoubi.eqToHom_f,
    PInfty_on_Γ₀_splitting_summand_eq_self_assoc, Functor.comp_obj]
  dsimp [N₂]
  simp only [Splitting.ι_desc_assoc, assoc, id_comp, unop_op,
    Splitting.IndexSet.id_fst, len_mk, Splitting.IndexSet.e,
    Splitting.IndexSet.id_snd_coe, op_id, P.X.map_id, id_comp,
    PInfty_f_naturality_assoc, PInfty_f_idem_assoc, app_idem]
state_before: case h.h
C : Type u_1
inst✝² : Category C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
eq₁ :
  HomologicalComplex.Hom.f (N₂Γ₂.inv.app (N₂.obj P)).f n =
    HomologicalComplex.Hom.f PInfty n ≫
      P.p.app [n].op ≫ Splitting.ιSummand (Γ₀.splitting (N₂.obj P).X) (Splitting.IndexSet.id [n].op)
⊢ HomologicalComplex.Hom.f (N₂Γ₂.inv.app (N₂.obj P) ≫ N₂.map (Γ₂N₂.natTrans.app P)).f n =
    HomologicalComplex.Hom.f (𝟙 (N₂.obj P)).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 C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
eq₁ :
  HomologicalComplex.Hom.f (N₂Γ₂.inv.app (N₂.obj P)).f n =
    HomologicalComplex.Hom.f PInfty n ≫
      P.p.app [n].op ≫ Splitting.ιSummand (Γ₀.splitting (N₂.obj P).X) (Splitting.IndexSet.id [n].op)
eq₂ :
  Splitting.ιSummand (Γ₀.splitting (N₂.obj P).X) (Splitting.IndexSet.id [n].op) ≫
      HomologicalComplex.Hom.f (N₂.map (Γ₂N₂.natTrans.app P)).f n =
    HomologicalComplex.Hom.f PInfty n ≫ P.p.app [n].op
⊢ HomologicalComplex.Hom.f (N₂Γ₂.inv.app (N₂.obj P) ≫ N₂.map (Γ₂N₂.natTrans.app P)).f n =
    HomologicalComplex.Hom.f (𝟙 (N₂.obj P)).f n

tactic: simp only [N₂Γ₂_inv_app_f_f, N₂_obj_p_f, assoc]
state_before: C : Type u_1
inst✝² : Category C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
⊢ HomologicalComplex.Hom.f (N₂Γ₂.inv.app (N₂.obj P)).f n =
    HomologicalComplex.Hom.f PInfty n ≫
      P.p.app [n].op ≫ Splitting.ιSummand (Γ₀.splitting (N₂.obj P).X) (Splitting.IndexSet.id [n].op)

tactic: dsimp
state_before: C : Type u_1
inst✝² : Category C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
eq₁ :
  HomologicalComplex.Hom.f (N₂Γ₂.inv.app (N₂.obj P)).f n =
    HomologicalComplex.Hom.f PInfty n ≫
      P.p.app [n].op ≫ Splitting.ιSummand (Γ₀.splitting (N₂.obj P).X) (Splitting.IndexSet.id [n].op)
⊢ Splitting.ιSummand (Γ₀.splitting (N₂.obj P).X) (Splitting.IndexSet.id [n].op) ≫
      HomologicalComplex.Hom.f (N₂.map (Γ₂N₂.natTrans.app P)).f n =
    HomologicalComplex.Hom.f PInfty n ≫ P.p.app [n].op

tactic: simp only [assoc, Γ₂N₂.natTrans_app_f_app, Functor.comp_map, NatTrans.comp_app,
  Karoubi.comp_f, compatibility_Γ₂N₁_Γ₂N₂_hom_app, eqToHom_refl, Karoubi.eqToHom_f,
  PInfty_on_Γ₀_splitting_summand_eq_self_assoc, Functor.comp_obj]
state_before: C : Type u_1
inst✝² : Category C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
eq₁ :
  HomologicalComplex.Hom.f (N₂Γ₂.inv.app (N₂.obj P)).f n =
    HomologicalComplex.Hom.f PInfty n ≫
      P.p.app [n].op ≫ Splitting.ιSummand (Γ₀.splitting (N₂.obj P).X) (Splitting.IndexSet.id [n].op)
⊢ Splitting.ιSummand (Γ₀.splitting (N₂.obj P).X) (Splitting.IndexSet.id [n].op) ≫
      HomologicalComplex.Hom.f PInfty n ≫ (Γ₂N₂.natTrans.app P).f.app [n].op =
    HomologicalComplex.Hom.f PInfty n ≫ P.p.app [n].op

tactic: dsimp [N₂]
state_before: C : Type u_1
inst✝² : Category C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
eq₁ :
  HomologicalComplex.Hom.f (N₂Γ₂.inv.app (N₂.obj P)).f n =
    HomologicalComplex.Hom.f PInfty n ≫
      P.p.app [n].op ≫ Splitting.ιSummand (Γ₀.splitting (N₂.obj P).X) (Splitting.IndexSet.id [n].op)
⊢ Splitting.ιSummand (Γ₀.splitting (N₂.obj P).X) (Splitting.IndexSet.id [n].op) ≫
      ((Γ₂.map (N₂.map (Karoubi.decompId_i P))).f ≫
            (Γ₂.obj (N₂.obj (Karoubi.mk P.X (𝟙 P.X)))).p ≫
              𝟙 (Γ₂.obj (N₂.obj (Karoubi.mk P.X (𝟙 P.X)))).X ≫ (Γ₂N₁.natTrans.app P.X).f ≫ (Karoubi.decompId_p P).f).app
        [n].op =
    HomologicalComplex.Hom.f PInfty n ≫ P.p.app [n].op

tactic: simp only [Splitting.ι_desc_assoc, assoc, id_comp, unop_op,
  Splitting.IndexSet.id_fst, len_mk, Splitting.IndexSet.e,
  Splitting.IndexSet.id_snd_coe, op_id, P.X.map_id, id_comp,
  PInfty_f_naturality_assoc, PInfty_f_idem_assoc, app_idem]
state_before: C : Type u_1
inst✝² : Category C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
n : ℕ
eq₁ :
  HomologicalComplex.Hom.f (N₂Γ₂.inv.app (N₂.obj P)).f n =
    HomologicalComplex.Hom.f PInfty n ≫
      P.p.app [n].op ≫ Splitting.ιSummand (Γ₀.splitting (N₂.obj P).X) (Splitting.IndexSet.id [n].op)
⊢ Splitting.ιSummand (Γ₀.splitting K[P.X]) (Splitting.IndexSet.id [n].op) ≫
      (Splitting.desc (Γ₀.splitting K[P.X]) [n].op fun A =>
          (HomologicalComplex.Hom.f PInfty (len A.fst.unop) ≫ P.p.app A.fst) ≫
            Splitting.ιSummand (Γ₀.splitting K[P.X]) A) ≫
        (Splitting.desc (Γ₀.splitting K[P.X]) [n].op fun A =>
            (HomologicalComplex.Hom.f PInfty (len A.fst.unop) ≫ 𝟙 (P.X.obj A.fst)) ≫
              Splitting.ιSummand (Γ₀.splitting K[P.X]) A) ≫
          𝟙 (Γ₀.Obj.obj₂ K[P.X] [n].op) ≫
            (Splitting.desc (Γ₀.splitting K[P.X]) [n].op fun A =>
                HomologicalComplex.Hom.f PInfty (len A.fst.unop) ≫ P.X.map (Splitting.IndexSet.e A).op) ≫
              P.p.app [n].op =
    HomologicalComplex.Hom.f PInfty n ≫ P.p.app [n].op