File: Mathlib/CategoryTheory/Idempotents/FunctorExtension.lean

full_name: CategoryTheory.Idempotents.natTrans_eq
code: /-- A natural transformation between functors `Karoubi C ⥤ D` is determined
by its value on objects coming from `C`. -/
theorem natTrans_eq {F G : Karoubi C ⥤ D} (φ : F ⟶ G) (P : Karoubi C) :
    φ.app P = F.map (decompId_i P) ≫ φ.app P.X ≫ G.map (decompId_p P) 
goal: φ.app P =
  CategoryTheory.CategoryStruct.comp (F.map P.decompId_i)
    (CategoryTheory.CategoryStruct.comp (φ.app { X := P.X, p := CategoryTheory.CategoryStruct.id P.X, idem := ⋯ })
      (G.map P.decompId_p))

full_name: CategoryTheory.Idempotents.FunctorExtension₁.obj_map_f
code: /-- The canonical extension of a functor `C ⥤ Karoubi D` to a functor
`Karoubi C ⥤ Karoubi D` -/
@[simps]
def obj (F : C ⥤ Karoubi D) : Karoubi C ⥤ Karoubi D 
goal: ∀ {X Y : CategoryTheory.Idempotents.Karoubi C} (f : X ⟶ Y),
  ((CategoryTheory.Idempotents.FunctorExtension₁.obj F).map f).f = (F.map f.f).f

full_name: CategoryTheory.Idempotents.FunctorExtension₁.obj_obj_X
code: /-- The canonical extension of a functor `C ⥤ Karoubi D` to a functor
`Karoubi C ⥤ Karoubi D` -/
@[simps]
def obj (F : C ⥤ Karoubi D) : Karoubi C ⥤ Karoubi D 
goal: ((CategoryTheory.Idempotents.FunctorExtension₁.obj F).obj P).X = (F.obj P.X).X

full_name: CategoryTheory.Idempotents.FunctorExtension₁.obj_obj_p
code: /-- The canonical extension of a functor `C ⥤ Karoubi D` to a functor
`Karoubi C ⥤ Karoubi D` -/
@[simps]
def obj (F : C ⥤ Karoubi D) : Karoubi C ⥤ Karoubi D 
goal: ((CategoryTheory.Idempotents.FunctorExtension₁.obj F).obj P).p = (F.map P.p).f

full_name: CategoryTheory.Idempotents.FunctorExtension₁.obj
code: /-- The canonical extension of a functor `C ⥤ Karoubi D` to a functor
`Karoubi C ⥤ Karoubi D` -/
@[simps]
def obj (F : C ⥤ Karoubi D) : Karoubi C ⥤ Karoubi D 
goal: CategoryTheory.Functor (CategoryTheory.Idempotents.Karoubi C) (CategoryTheory.Idempotents.Karoubi D)

full_name: CategoryTheory.Idempotents.FunctorExtension₁.map_app_f
code: /-- Extension of a natural transformation `φ` between functors
`C ⥤ karoubi D` to a natural transformation between the
extension of these functors to `karoubi C ⥤ karoubi D` -/
@[simps]
def map {F G : C ⥤ Karoubi D} (φ : F ⟶ G) : obj F ⟶ obj G 
goal: ((CategoryTheory.Idempotents.FunctorExtension₁.map φ).app P).f =
  CategoryTheory.CategoryStruct.comp (F.map P.p).f (φ.app P.X).f

full_name: CategoryTheory.Idempotents.FunctorExtension₁.map
code: /-- Extension of a natural transformation `φ` between functors
`C ⥤ karoubi D` to a natural transformation between the
extension of these functors to `karoubi C ⥤ karoubi D` -/
@[simps]
def map {F G : C ⥤ Karoubi D} (φ : F ⟶ G) : obj F ⟶ obj G 
goal: CategoryTheory.Idempotents.FunctorExtension₁.obj F ⟶ CategoryTheory.Idempotents.FunctorExtension₁.obj G

full_name: CategoryTheory.Idempotents.functorExtension₁
code: /-- The canonical functor `(C ⥤ Karoubi D) ⥤ (Karoubi C ⥤ Karoubi D)` -/
@[simps]
def functorExtension₁ : (C ⥤ Karoubi D) ⥤ Karoubi C ⥤ Karoubi D 
goal: CategoryTheory.Functor (CategoryTheory.Functor C (CategoryTheory.Idempotents.Karoubi D))
  (CategoryTheory.Functor (CategoryTheory.Idempotents.Karoubi C) (CategoryTheory.Idempotents.Karoubi D))

