l3lab/ntp-mathlib huggingface dataset:
theorem identity_N₂_objectwise (P : Karoubi (SimplicialObject C)) :
    (N₂Γ₂.inv.app (N₂.obj P) : N₂.obj P ⟶ N₂.obj (Γ₂.obj (N₂.obj P))) ≫
    N₂.map (Γ₂N₂.natTrans.app P) = 𝟙 (N₂.obj P) := by
  ext n
  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]
  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
    rw [PInfty_on_Γ₀_splitting_summand_eq_self_assoc, Γ₂N₂.natTrans_app_f_app]
    dsimp
    

Proof state:
C : Type u_1
inst✝² : Category.{u_2, u_1} 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 (op [n]) ≫ Splitting.ιSummand (Γ₀.splitting (N₂.obj P).X) (Splitting.IndexSet.id (op [n]))
⊢ Splitting.ιSummand (Γ₀.splitting (N₂.obj P).X) (Splitting.IndexSet.id (op [n])) ≫
      (Splitting.desc (Γ₀.splitting (N₂.obj P).X) (op [n]) fun A =>
          (HomologicalComplex.Hom.f PInfty (len A.fst.unop) ≫ P.p.app A.fst) ≫
            Splitting.ιSummand (Γ₀.splitting (N₂.obj (Karoubi.mk P.X (𝟙 P.X))).X) A) ≫
        ((Γ₂N₂ToKaroubiIso.hom.app P.X).f.app (op [n]) ≫
            Splitting.desc (Γ₀.splitting K[P.X]) (op [n]) fun A =>
              HomologicalComplex.Hom.f PInfty (len A.fst.unop) ≫ P.X.map (Splitting.IndexSet.e A).op) ≫
          P.p.app (op [n]) =
    HomologicalComplex.Hom.f PInfty n ≫ P.p.app (op [n])

Next tactic:
rw [Γ₂N₂ToKaroubiIso_hom_app, assoc, Splitting.ι_desc_assoc, assoc, assoc]
theorem identity_N₂_objectwise (P : Karoubi (SimplicialObject C)) :
    (N₂Γ₂.inv.app (N₂.obj P) : N₂.obj P ⟶ N₂.obj (Γ₂.obj (N₂.obj P))) ≫
    N₂.map (Γ₂N₂.natTrans.app P) = 𝟙 (N₂.obj P) := by
  ext n
  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]
  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
    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]
    

Proof state:
C : Type u_1
inst✝² : Category.{u_2, u_1} 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 (op [n]) ≫ Splitting.ιSummand (Γ₀.splitting (N₂.obj P).X) (Splitting.IndexSet.id (op [n]))
⊢ HomologicalComplex.Hom.f PInfty (len (Splitting.IndexSet.id (op [n])).fst.unop) ≫
      P.p.app (Splitting.IndexSet.id (op [n])).fst ≫
        Splitting.ιSummand (Γ₀.splitting (N₂.obj (Karoubi.mk P.X (𝟙 P.X))).X) (Splitting.IndexSet.id (op [n])) ≫
          (Γ₂.map (toKaroubiCompN₂IsoN₁.hom.app P.X)).f.app (op [n]) ≫
            (Splitting.desc (Γ₀.splitting K[P.X]) (op [n]) fun A =>
                HomologicalComplex.Hom.f PInfty (len A.fst.unop) ≫ P.X.map (Splitting.IndexSet.e A).op) ≫
              P.p.app (op [n]) =
    HomologicalComplex.Hom.f PInfty n ≫ P.p.app (op [n])

Next tactic:
dsimp [toKaroubi]
theorem identity_N₂_objectwise (P : Karoubi (SimplicialObject C)) :
    (N₂Γ₂.inv.app (N₂.obj P) : N₂.obj P ⟶ N₂.obj (Γ₂.obj (N₂.obj P))) ≫
    N₂.map (Γ₂N₂.natTrans.app P) = 𝟙 (N₂.obj P) := by
  ext n
  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]
  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
    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]
    

