Theorem: CategoryTheory.Idempotents.KaroubiHomologicalComplexEquivalence.unitIso_hom_app_f_f
File: Mathlib/CategoryTheory/Idempotents/HomologicalComplex.lean

Proof steps:
state_before: C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
P : Karoubi (HomologicalComplex C c)
i j : ι
x✝ : c.Rel i j
⊢ (fun n => P.p.f n) i ≫ ((functor ⋙ inverse).obj P).X.d i j =
    ((𝟭 (Karoubi (HomologicalComplex C c))).obj P).X.d i j ≫ (fun n => P.p.f n) j
state_after: C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
P : Karoubi (HomologicalComplex C c)
i j : ι
x✝ : c.Rel i j
⊢ P.p.f i ≫ P.p.f i ≫ P.X.d i j = P.X.d i j ≫ P.p.f j
tactic: dsimp
state_before: C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
P : Karoubi (HomologicalComplex C c)
i j : ι
x✝ : c.Rel i j
⊢ P.p.f i ≫ P.p.f i ≫ P.X.d i j = P.X.d i j ≫ P.p.f j
state_after: no goals
tactic: simp only [HomologicalComplex.Hom.comm, HomologicalComplex.Hom.comm_assoc,
                  HomologicalComplex.p_idem]
state_before: C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
P : Karoubi (HomologicalComplex C c)
⊢ { f := fun n => P.p.f n, comm' := ⋯ } =
    ((𝟭 (Karoubi (HomologicalComplex C c))).obj P).p ≫
      { f := fun n => P.p.f n, comm' := ⋯ } ≫ ((functor ⋙ inverse).obj P).p
state_after: case h
C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
P : Karoubi (HomologicalComplex C c)
n : ι
⊢ { f := fun n => P.p.f n, comm' := ⋯ }.f n =
    (((𝟭 (Karoubi (HomologicalComplex C c))).obj P).p ≫
          { f := fun n => P.p.f n, comm' := ⋯ } ≫ ((functor ⋙ inverse).obj P).p).f
      n
tactic: ext n
state_before: case h
C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
P : Karoubi (HomologicalComplex C c)
n : ι
⊢ { f := fun n => P.p.f n, comm' := ⋯ }.f n =
    (((𝟭 (Karoubi (HomologicalComplex C c))).obj P).p ≫
          { f := fun n => P.p.f n, comm' := ⋯ } ≫ ((functor ⋙ inverse).obj P).p).f
      n
state_after: case h
C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
P : Karoubi (HomologicalComplex C c)
n : ι
⊢ P.p.f n = P.p.f n ≫ P.p.f n ≫ P.p.f n
tactic: dsimp
state_before: case h
C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
P : Karoubi (HomologicalComplex C c)
n : ι
⊢ P.p.f n = P.p.f n ≫ P.p.f n ≫ P.p.f n
state_after: no goals
tactic: simp only [HomologicalComplex.p_idem]
state_before: C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
P Q : Karoubi (HomologicalComplex C c)
φ : P ⟶ Q
⊢ (𝟭 (Karoubi (HomologicalComplex C c))).map φ ≫
      (fun P => { f := { f := fun n => P.p.f n, comm' := ⋯ }, comm := ⋯ }) Q =
    (fun P => { f := { f := fun n => P.p.f n, comm' := ⋯ }, comm := ⋯ }) P ≫ (functor ⋙ inverse).map φ
state_after: case h.h
C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
P Q : Karoubi (HomologicalComplex C c)
φ : P ⟶ Q
i✝ : ι
⊢ ((𝟭 (Karoubi (HomologicalComplex C c))).map φ ≫
            (fun P => { f := { f := fun n => P.p.f n, comm' := ⋯ }, comm := ⋯ }) Q).f.f
      i✝ =
    ((fun P => { f := { f := fun n => P.p.f n, comm' := ⋯ }, comm := ⋯ }) P ≫ (functor ⋙ inverse).map φ).f.f i✝
tactic: ext
state_before: case h.h
C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
P Q : Karoubi (HomologicalComplex C c)
φ : P ⟶ Q
i✝ : ι
⊢ ((𝟭 (Karoubi (HomologicalComplex C c))).map φ ≫
            (fun P => { f := { f := fun n => P.p.f n, comm' := ⋯ }, comm := ⋯ }) Q).f.f
      i✝ =
    ((fun P => { f := { f := fun n => P.p.f n, comm' := ⋯ }, comm := ⋯ }) P ≫ (functor ⋙ inverse).map φ).f.f i✝
state_after: case h.h
C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
P Q : Karoubi (HomologicalComplex C c)
φ : P ⟶ Q
i✝ : ι
⊢ φ.f.f i✝ ≫ Q.p.f i✝ = P.p.f i✝ ≫ φ.f.f i✝
tactic: dsimp
state_before: case h.h
C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
P Q : Karoubi (HomologicalComplex C c)
φ : P ⟶ Q
i✝ : ι
⊢ φ.f.f i✝ ≫ Q.p.f i✝ = P.p.f i✝ ≫ φ.f.f i✝
state_after: no goals
tactic: simp only [comp_f, HomologicalComplex.comp_f, HomologicalComplex.comp_p_d, Inverse.map_f_f,
          Functor.map_f_f, HomologicalComplex.p_comp_d]
state_before: C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
P : Karoubi (HomologicalComplex C c)
i j : ι
x✝ : c.Rel i j
⊢ (fun n => P.p.f n) i ≫ ((𝟭 (Karoubi (HomologicalComplex C c))).obj P).X.d i j =
    ((functor ⋙ inverse).obj P).X.d i j ≫ (fun n => P.p.f n) j
state_after: C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
P : Karoubi (HomologicalComplex C c)
i j : ι
x✝ : c.Rel i j
⊢ P.p.f i ≫ P.X.d i j = (P.p.f i ≫ P.X.d i j) ≫ P.p.f j
tactic: dsimp
state_before: C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
P : Karoubi (HomologicalComplex C c)
i j : ι
x✝ : c.Rel i j
⊢ P.p.f i ≫ P.X.d i j = (P.p.f i ≫ P.X.d i j) ≫ P.p.f j
state_after: no goals
tactic: simp only [HomologicalComplex.Hom.comm, assoc, HomologicalComplex.p_idem]
state_before: C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
P : Karoubi (HomologicalComplex C c)
⊢ { f := fun n => P.p.f n, comm' := ⋯ } =
    ((functor ⋙ inverse).obj P).p ≫
      { f := fun n => P.p.f n, comm' := ⋯ } ≫ ((𝟭 (Karoubi (HomologicalComplex C c))).obj P).p
state_after: case h
C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
P : Karoubi (HomologicalComplex C c)
n : ι
⊢ { f := fun n => P.p.f n, comm' := ⋯ }.f n =
    (((functor ⋙ inverse).obj P).p ≫
          { f := fun n => P.p.f n, comm' := ⋯ } ≫ ((𝟭 (Karoubi (HomologicalComplex C c))).obj P).p).f
      n
tactic: ext n
state_before: case h
C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
P : Karoubi (HomologicalComplex C c)
n : ι
⊢ { f := fun n => P.p.f n, comm' := ⋯ }.f n =
    (((functor ⋙ inverse).obj P).p ≫
          { f := fun n => P.p.f n, comm' := ⋯ } ≫ ((𝟭 (Karoubi (HomologicalComplex C c))).obj P).p).f
      n
state_after: case h
C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
P : Karoubi (HomologicalComplex C c)
n : ι
⊢ P.p.f n = P.p.f n ≫ P.p.f n ≫ P.p.f n
tactic: dsimp
state_before: case h
C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
P : Karoubi (HomologicalComplex C c)
n : ι
⊢ P.p.f n = P.p.f n ≫ P.p.f n ≫ P.p.f n
state_after: no goals
tactic: simp only [HomologicalComplex.p_idem]
state_before: C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
P Q : Karoubi (HomologicalComplex C c)
φ : P ⟶ Q
⊢ (functor ⋙ inverse).map φ ≫ (fun P => { f := { f := fun n => P.p.f n, comm' := ⋯ }, comm := ⋯ }) Q =
    (fun P => { f := { f := fun n => P.p.f n, comm' := ⋯ }, comm := ⋯ }) P ≫
      (𝟭 (Karoubi (HomologicalComplex C c))).map φ
state_after: case h.h
C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
P Q : Karoubi (HomologicalComplex C c)
φ : P ⟶ Q
i✝ : ι
⊢ ((functor ⋙ inverse).map φ ≫ (fun P => { f := { f := fun n => P.p.f n, comm' := ⋯ }, comm := ⋯ }) Q).f.f i✝ =
    ((fun P => { f := { f := fun n => P.p.f n, comm' := ⋯ }, comm := ⋯ }) P ≫
            (𝟭 (Karoubi (HomologicalComplex C c))).map φ).f.f
      i✝
tactic: ext
state_before: case h.h
C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
P Q : Karoubi (HomologicalComplex C c)
φ : P ⟶ Q
i✝ : ι
⊢ ((functor ⋙ inverse).map φ ≫ (fun P => { f := { f := fun n => P.p.f n, comm' := ⋯ }, comm := ⋯ }) Q).f.f i✝ =
    ((fun P => { f := { f := fun n => P.p.f n, comm' := ⋯ }, comm := ⋯ }) P ≫
            (𝟭 (Karoubi (HomologicalComplex C c))).map φ).f.f
      i✝
state_after: case h.h
C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
P Q : Karoubi (HomologicalComplex C c)
φ : P ⟶ Q
i✝ : ι
⊢ φ.f.f i✝ ≫ Q.p.f i✝ = P.p.f i✝ ≫ φ.f.f i✝
tactic: dsimp
state_before: case h.h
C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
P Q : Karoubi (HomologicalComplex C c)
φ : P ⟶ Q
i✝ : ι
⊢ φ.f.f i✝ ≫ Q.p.f i✝ = P.p.f i✝ ≫ φ.f.f i✝
state_after: no goals
tactic: simp only [comp_f, HomologicalComplex.comp_f, Inverse.map_f_f, Functor.map_f_f,
          HomologicalComplex.comp_p_d, HomologicalComplex.p_comp_d]
state_before: C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
⊢ { app := fun P => { f := { f := fun n => P.p.f n, comm' := ⋯ }, comm := ⋯ }, naturality := ⋯ } ≫
      { app := fun P => { f := { f := fun n => P.p.f n, comm' := ⋯ }, comm := ⋯ }, naturality := ⋯ } =
    𝟙 (𝟭 (Karoubi (HomologicalComplex C c)))
state_after: case w.h.h.h
C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
x✝ : Karoubi (HomologicalComplex C c)
i✝ : ι
⊢ (({ app := fun P => { f := { f := fun n => P.p.f n, comm' := ⋯ }, comm := ⋯ }, naturality := ⋯ } ≫
                { app := fun P => { f := { f := fun n => P.p.f n, comm' := ⋯ }, comm := ⋯ }, naturality := ⋯ }).app
            x✝).f.f
      i✝ =
    ((𝟙 (𝟭 (Karoubi (HomologicalComplex C c)))).app x✝).f.f i✝
tactic: ext
state_before: case w.h.h.h
C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
x✝ : Karoubi (HomologicalComplex C c)
i✝ : ι
⊢ (({ app := fun P => { f := { f := fun n => P.p.f n, comm' := ⋯ }, comm := ⋯ }, naturality := ⋯ } ≫
                { app := fun P => { f := { f := fun n => P.p.f n, comm' := ⋯ }, comm := ⋯ }, naturality := ⋯ }).app
            x✝).f.f
      i✝ =
    ((𝟙 (𝟭 (Karoubi (HomologicalComplex C c)))).app x✝).f.f i✝
state_after: case w.h.h.h
C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
x✝ : Karoubi (HomologicalComplex C c)
i✝ : ι
⊢ x✝.p.f i✝ ≫ x✝.p.f i✝ = x✝.p.f i✝
tactic: dsimp
state_before: case w.h.h.h
C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
x✝ : Karoubi (HomologicalComplex C c)
i✝ : ι
⊢ x✝.p.f i✝ ≫ x✝.p.f i✝ = x✝.p.f i✝
state_after: no goals
tactic: simp only [HomologicalComplex.p_idem, comp_f, HomologicalComplex.comp_f, _root_.id_eq]
state_before: C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
⊢ { app := fun P => { f := { f := fun n => P.p.f n, comm' := ⋯ }, comm := ⋯ }, naturality := ⋯ } ≫
      { app := fun P => { f := { f := fun n => P.p.f n, comm' := ⋯ }, comm := ⋯ }, naturality := ⋯ } =
    𝟙 (functor ⋙ inverse)
state_after: case w.h.h.h
C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
x✝ : Karoubi (HomologicalComplex C c)
i✝ : ι
⊢ (({ app := fun P => { f := { f := fun n => P.p.f n, comm' := ⋯ }, comm := ⋯ }, naturality := ⋯ } ≫
                { app := fun P => { f := { f := fun n => P.p.f n, comm' := ⋯ }, comm := ⋯ }, naturality := ⋯ }).app
            x✝).f.f
      i✝ =
    ((𝟙 (functor ⋙ inverse)).app x✝).f.f i✝
tactic: ext
state_before: case w.h.h.h
C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
x✝ : Karoubi (HomologicalComplex C c)
i✝ : ι
⊢ (({ app := fun P => { f := { f := fun n => P.p.f n, comm' := ⋯ }, comm := ⋯ }, naturality := ⋯ } ≫
                { app := fun P => { f := { f := fun n => P.p.f n, comm' := ⋯ }, comm := ⋯ }, naturality := ⋯ }).app
            x✝).f.f
      i✝ =
    ((𝟙 (functor ⋙ inverse)).app x✝).f.f i✝
state_after: case w.h.h.h
C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
x✝ : Karoubi (HomologicalComplex C c)
i✝ : ι
⊢ x✝.p.f i✝ ≫ x✝.p.f i✝ = x✝.p.f i✝
tactic: dsimp
state_before: case w.h.h.h
C : Type u_1
inst✝¹ : Category.{?u.27982, u_1} C
inst✝ : Preadditive C
ι : Type u_2
c : ComplexShape ι
x✝ : Karoubi (HomologicalComplex C c)
i✝ : ι
⊢ x✝.p.f i✝ ≫ x✝.p.f i✝ = x✝.p.f i✝
state_after: no goals
tactic: simp only [HomologicalComplex.p_idem, comp_f, HomologicalComplex.comp_f, _root_.id_eq,
      Inverse.obj_p_f, Functor.obj_X_p]