full_name: CategoryTheory.Idempotents.functorExtension₁_obj
code: /-- The canonical functor `(C ⥤ Karoubi D) ⥤ (Karoubi C ⥤ Karoubi D)` -/
@[simps]
def functorExtension₁ : (C ⥤ Karoubi D) ⥤ Karoubi C ⥤ Karoubi D 
goal: (CategoryTheory.Idempotents.functorExtension₁ C D).obj F = CategoryTheory.Idempotents.FunctorExtension₁.obj F

full_name: CategoryTheory.Idempotents.functorExtension₁_map
code: /-- The canonical functor `(C ⥤ Karoubi D) ⥤ (Karoubi C ⥤ Karoubi D)` -/
@[simps]
def functorExtension₁ : (C ⥤ Karoubi D) ⥤ Karoubi C ⥤ Karoubi D 
goal: ∀ {X Y : CategoryTheory.Functor C (CategoryTheory.Idempotents.Karoubi D)} (φ : X ⟶ Y),
  (CategoryTheory.Idempotents.functorExtension₁ C D).map φ = CategoryTheory.Idempotents.FunctorExtension₁.map φ

full_name: CategoryTheory.Idempotents.functorExtension₁CompWhiskeringLeftToKaroubiIso_hom_app_app_f
code: /-- The natural isomorphism expressing that functors `Karoubi C ⥤ Karoubi D` obtained
using `functorExtension₁` actually extends the original functors `C ⥤ Karoubi D`. -/
@[simps!]
def functorExtension₁CompWhiskeringLeftToKaroubiIso :
    functorExtension₁ C D ⋙ (whiskeringLeft C (Karoubi C) (Karoubi D)).obj (toKaroubi C) ≅ 𝟭 _ 
goal: ∀ (X_1 : C),
  (((CategoryTheory.Idempotents.functorExtension₁CompWhiskeringLeftToKaroubiIso C D).hom.app X).app X_1).f =
    (X.obj X_1).p

full_name: CategoryTheory.Idempotents.functorExtension₁CompWhiskeringLeftToKaroubiIso_inv_app_app_f
code: /-- The natural isomorphism expressing that functors `Karoubi C ⥤ Karoubi D` obtained
using `functorExtension₁` actually extends the original functors `C ⥤ Karoubi D`. -/
@[simps!]
def functorExtension₁CompWhiskeringLeftToKaroubiIso :
    functorExtension₁ C D ⋙ (whiskeringLeft C (Karoubi C) (Karoubi D)).obj (toKaroubi C) ≅ 𝟭 _ 
goal: ∀ (X_1 : C),
  (((CategoryTheory.Idempotents.functorExtension₁CompWhiskeringLeftToKaroubiIso C D).inv.app X).app X_1).f =
    (X.obj X_1).p

full_name: CategoryTheory.Idempotents.functorExtension₁CompWhiskeringLeftToKaroubiIso
code: /-- The natural isomorphism expressing that functors `Karoubi C ⥤ Karoubi D` obtained
using `functorExtension₁` actually extends the original functors `C ⥤ Karoubi D`. -/
@[simps!]
def functorExtension₁CompWhiskeringLeftToKaroubiIso :
    functorExtension₁ C D ⋙ (whiskeringLeft C (Karoubi C) (Karoubi D)).obj (toKaroubi C) ≅ 𝟭 _ 
goal: (CategoryTheory.Idempotents.functorExtension₁ C D).comp
    ((CategoryTheory.whiskeringLeft C (CategoryTheory.Idempotents.Karoubi C) (CategoryTheory.Idempotents.Karoubi D)).obj
      (CategoryTheory.Idempotents.toKaroubi C)) ≅
  CategoryTheory.Functor.id (CategoryTheory.Functor C (CategoryTheory.Idempotents.Karoubi D))

full_name: CategoryTheory.Idempotents.KaroubiUniversal₁.counitIso
code: /-- The counit isomorphism of the equivalence `(C ⥤ Karoubi D) ≌ (Karoubi C ⥤ Karoubi D)`. -/
@[simps!]
def KaroubiUniversal₁.counitIso :
    (whiskeringLeft C (Karoubi C) (Karoubi D)).obj (toKaroubi C) ⋙ functorExtension₁ C D ≅ 𝟭 _ 