Proof state:
C : Type u_1
inst✝² : Category.{u_2, u_1} 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 (op [n]) ≫ Splitting.ιSummand (Γ₀.splitting (N₂.obj P).X) (Splitting.IndexSet.id (op [n]))
⊢ HomologicalComplex.Hom.f PInfty n ≫
      P.p.app (op [n]) ≫
        Splitting.ιSummand (Γ₀.splitting (N₂.obj (Karoubi.mk P.X (𝟙 P.X))).X) (Splitting.IndexSet.id (op [n])) ≫
          (Splitting.desc (Γ₀.splitting (N₂.obj (Karoubi.mk P.X (𝟙 P.X))).X) (op [n]) fun A =>
              HomologicalComplex.Hom.f PInfty (len A.fst.unop) ≫ Splitting.ιSummand (Γ₀.splitting K[P.X]) A) ≫
            (Splitting.desc (Γ₀.splitting K[P.X]) (op [n]) fun A =>
                HomologicalComplex.Hom.f PInfty (len A.fst.unop) ≫ P.X.map (Splitting.IndexSet.e A).op) ≫
              P.p.app (op [n]) =
    HomologicalComplex.Hom.f PInfty n ≫ P.p.app (op [n])

Next tactic:
rw [Splitting.ι_desc_assoc]
theorem identity_N₂_objectwise (P : Karoubi (SimplicialObject C)) :
    (N₂Γ₂.inv.app (N₂.obj P) : N₂.obj P ⟶ N₂.obj (Γ₂.obj (N₂.obj P))) ≫
    N₂.map (Γ₂N₂.natTrans.app P) = 𝟙 (N₂.obj P) := by
  ext n
  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]
  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
    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]
    

Proof state:
C : Type u_1
inst✝² : Category.{u_2, u_1} 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 (op [n]) ≫ Splitting.ιSummand (Γ₀.splitting (N₂.obj P).X) (Splitting.IndexSet.id (op [n]))
⊢ HomologicalComplex.Hom.f PInfty n ≫
      P.p.app (op [n]) ≫
        (HomologicalComplex.Hom.f PInfty (len (Splitting.IndexSet.id (op [n])).fst.unop) ≫
            Splitting.ιSummand (Γ₀.splitting K[P.X]) (Splitting.IndexSet.id (op [n]))) ≫
          (Splitting.desc (Γ₀.splitting K[P.X]) (op [n]) fun A =>
              HomologicalComplex.Hom.f PInfty (len A.fst.unop) ≫ P.X.map (Splitting.IndexSet.e A).op) ≫
            P.p.app (op [n]) =
    HomologicalComplex.Hom.f PInfty n ≫ P.p.app (op [n])

Next tactic:
dsimp
theorem identity_N₂_objectwise (P : Karoubi (SimplicialObject C)) :
    (N₂Γ₂.inv.app (N₂.obj P) : N₂.obj P ⟶ N₂.obj (Γ₂.obj (N₂.obj P))) ≫
    N₂.map (Γ₂N₂.natTrans.app P) = 𝟙 (N₂.obj P) := by
  ext n
  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]
  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
    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
    

Proof state:
C : Type u_1
inst✝² : Category.{u_2, u_1} 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 (op [n]) ≫ Splitting.ιSummand (Γ₀.splitting (N₂.obj P).X) (Splitting.IndexSet.id (op [n]))
⊢ HomologicalComplex.Hom.f PInfty n ≫
      P.p.app (op [n]) ≫
        (HomologicalComplex.Hom.f PInfty n ≫
            Splitting.ιSummand (Γ₀.splitting K[P.X]) (Splitting.IndexSet.id (op [n]))) ≫
          (Splitting.desc (Γ₀.splitting K[P.X]) (op [n]) fun A =>
              HomologicalComplex.Hom.f PInfty (len A.fst.unop) ≫ P.X.map (Splitting.IndexSet.e A).op) ≫
            P.p.app (op [n]) =
    HomologicalComplex.Hom.f PInfty n ≫ P.p.app (op [n])

Next 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]
theorem identity_N₂_objectwise (P : Karoubi (SimplicialObject C)) :
    (N₂Γ₂.inv.app (N₂.obj P) : N₂.obj P ⟶ N₂.obj (Γ₂.obj (N₂.obj P))) ≫
    N₂.map (Γ₂N₂.natTrans.app P) = 𝟙 (N₂.obj P) := by
  ext n
  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]
  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
    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]
    

Proof state:
C : Type u_1
inst✝² : Category.{u_2, u_1} 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 (op [n]) ≫ Splitting.ιSummand (Γ₀.splitting (N₂.obj P).X) (Splitting.IndexSet.id (op [n]))
⊢ HomologicalComplex.Hom.f PInfty n ≫
      P.p.app (op [n]) ≫ P.X.map (Splitting.IndexSet.e (Splitting.IndexSet.id (op [n]))).op =
    HomologicalComplex.Hom.f PInfty n ≫ P.p.app (op [n])