goal: ((CategoryTheory.whiskeringLeft C (CategoryTheory.Idempotents.Karoubi C) (CategoryTheory.Idempotents.Karoubi D)).obj
        (CategoryTheory.Idempotents.toKaroubi C)).comp
    (CategoryTheory.Idempotents.functorExtension₁ C D) ≅
  CategoryTheory.Functor.id
    (CategoryTheory.Functor (CategoryTheory.Idempotents.Karoubi C) (CategoryTheory.Idempotents.Karoubi D))

full_name: CategoryTheory.Idempotents.KaroubiUniversal₁.counitIso_hom_app_app_f
code: /-- The counit isomorphism of the equivalence `(C ⥤ Karoubi D) ≌ (Karoubi C ⥤ Karoubi D)`. -/
@[simps!]
def KaroubiUniversal₁.counitIso :
    (whiskeringLeft C (Karoubi C) (Karoubi D)).obj (toKaroubi C) ⋙ functorExtension₁ C D ≅ 𝟭 _ 
goal: (((CategoryTheory.Idempotents.KaroubiUniversal₁.counitIso C D).hom.app X).app P).f = (X.map P.decompId_p).f

full_name: CategoryTheory.Idempotents.KaroubiUniversal₁.counitIso_inv_app_app_f
code: /-- The counit isomorphism of the equivalence `(C ⥤ Karoubi D) ≌ (Karoubi C ⥤ Karoubi D)`. -/
@[simps!]
def KaroubiUniversal₁.counitIso :
    (whiskeringLeft C (Karoubi C) (Karoubi D)).obj (toKaroubi C) ⋙ functorExtension₁ C D ≅ 𝟭 _ 
goal: (((CategoryTheory.Idempotents.KaroubiUniversal₁.counitIso C D).inv.app X).app P).f = (X.map P.decompId_i).f

full_name: CategoryTheory.Idempotents.karoubiUniversal₁
code: /-- The equivalence of categories `(C ⥤ Karoubi D) ≌ (Karoubi C ⥤ Karoubi D)`. -/
@[simps]
def karoubiUniversal₁ : C ⥤ Karoubi D ≌ Karoubi C ⥤ Karoubi D 
goal: CategoryTheory.Functor C (CategoryTheory.Idempotents.Karoubi D) ≌
  CategoryTheory.Functor (CategoryTheory.Idempotents.Karoubi C) (CategoryTheory.Idempotents.Karoubi D)

full_name: CategoryTheory.Idempotents.karoubiUniversal₁_unitIso
code: /-- The equivalence of categories `(C ⥤ Karoubi D) ≌ (Karoubi C ⥤ Karoubi D)`. -/
@[simps]
def karoubiUniversal₁ : C ⥤ Karoubi D ≌ Karoubi C ⥤ Karoubi D 
goal: (CategoryTheory.Idempotents.karoubiUniversal₁ C D).unitIso =
  (CategoryTheory.Idempotents.functorExtension₁CompWhiskeringLeftToKaroubiIso C D).symm

full_name: CategoryTheory.Idempotents.karoubiUniversal₁_inverse
code: /-- The equivalence of categories `(C ⥤ Karoubi D) ≌ (Karoubi C ⥤ Karoubi D)`. -/
@[simps]
def karoubiUniversal₁ : C ⥤ Karoubi D ≌ Karoubi C ⥤ Karoubi D 
goal: (CategoryTheory.Idempotents.karoubiUniversal₁ C D).inverse =
  (CategoryTheory.whiskeringLeft C (CategoryTheory.Idempotents.Karoubi C) (CategoryTheory.Idempotents.Karoubi D)).obj
    (CategoryTheory.Idempotents.toKaroubi C)

full_name: CategoryTheory.Idempotents.karoubiUniversal₁_functor
code: /-- The equivalence of categories `(C ⥤ Karoubi D) ≌ (Karoubi C ⥤ Karoubi D)`. -/
@[simps]
def karoubiUniversal₁ : C ⥤ Karoubi D ≌ Karoubi C ⥤ Karoubi D 
goal: (CategoryTheory.Idempotents.karoubiUniversal₁ C D).functor = CategoryTheory.Idempotents.functorExtension₁ C D

full_name: CategoryTheory.Idempotents.karoubiUniversal₁_counitIso
code: /-- The equivalence of categories `(C ⥤ Karoubi D) ≌ (Karoubi C ⥤ Karoubi D)`. -/
@[simps]
def karoubiUniversal₁ : C ⥤ Karoubi D ≌ Karoubi C ⥤ Karoubi D 
goal: (CategoryTheory.Idempotents.karoubiUniversal₁ C D).counitIso =
  CategoryTheory.Idempotents.KaroubiUniversal₁.counitIso C D

full_name: CategoryTheory.Idempotents.functorExtension₁Comp
code: /-- Compatibility isomorphisms of `functorExtension₁` with respect to the
composition of functors. -/
def functorExtension₁Comp (F : C ⥤ Karoubi D) (G : D ⥤ Karoubi E) :
    (functorExtension₁ C E).obj (F ⋙ (functorExtension₁ D E).obj G) ≅
      (functorExtension₁ C D).obj F ⋙ (functorExtension₁ D E).obj G 
goal: (CategoryTheory.Idempotents.functorExtension₁ C E).obj
    (F.comp ((CategoryTheory.Idempotents.functorExtension₁ D E).obj G)) ≅
  ((CategoryTheory.Idempotents.functorExtension₁ C D).obj F).comp
    ((CategoryTheory.Idempotents.functorExtension₁ D E).obj G)

full_name: CategoryTheory.Idempotents.functorExtension₂_obj_obj_p
code: /-- The canonical functor `(C ⥤ D) ⥤ (Karoubi C ⥤ Karoubi D)` -/
@[simps!]
def functorExtension₂ : (C ⥤ D) ⥤ Karoubi C ⥤ Karoubi D 
goal: (((CategoryTheory.Idempotents.functorExtension₂ C D).obj X).obj P).p = X.map P.p

full_name: CategoryTheory.Idempotents.functorExtension₂_obj_obj_X
code: /-- The canonical functor `(C ⥤ D) ⥤ (Karoubi C ⥤ Karoubi D)` -/
@[simps!]
def functorExtension₂ : (C ⥤ D) ⥤ Karoubi C ⥤ Karoubi D 
goal: (((CategoryTheory.Idempotents.functorExtension₂ C D).obj X).obj P).X = X.obj P.X

full_name: CategoryTheory.Idempotents.functorExtension₂_map_app_f
code: /-- The canonical functor `(C ⥤ D) ⥤ (Karoubi C ⥤ Karoubi D)` -/
@[simps!]
def functorExtension₂ : (C ⥤ D) ⥤ Karoubi C ⥤ Karoubi D 
goal: ∀ {X Y : CategoryTheory.Functor C D} (f : X ⟶ Y) (P : CategoryTheory.Idempotents.Karoubi C),
  (((CategoryTheory.Idempotents.functorExtension₂ C D).map f).app P).f =
    CategoryTheory.CategoryStruct.comp (f.app P.X) (Y.map P.p)

full_name: CategoryTheory.Idempotents.functorExtension₂_obj_map_f
code: /-- The canonical functor `(C ⥤ D) ⥤ (Karoubi C ⥤ Karoubi D)` -/
@[simps!]
def functorExtension₂ : (C ⥤ D) ⥤ Karoubi C ⥤ Karoubi D 
goal: ∀ {X_1 Y : CategoryTheory.Idempotents.Karoubi C} (f : X_1 ⟶ Y),
  (((CategoryTheory.Idempotents.functorExtension₂ C D).obj X).map f).f = X.map f.f

full_name: CategoryTheory.Idempotents.functorExtension₂
code: /-- The canonical functor `(C ⥤ D) ⥤ (Karoubi C ⥤ Karoubi D)` -/
@[simps!]
def functorExtension₂ : (C ⥤ D) ⥤ Karoubi C ⥤ Karoubi D 
goal: CategoryTheory.Functor (CategoryTheory.Functor C D)
  (CategoryTheory.Functor (CategoryTheory.Idempotents.Karoubi C) (CategoryTheory.Idempotents.Karoubi D))

full_name: CategoryTheory.Idempotents.functorExtension₂CompWhiskeringLeftToKaroubiIso
code: /-- The natural isomorphism expressing that functors `Karoubi C ⥤ Karoubi D` obtained
using `functorExtension₂` actually extends the original functors `C ⥤ D`. -/
@[simps!]
def functorExtension₂CompWhiskeringLeftToKaroubiIso :
    functorExtension₂ C D ⋙ (whiskeringLeft C (Karoubi C) (Karoubi D)).obj (toKaroubi C) ≅
      (whiskeringRight C D (Karoubi D)).obj (toKaroubi D) 