Next tactic:
erw [P.X.map_id, comp_id]
theorem identity_N₂_objectwise (P : Karoubi (SimplicialObject C)) :
    (N₂Γ₂.inv.app (N₂.obj P) : N₂.obj P ⟶ N₂.obj (Γ₂.obj (N₂.obj P))) ≫
    N₂.map (Γ₂N₂.natTrans.app P) = 𝟙 (N₂.obj P) := by
  ext n
  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]
  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
    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]
  

Proof state:
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₁ :
  HomologicalComplex.Hom.f (N₂Γ₂.inv.app (N₂.obj P)).f n =
    HomologicalComplex.Hom.f PInfty n ≫
      P.p.app (op [n]) ≫ Splitting.ιSummand (Γ₀.splitting (N₂.obj P).X) (Splitting.IndexSet.id (op [n]))
eq₂ :
  Splitting.ιSummand (Γ₀.splitting (N₂.obj P).X) (Splitting.IndexSet.id (op [n])) ≫
      HomologicalComplex.Hom.f (N₂.map (Γ₂N₂.natTrans.app P)).f n =
    HomologicalComplex.Hom.f PInfty n ≫ P.p.app (op [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

Next 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]
theorem identity_N₂ :
    (𝟙 (N₂ : Karoubi (SimplicialObject C) ⥤ _) ◫ N₂Γ₂.inv) ≫
    (Functor.associator _ _ _).inv ≫ Γ₂N₂.natTrans ◫ 𝟙 (@N₂ C _ _) = 𝟙 N₂ := by
  

Proof state:
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
⊢ (𝟙 N₂ ◫ N₂Γ₂.inv) ≫ (Functor.associator N₂ Γ₂ N₂).inv ≫ Γ₂N₂.natTrans ◫ 𝟙 N₂ = 𝟙 N₂

Next tactic:
ext P : 2
theorem identity_N₂ :
    (𝟙 (N₂ : Karoubi (SimplicialObject C) ⥤ _) ◫ N₂Γ₂.inv) ≫
    (Functor.associator _ _ _).inv ≫ Γ₂N₂.natTrans ◫ 𝟙 (@N₂ C _ _) = 𝟙 N₂ := by
  ext P : 2
  

Proof state:
case w.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) ≫ (Functor.associator N₂ Γ₂ N₂).inv ≫ Γ₂N₂.natTrans ◫ 𝟙 N₂).app P = (𝟙 N₂).app P

Next tactic:
dsimp only [NatTrans.comp_app, NatTrans.hcomp_app, Functor.comp_map, Functor.associator,
    NatTrans.id_app, Functor.comp_obj]
theorem identity_N₂ :
    (𝟙 (N₂ : Karoubi (SimplicialObject C) ⥤ _) ◫ N₂Γ₂.inv) ≫
    (Functor.associator _ _ _).inv ≫ Γ₂N₂.natTrans ◫ 𝟙 (@N₂ C _ _) = 𝟙 N₂ := by
  ext P : 2
  dsimp only [NatTrans.comp_app, NatTrans.hcomp_app, Functor.comp_map, Functor.associator,
    NatTrans.id_app, Functor.comp_obj]
  

Proof state:
case w.h
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 (Γ₂.map (𝟙 (N₂.obj P)))) ≫
      𝟙 (N₂.obj (Γ₂.obj (N₂.obj P))) ≫ 𝟙 (N₂.obj (Γ₂.obj (N₂.obj P))) ≫ N₂.map (Γ₂N₂.natTrans.app P) =
    𝟙 (N₂.obj P)

Next tactic:
rw [Γ₂.map_id, N₂.map_id, comp_id, id_comp, id_comp, identity_N₂_objectwise P]
instance : IsIso (Γ₂N₂.natTrans : (N₂ : Karoubi (SimplicialObject C) ⥤ _) ⋙ _ ⟶ _) := by
  