goal: (CategoryTheory.Idempotents.functorExtension₂ C D).comp
    ((CategoryTheory.whiskeringLeft C (CategoryTheory.Idempotents.Karoubi C) (CategoryTheory.Idempotents.Karoubi D)).obj
      (CategoryTheory.Idempotents.toKaroubi C)) ≅
  (CategoryTheory.whiskeringRight C D (CategoryTheory.Idempotents.Karoubi D)).obj
    (CategoryTheory.Idempotents.toKaroubi D)

full_name: CategoryTheory.Idempotents.functorExtension₂CompWhiskeringLeftToKaroubiIso_inv_app_app_f
code: /-- The natural isomorphism expressing that functors `Karoubi C ⥤ Karoubi D` obtained
using `functorExtension₂` actually extends the original functors `C ⥤ D`. -/
@[simps!]
def functorExtension₂CompWhiskeringLeftToKaroubiIso :
    functorExtension₂ C D ⋙ (whiskeringLeft C (Karoubi C) (Karoubi D)).obj (toKaroubi C) ≅
      (whiskeringRight C D (Karoubi D)).obj (toKaroubi D) 
goal: ∀ (X_1 : C),
  (((CategoryTheory.Idempotents.functorExtension₂CompWhiskeringLeftToKaroubiIso C D).inv.app X).app X_1).f =
    CategoryTheory.CategoryStruct.id (X.obj X_1)

full_name: CategoryTheory.Idempotents.functorExtension₂CompWhiskeringLeftToKaroubiIso_hom_app_app_f
code: /-- The natural isomorphism expressing that functors `Karoubi C ⥤ Karoubi D` obtained
using `functorExtension₂` actually extends the original functors `C ⥤ D`. -/
@[simps!]
def functorExtension₂CompWhiskeringLeftToKaroubiIso :
    functorExtension₂ C D ⋙ (whiskeringLeft C (Karoubi C) (Karoubi D)).obj (toKaroubi C) ≅
      (whiskeringRight C D (Karoubi D)).obj (toKaroubi D) 
goal: ∀ (X_1 : C),
  (((CategoryTheory.Idempotents.functorExtension₂CompWhiskeringLeftToKaroubiIso C D).hom.app X).app X_1).f =
    CategoryTheory.CategoryStruct.id (X.obj X_1)

full_name: CategoryTheory.Idempotents.karoubiUniversal₂
code: /-- The equivalence of categories `(C ⥤ D) ≌ (Karoubi C ⥤ Karoubi D)` when `D`
is idempotent complete. -/
@[simp]
noncomputable def karoubiUniversal₂ : C ⥤ D ≌ Karoubi C ⥤ Karoubi D 
goal: CategoryTheory.Functor C D ≌
  CategoryTheory.Functor (CategoryTheory.Idempotents.Karoubi C) (CategoryTheory.Idempotents.Karoubi D)

full_name: CategoryTheory.Idempotents.karoubiUniversal₂_functor_eq
code: theorem karoubiUniversal₂_functor_eq : (karoubiUniversal₂ C D).functor = functorExtension₂ C D 
goal: (CategoryTheory.Idempotents.karoubiUniversal₂ C D).functor = CategoryTheory.Idempotents.functorExtension₂ C D

full_name: CategoryTheory.Idempotents.instIsEquivalenceFunctorKaroubiFunctorExtension₂
code: noncomputable instance : (functorExtension₂ C D).IsEquivalence 
goal: (CategoryTheory.Idempotents.functorExtension₂ C D).IsEquivalence

full_name: CategoryTheory.Idempotents.functorExtension_map_app
code: /-- The extension of functors functor `(C ⥤ D) ⥤ (Karoubi C ⥤ D)`
when `D` is idempotent complete. -/
@[simps!]
noncomputable def functorExtension : (C ⥤ D) ⥤ Karoubi C ⥤ D 
goal: ∀ {X Y : CategoryTheory.Functor C D} (f : X ⟶ Y) (X_1 : CategoryTheory.Idempotents.Karoubi C),
  ((CategoryTheory.Idempotents.functorExtension C D).map f).app X_1 =
    (CategoryTheory.Idempotents.toKaroubiEquivalence D).inverse.map
      (((CategoryTheory.Idempotents.functorExtension₂ C D).map f).app X_1)

full_name: CategoryTheory.Idempotents.functorExtension_obj_obj
code: /-- The extension of functors functor `(C ⥤ D) ⥤ (Karoubi C ⥤ D)`
when `D` is idempotent complete. -/
@[simps!]
noncomputable def functorExtension : (C ⥤ D) ⥤ Karoubi C ⥤ D 
goal: ∀ (X_1 : CategoryTheory.Idempotents.Karoubi C),
  ((CategoryTheory.Idempotents.functorExtension C D).obj X).obj X_1 =
    (CategoryTheory.Idempotents.toKaroubiEquivalence D).inverse.obj
      (((CategoryTheory.Idempotents.functorExtension₂ C D).obj X).obj X_1)

full_name: CategoryTheory.Idempotents.functorExtension_obj_map
code: /-- The extension of functors functor `(C ⥤ D) ⥤ (Karoubi C ⥤ D)`
when `D` is idempotent complete. -/
@[simps!]
noncomputable def functorExtension : (C ⥤ D) ⥤ Karoubi C ⥤ D 
goal: ∀ {X_1 Y : CategoryTheory.Idempotents.Karoubi C} (f : X_1 ⟶ Y),
  ((CategoryTheory.Idempotents.functorExtension C D).obj X).map f =
    (CategoryTheory.Idempotents.toKaroubiEquivalence D).inverse.map
      (((CategoryTheory.Idempotents.functorExtension₂ C D).obj X).map f)

full_name: CategoryTheory.Idempotents.functorExtension
code: /-- The extension of functors functor `(C ⥤ D) ⥤ (Karoubi C ⥤ D)`
when `D` is idempotent complete. -/
@[simps!]
noncomputable def functorExtension : (C ⥤ D) ⥤ Karoubi C ⥤ D 
goal: CategoryTheory.Functor (CategoryTheory.Functor C D) (CategoryTheory.Functor (CategoryTheory.Idempotents.Karoubi C) D)

full_name: CategoryTheory.Idempotents.karoubiUniversal
code: /-- The equivalence `(C ⥤ D) ≌ (Karoubi C ⥤ D)` when `D` is idempotent complete. -/
@[simp]
noncomputable def karoubiUniversal : C ⥤ D ≌ Karoubi C ⥤ D 
goal: CategoryTheory.Functor C D ≌ CategoryTheory.Functor (CategoryTheory.Idempotents.Karoubi C) D

full_name: CategoryTheory.Idempotents.karoubiUniversal_functor_eq
code: theorem karoubiUniversal_functor_eq : (karoubiUniversal C D).functor = functorExtension C D 
goal: (CategoryTheory.Idempotents.karoubiUniversal C D).functor = CategoryTheory.Idempotents.functorExtension C D

full_name: CategoryTheory.Idempotents.instIsEquivalenceFunctorKaroubiFunctorExtension
code: noncomputable instance : (functorExtension C D).IsEquivalence 
goal: (CategoryTheory.Idempotents.functorExtension C D).IsEquivalence

full_name: CategoryTheory.Idempotents.instIsEquivalenceFunctorKaroubiObjWhiskeringLeftToKaroubi
code: instance : ((whiskeringLeft C (Karoubi C) D).obj (toKaroubi C)).IsEquivalence 
goal: ((CategoryTheory.whiskeringLeft C (CategoryTheory.Idempotents.Karoubi C) D).obj
    (CategoryTheory.Idempotents.toKaroubi C)).IsEquivalence

full_name: CategoryTheory.Idempotents.whiskeringLeft_obj_preimage_app
code: theorem whiskeringLeft_obj_preimage_app {F G : Karoubi C ⥤ D}
    (τ : toKaroubi _ ⋙ F ⟶ toKaroubi _ ⋙ G) (P : Karoubi C) :
    (((whiskeringLeft _ _ _).obj (toKaroubi _)).preimage τ).app P =
      F.map P.decompId_i ≫ τ.app P.X ≫ G.map P.decompId_p 
goal: (((CategoryTheory.whiskeringLeft C (CategoryTheory.Idempotents.Karoubi C) D).obj
            (CategoryTheory.Idempotents.toKaroubi C)).preimage
        τ).app
    P =
  CategoryTheory.CategoryStruct.comp (F.map P.decompId_i)
    (CategoryTheory.CategoryStruct.comp (τ.app P.X) (G.map P.decompId_p))