Proof state:
C : Type u_1
inst✝² : Category.{?u.194337, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
⊢ IsIso Γ₂N₂.natTrans

Next tactic:
have : ∀ P : Karoubi (SimplicialObject C), IsIso (Γ₂N₂.natTrans.app P) := by
    intro P
    have : IsIso (N₂.map (Γ₂N₂.natTrans.app P)) := by
      have h := identity_N₂_objectwise P
      erw [hom_comp_eq_id] at h
      rw [h]
      infer_instance
    exact isIso_of_reflects_iso _ N₂
instance : IsIso (Γ₂N₂.natTrans : (N₂ : Karoubi (SimplicialObject C) ⥤ _) ⋙ _ ⟶ _) := by
  have : ∀ P : Karoubi (SimplicialObject C), IsIso (Γ₂N₂.natTrans.app P) := by
    

Proof state:
C : Type u_1
inst✝² : Category.{?u.194337, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
⊢ ∀ (P : Karoubi (SimplicialObject C)), IsIso (Γ₂N₂.natTrans.app P)

Next tactic:
intro P
instance : IsIso (Γ₂N₂.natTrans : (N₂ : Karoubi (SimplicialObject C) ⥤ _) ⋙ _ ⟶ _) := by
  have : ∀ P : Karoubi (SimplicialObject C), IsIso (Γ₂N₂.natTrans.app P) := by
    intro P
    

Proof state:
C : Type u_1
inst✝² : Category.{?u.194337, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
⊢ IsIso (Γ₂N₂.natTrans.app P)

Next tactic:
have : IsIso (N₂.map (Γ₂N₂.natTrans.app P)) := by
      have h := identity_N₂_objectwise P
      erw [hom_comp_eq_id] at h
      rw [h]
      infer_instance
instance : IsIso (Γ₂N₂.natTrans : (N₂ : Karoubi (SimplicialObject C) ⥤ _) ⋙ _ ⟶ _) := by
  have : ∀ P : Karoubi (SimplicialObject C), IsIso (Γ₂N₂.natTrans.app P) := by
    intro P
    have : IsIso (N₂.map (Γ₂N₂.natTrans.app P)) := by
      

Proof state:
C : Type u_1
inst✝² : Category.{?u.194337, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
⊢ IsIso (N₂.map (Γ₂N₂.natTrans.app P))

Next tactic:
have h := identity_N₂_objectwise P
instance : IsIso (Γ₂N₂.natTrans : (N₂ : Karoubi (SimplicialObject C) ⥤ _) ⋙ _ ⟶ _) := by
  have : ∀ P : Karoubi (SimplicialObject C), IsIso (Γ₂N₂.natTrans.app P) := by
    intro P
    have : IsIso (N₂.map (Γ₂N₂.natTrans.app P)) := by
      have h := identity_N₂_objectwise P
      

Proof state:
C : Type u_1
inst✝² : Category.{?u.194337, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
h : N₂Γ₂.inv.app (N₂.obj P) ≫ N₂.map (Γ₂N₂.natTrans.app P) = 𝟙 (N₂.obj P)
⊢ IsIso (N₂.map (Γ₂N₂.natTrans.app P))

Next tactic:
erw [hom_comp_eq_id] at h
instance : IsIso (Γ₂N₂.natTrans : (N₂ : Karoubi (SimplicialObject C) ⥤ _) ⋙ _ ⟶ _) := by
  have : ∀ P : Karoubi (SimplicialObject C), IsIso (Γ₂N₂.natTrans.app P) := by
    intro P
    have : IsIso (N₂.map (Γ₂N₂.natTrans.app P)) := by
      have h := identity_N₂_objectwise P
      erw [hom_comp_eq_id] at h
      

Proof state:
C : Type u_1
inst✝² : Category.{?u.194337, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
h : N₂.map (Γ₂N₂.natTrans.app P) = inv (N₂Γ₂.inv.app (N₂.obj P))
⊢ IsIso (N₂.map (Γ₂N₂.natTrans.app P))

Next tactic:
rw [h]
instance : IsIso (Γ₂N₂.natTrans : (N₂ : Karoubi (SimplicialObject C) ⥤ _) ⋙ _ ⟶ _) := by
  have : ∀ P : Karoubi (SimplicialObject C), IsIso (Γ₂N₂.natTrans.app P) := by
    intro P
    have : IsIso (N₂.map (Γ₂N₂.natTrans.app P)) := by
      have h := identity_N₂_objectwise P
      erw [hom_comp_eq_id] at h
      rw [h]
      

Proof state:
C : Type u_1
inst✝² : Category.{?u.194337, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
h : N₂.map (Γ₂N₂.natTrans.app P) = inv (N₂Γ₂.inv.app (N₂.obj P))
⊢ IsIso (inv (N₂Γ₂.inv.app (N₂.obj P)))

Next tactic:
infer_instance
instance : IsIso (Γ₂N₂.natTrans : (N₂ : Karoubi (SimplicialObject C) ⥤ _) ⋙ _ ⟶ _) := by
  have : ∀ P : Karoubi (SimplicialObject C), IsIso (Γ₂N₂.natTrans.app P) := by
    intro P
    have : IsIso (N₂.map (Γ₂N₂.natTrans.app P)) := by
      have h := identity_N₂_objectwise P
      erw [hom_comp_eq_id] at h
      rw [h]
      infer_instance
    

Proof state:
C : Type u_1
inst✝² : Category.{?u.194337, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
P : Karoubi (SimplicialObject C)
this : IsIso (N₂.map (Γ₂N₂.natTrans.app P))
⊢ IsIso (Γ₂N₂.natTrans.app P)

Next tactic:
exact isIso_of_reflects_iso _ N₂
instance : IsIso (Γ₂N₂.natTrans : (N₂ : Karoubi (SimplicialObject C) ⥤ _) ⋙ _ ⟶ _) := by
  have : ∀ P : Karoubi (SimplicialObject C), IsIso (Γ₂N₂.natTrans.app P) := by
    intro P
    have : IsIso (N₂.map (Γ₂N₂.natTrans.app P)) := by
      have h := identity_N₂_objectwise P
      erw [hom_comp_eq_id] at h
      rw [h]
      infer_instance
    exact isIso_of_reflects_iso _ N₂
  

Proof state:
C : Type u_1
inst✝² : Category.{?u.194337, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
this : ∀ (P : Karoubi (SimplicialObject C)), IsIso (Γ₂N₂.natTrans.app P)
⊢ IsIso Γ₂N₂.natTrans

Next tactic:
apply NatIso.isIso_of_isIso_app
instance : IsIso (Γ₂N₁.natTrans : (N₁ : SimplicialObject C ⥤ _) ⋙ _ ⟶ _) := by
  

Proof state:
C : Type u_1
inst✝² : Category.{?u.199850, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
⊢ IsIso Γ₂N₁.natTrans

Next tactic:
have : ∀ X : SimplicialObject C, IsIso (Γ₂N₁.natTrans.app X) := by
    intro X
    rw [compatibility_Γ₂N₁_Γ₂N₂_natTrans]
    infer_instance
instance : IsIso (Γ₂N₁.natTrans : (N₁ : SimplicialObject C ⥤ _) ⋙ _ ⟶ _) := by
  have : ∀ X : SimplicialObject C, IsIso (Γ₂N₁.natTrans.app X) := by
    

Proof state:
C : Type u_1
inst✝² : Category.{?u.199850, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
⊢ ∀ (X : SimplicialObject C), IsIso (Γ₂N₁.natTrans.app X)

Next tactic:
intro X
instance : IsIso (Γ₂N₁.natTrans : (N₁ : SimplicialObject C ⥤ _) ⋙ _ ⟶ _) := by
  have : ∀ X : SimplicialObject C, IsIso (Γ₂N₁.natTrans.app X) := by
    intro X
    

Proof state:
C : Type u_1
inst✝² : Category.{?u.199850, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
X : SimplicialObject C
⊢ IsIso (Γ₂N₁.natTrans.app X)

Next tactic:
rw [compatibility_Γ₂N₁_Γ₂N₂_natTrans]
instance : IsIso (Γ₂N₁.natTrans : (N₁ : SimplicialObject C ⥤ _) ⋙ _ ⟶ _) := by
  have : ∀ X : SimplicialObject C, IsIso (Γ₂N₁.natTrans.app X) := by
    intro X
    rw [compatibility_Γ₂N₁_Γ₂N₂_natTrans]
    

Proof state:
C : Type u_1
inst✝² : Category.{?u.199850, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
X : SimplicialObject C
⊢ IsIso ((Γ₂N₂ToKaroubiIso.app X).inv ≫ Γ₂N₂.natTrans.app ((toKaroubi (SimplicialObject C)).obj X))

Next tactic:
infer_instance
instance : IsIso (Γ₂N₁.natTrans : (N₁ : SimplicialObject C ⥤ _) ⋙ _ ⟶ _) := by
  have : ∀ X : SimplicialObject C, IsIso (Γ₂N₁.natTrans.app X) := by
    intro X
    rw [compatibility_Γ₂N₁_Γ₂N₂_natTrans]
    infer_instance
  

Proof state:
C : Type u_1
inst✝² : Category.{?u.199850, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
this : ∀ (X : SimplicialObject C), IsIso (Γ₂N₁.natTrans.app X)
⊢ IsIso Γ₂N₁.natTrans

Next tactic:
apply NatIso.isIso_of_isIso_app
/-- The equivalence of homsets to establish the adjunction between the Stone-Cech compactification
functor and the forgetful functor. -/
noncomputable def stoneCechEquivalence (X : Type u) (Y : Stonean.{u}) :
    (stoneCechObj X ⟶ Y) ≃ (X ⟶ (forget Stonean).obj Y) := by
  

Proof state:
X : Type u
Y : Stonean
⊢ (stoneCechObj X ⟶ Y) ≃ (X ⟶ (forget Stonean).obj Y)

Next tactic:
letI : TopologicalSpace X := ⊥
/-- The equivalence of homsets to establish the adjunction between the Stone-Cech compactification
functor and the forgetful functor. -/
noncomputable def stoneCechEquivalence (X : Type u) (Y : Stonean.{u}) :
    (stoneCechObj X ⟶ Y) ≃ (X ⟶ (forget Stonean).obj Y) := by
  letI : TopologicalSpace X := ⊥
  

Proof state:
X : Type u
Y : Stonean
this : TopologicalSpace X := ⊥
⊢ (stoneCechObj X ⟶ Y) ≃ (X ⟶ (forget Stonean).obj Y)

Next tactic:
haveI : DiscreteTopology X := ⟨rfl⟩
/-- The equivalence of homsets to establish the adjunction between the Stone-Cech compactification
functor and the forgetful functor. -/
noncomputable def stoneCechEquivalence (X : Type u) (Y : Stonean.{u}) :
    (stoneCechObj X ⟶ Y) ≃ (X ⟶ (forget Stonean).obj Y) := by
  letI : TopologicalSpace X := ⊥
  haveI : DiscreteTopology X := ⟨rfl⟩
  

Proof state:
X : Type u
Y : Stonean
this✝ : TopologicalSpace X := ⊥
this : DiscreteTopology X
⊢ (stoneCechObj X ⟶ Y) ≃ (X ⟶ (forget Stonean).obj Y)

Next tactic:
refine (equivOfFullyFaithful toCompHaus).trans ?_
/-- The equivalence of homsets to establish the adjunction between the Stone-Cech compactification
functor and the forgetful functor. -/
noncomputable def stoneCechEquivalence (X : Type u) (Y : Stonean.{u}) :
    (stoneCechObj X ⟶ Y) ≃ (X ⟶ (forget Stonean).obj Y) := by
  letI : TopologicalSpace X := ⊥
  haveI : DiscreteTopology X := ⟨rfl⟩
  refine (equivOfFullyFaithful toCompHaus).trans ?_
  

Proof state:
X : Type u
Y : Stonean
this✝ : TopologicalSpace X := ⊥
this : DiscreteTopology X
⊢ (toCompHaus.obj (stoneCechObj X) ⟶ toCompHaus.obj Y) ≃ (X ⟶ (forget Stonean).obj Y)

Next tactic:
exact (_root_.stoneCechEquivalence (TopCat.of X) (toCompHaus.obj Y)).trans
    (TopCat.adj₁.homEquiv _ _)
theorem dNext_eq (f : ∀ i j, C.X i ⟶ D.X j) {i i' : ι} (w : c.Rel i i') :
    dNext i f = C.d i i' ≫ f i' i := by
  

Proof state:
ι : Type u_1
V : Type u
inst✝¹ : Category.{v, u} V
inst✝ : Preadditive V
c : ComplexShape ι
C D E : HomologicalComplex V c
f✝ g : C ⟶ D
h k : D ⟶ E
i✝ : ι
f : (i j : ι) → X C i ⟶ X D j
i i' : ι
w : ComplexShape.Rel c i i'
⊢ (dNext i) f = d C i i' ≫ f i' i

Next tactic:
obtain rfl := c.next_eq' w
theorem dNext_eq (f : ∀ i j, C.X i ⟶ D.X j) {i i' : ι} (w : c.Rel i i') :
    dNext i f = C.d i i' ≫ f i' i := by
  obtain rfl := c.next_eq' w
  

Proof state:
ι : Type u_1
V : Type u
inst✝¹ : Category.{v, u} V
inst✝ : Preadditive V
c : ComplexShape ι
C D E : HomologicalComplex V c
f✝ g : C ⟶ D
h k : D ⟶ E
i✝ : ι
f : (i j : ι) → X C i ⟶ X D j
i : ι
w : ComplexShape.Rel c i (ComplexShape.next c i)
⊢ (dNext i) f = d C i (ComplexShape.next c i) ≫ f (ComplexShape.next c i) i

Next tactic:
rfl