Theorem: CategoryTheory.Idempotents.toKaroubi_comp_karoubiFunctorCategoryEmbedding
File: Mathlib/CategoryTheory/Idempotents/FunctorCategories.lean

tactic: apply Functor.ext
state_before: J : Type u_1
C : Type u_2
inst✝¹ : Category.{u_3, u_1} J
inst✝ : Category.{u_4, u_2} C
P Q : Karoubi (J ⥤ C)
f : P ⟶ Q
X : J
⊢ toKaroubi (J ⥤ C) ⋙ karoubiFunctorCategoryEmbedding J C = (whiskeringRight J C (Karoubi C)).obj (toKaroubi C)
state_after: case h_map
J : Type u_1
C : Type u_2
inst✝¹ : Category.{u_3, u_1} J
inst✝ : Category.{u_4, u_2} C
P Q : Karoubi (J ⥤ C)
f : P ⟶ Q
X : J
⊢ autoParam
    (∀ (X Y : J ⥤ C) (f : X ⟶ Y),
      (toKaroubi (J ⥤ C) ⋙ karoubiFunctorCategoryEmbedding J C).map f =
        eqToHom ⋯ ≫ ((whiskeringRight J C (Karoubi C)).obj (toKaroubi C)).map f ≫ eqToHom ⋯)
    _auto✝

case h_obj
J : Type u_1
C : Type u_2
inst✝¹ : Category.{u_3, u_1} J
inst✝ : Category.{u_4, u_2} C
P Q : Karoubi (J ⥤ C)
f : P ⟶ Q
X : J
⊢ ∀ (X : J ⥤ C),
    (toKaroubi (J ⥤ C) ⋙ karoubiFunctorCategoryEmbedding J C).obj X =
      ((whiskeringRight J C (Karoubi C)).obj (toKaroubi C)).obj X

tactic: intro X Y f
state_before: case h_map
J : Type u_1
C : Type u_2
inst✝¹ : Category.{u_3, u_1} J
inst✝ : Category.{u_4, u_2} C
P Q : Karoubi (J ⥤ C)
f : P ⟶ Q
X : J
⊢ autoParam
    (∀ (X Y : J ⥤ C) (f : X ⟶ Y),
      (toKaroubi (J ⥤ C) ⋙ karoubiFunctorCategoryEmbedding J C).map f =
        eqToHom ⋯ ≫ ((whiskeringRight J C (Karoubi C)).obj (toKaroubi C)).map f ≫ eqToHom ⋯)
    _auto✝
state_after: case h_map
J : Type u_1
C : Type u_2
inst✝¹ : Category.{u_3, u_1} J
inst✝ : Category.{u_4, u_2} C
P Q : Karoubi (J ⥤ C)
f✝ : P ⟶ Q
X✝ : J
X Y : J ⥤ C
f : X ⟶ Y
⊢ (toKaroubi (J ⥤ C) ⋙ karoubiFunctorCategoryEmbedding J C).map f =
    eqToHom ⋯ ≫ ((whiskeringRight J C (Karoubi C)).obj (toKaroubi C)).map f ≫ eqToHom ⋯

tactic: ext j
state_before: case h_map
J : Type u_1
C : Type u_2
inst✝¹ : Category.{u_3, u_1} J
inst✝ : Category.{u_4, u_2} C
P Q : Karoubi (J ⥤ C)
f✝ : P ⟶ Q
X✝ : J
X Y : J ⥤ C
f : X ⟶ Y
⊢ (toKaroubi (J ⥤ C) ⋙ karoubiFunctorCategoryEmbedding J C).map f =
    eqToHom ⋯ ≫ ((whiskeringRight J C (Karoubi C)).obj (toKaroubi C)).map f ≫ eqToHom ⋯
state_after: case h_map.w.h.h
J : Type u_1
C : Type u_2
inst✝¹ : Category.{u_3, u_1} J
inst✝ : Category.{u_4, u_2} C
P Q : Karoubi (J ⥤ C)
f✝ : P ⟶ Q
X✝ : J
X Y : J ⥤ C
f : X ⟶ Y
j : J
⊢ (((toKaroubi (J ⥤ C) ⋙ karoubiFunctorCategoryEmbedding J C).map f).app j).f =
    ((eqToHom ⋯ ≫ ((whiskeringRight J C (Karoubi C)).obj (toKaroubi C)).map f ≫ eqToHom ⋯).app j).f

tactic: dsimp [toKaroubi]
state_before: case h_map.w.h.h
J : Type u_1
C : Type u_2
inst✝¹ : Category.{u_3, u_1} J
inst✝ : Category.{u_4, u_2} C
P Q : Karoubi (J ⥤ C)
f✝ : P ⟶ Q
X✝ : J
X Y : J ⥤ C
f : X ⟶ Y
j : J
⊢ (((toKaroubi (J ⥤ C) ⋙ karoubiFunctorCategoryEmbedding J C).map f).app j).f =
    ((eqToHom ⋯ ≫ ((whiskeringRight J C (Karoubi C)).obj (toKaroubi C)).map f ≫ eqToHom ⋯).app j).f
state_after: case h_map.w.h.h
J : Type u_1
C : Type u_2
inst✝¹ : Category.{u_3, u_1} J
inst✝ : Category.{u_4, u_2} C
P Q : Karoubi (J ⥤ C)
f✝ : P ⟶ Q
X✝ : J
X Y : J ⥤ C
f : X ⟶ Y
j : J
⊢ f.app j = ((eqToHom ⋯).app j).f ≫ f.app j ≫ ((eqToHom ⋯).app j).f

tactic: simp only [eqToHom_app, eqToHom_refl]
state_before: case h_map.w.h.h
J : Type u_1
C : Type u_2
inst✝¹ : Category.{u_3, u_1} J
inst✝ : Category.{u_4, u_2} C
P Q : Karoubi (J ⥤ C)
f✝ : P ⟶ Q
X✝ : J
X Y : J ⥤ C
f : X ⟶ Y
j : J
⊢ f.app j = ((eqToHom ⋯).app j).f ≫ f.app j ≫ ((eqToHom ⋯).app j).f
state_after: case h_map.w.h.h
J : Type u_1
C : Type u_2
inst✝¹ : Category.{u_3, u_1} J
inst✝ : Category.{u_4, u_2} C
P Q : Karoubi (J ⥤ C)
f✝ : P ⟶ Q
X✝ : J
X Y : J ⥤ C
f : X ⟶ Y
j : J
⊢ f.app j =
    (𝟙 ((KaroubiFunctorCategoryEmbedding.obj { X := X, p := 𝟙 X, idem := ⋯ }).obj j)).f ≫
      f.app j ≫
        (𝟙
            ((Y ⋙
                  { obj := fun X => { X := X, p := 𝟙 X, idem := ⋯ }, map := fun {X Y} f => { f := f, comm := ⋯ },
                    map_id := ⋯, map_comp := ⋯ }).obj
              j)).f

tactic: erw [comp_id, id_comp]
state_before: case h_map.w.h.h
J : Type u_1
C : Type u_2
inst✝¹ : Category.{u_3, u_1} J
inst✝ : Category.{u_4, u_2} C
P Q : Karoubi (J ⥤ C)
f✝ : P ⟶ Q
X✝ : J
X Y : J ⥤ C
f : X ⟶ Y
j : J
⊢ f.app j =
    (𝟙 ((KaroubiFunctorCategoryEmbedding.obj { X := X, p := 𝟙 X, idem := ⋯ }).obj j)).f ≫
      f.app j ≫
        (𝟙
            ((Y ⋙
                  { obj := fun X => { X := X, p := 𝟙 X, idem := ⋯ }, map := fun {X Y} f => { f := f, comm := ⋯ },
                    map_id := ⋯, map_comp := ⋯ }).obj
              j)).f
state_after: no goals

tactic: intro X
state_before: case h_obj
J : Type u_1
C : Type u_2
inst✝¹ : Category.{u_3, u_1} J
inst✝ : Category.{u_4, u_2} C
P Q : Karoubi (J ⥤ C)
f : P ⟶ Q
X : J
⊢ ∀ (X : J ⥤ C),
    (toKaroubi (J ⥤ C) ⋙ karoubiFunctorCategoryEmbedding J C).obj X =
      ((whiskeringRight J C (Karoubi C)).obj (toKaroubi C)).obj X
state_after: case h_obj
J : Type u_1
C : Type u_2
inst✝¹ : Category.{u_3, u_1} J
inst✝ : Category.{u_4, u_2} C
P Q : Karoubi (J ⥤ C)
f : P ⟶ Q
X✝ : J
X : J ⥤ C
⊢ (toKaroubi (J ⥤ C) ⋙ karoubiFunctorCategoryEmbedding J C).obj X =
    ((whiskeringRight J C (Karoubi C)).obj (toKaroubi C)).obj X

tactic: apply Functor.ext
state_before: case h_obj
J : Type u_1
C : Type u_2
inst✝¹ : Category.{u_3, u_1} J
inst✝ : Category.{u_4, u_2} C
P Q : Karoubi (J ⥤ C)
f : P ⟶ Q
X✝ : J
X : J ⥤ C
⊢ (toKaroubi (J ⥤ C) ⋙ karoubiFunctorCategoryEmbedding J C).obj X =
    ((whiskeringRight J C (Karoubi C)).obj (toKaroubi C)).obj X
state_after: case h_obj.h_map
J : Type u_1
C : Type u_2
inst✝¹ : Category.{u_3, u_1} J
inst✝ : Category.{u_4, u_2} C
P Q : Karoubi (J ⥤ C)
f : P ⟶ Q
X✝ : J
X : J ⥤ C
⊢ autoParam
    (∀ (X_1 Y : J) (f : X_1 ⟶ Y),
      ((toKaroubi (J ⥤ C) ⋙ karoubiFunctorCategoryEmbedding J C).obj X).map f =
        eqToHom ⋯ ≫ (((whiskeringRight J C (Karoubi C)).obj (toKaroubi C)).obj X).map f ≫ eqToHom ⋯)
    _auto✝

case h_obj.h_obj
J : Type u_1
C : Type u_2
inst✝¹ : Category.{u_3, u_1} J
inst✝ : Category.{u_4, u_2} C
P Q : Karoubi (J ⥤ C)
f : P ⟶ Q
X✝ : J
X : J ⥤ C
⊢ ∀ (X_1 : J),
    ((toKaroubi (J ⥤ C) ⋙ karoubiFunctorCategoryEmbedding J C).obj X).obj X_1 =
      (((whiskeringRight J C (Karoubi C)).obj (toKaroubi C)).obj X).obj X_1

tactic: intro j j' φ
state_before: case h_obj.h_map
J : Type u_1
C : Type u_2
inst✝¹ : Category.{u_3, u_1} J
inst✝ : Category.{u_4, u_2} C
P Q : Karoubi (J ⥤ C)
f : P ⟶ Q
X✝ : J
X : J ⥤ C
⊢ autoParam
    (∀ (X_1 Y : J) (f : X_1 ⟶ Y),
      ((toKaroubi (J ⥤ C) ⋙ karoubiFunctorCategoryEmbedding J C).obj X).map f =
        eqToHom ⋯ ≫ (((whiskeringRight J C (Karoubi C)).obj (toKaroubi C)).obj X).map f ≫ eqToHom ⋯)
    _auto✝
state_after: case h_obj.h_map
J : Type u_1
C : Type u_2
inst✝¹ : Category.{u_3, u_1} J
inst✝ : Category.{u_4, u_2} C
P Q : Karoubi (J ⥤ C)
f : P ⟶ Q
X✝ : J
X : J ⥤ C
j j' : J
φ : j ⟶ j'
⊢ ((toKaroubi (J ⥤ C) ⋙ karoubiFunctorCategoryEmbedding J C).obj X).map φ =
    eqToHom ⋯ ≫ (((whiskeringRight J C (Karoubi C)).obj (toKaroubi C)).obj X).map φ ≫ eqToHom ⋯

tactic: ext
state_before: case h_obj.h_map
J : Type u_1
C : Type u_2
inst✝¹ : Category.{u_3, u_1} J
inst✝ : Category.{u_4, u_2} C
P Q : Karoubi (J ⥤ C)
f : P ⟶ Q
X✝ : J
X : J ⥤ C
j j' : J
φ : j ⟶ j'
⊢ ((toKaroubi (J ⥤ C) ⋙ karoubiFunctorCategoryEmbedding J C).obj X).map φ =
    eqToHom ⋯ ≫ (((whiskeringRight J C (Karoubi C)).obj (toKaroubi C)).obj X).map φ ≫ eqToHom ⋯
state_after: case h_obj.h_map.h
J : Type u_1
C : Type u_2
inst✝¹ : Category.{u_3, u_1} J
inst✝ : Category.{u_4, u_2} C
P Q : Karoubi (J ⥤ C)
f : P ⟶ Q
X✝ : J
X : J ⥤ C
j j' : J
φ : j ⟶ j'
⊢ (((toKaroubi (J ⥤ C) ⋙ karoubiFunctorCategoryEmbedding J C).obj X).map φ).f =
    (eqToHom ⋯ ≫ (((whiskeringRight J C (Karoubi C)).obj (toKaroubi C)).obj X).map φ ≫ eqToHom ⋯).f

tactic: dsimp
state_before: case h_obj.h_map.h
J : Type u_1
C : Type u_2
inst✝¹ : Category.{u_3, u_1} J
inst✝ : Category.{u_4, u_2} C
P Q : Karoubi (J ⥤ C)
f : P ⟶ Q
X✝ : J
X : J ⥤ C
j j' : J
φ : j ⟶ j'
⊢ (((toKaroubi (J ⥤ C) ⋙ karoubiFunctorCategoryEmbedding J C).obj X).map φ).f =
    (eqToHom ⋯ ≫ (((whiskeringRight J C (Karoubi C)).obj (toKaroubi C)).obj X).map φ ≫ eqToHom ⋯).f
state_after: case h_obj.h_map.h
J : Type u_1
C : Type u_2
inst✝¹ : Category.{u_3, u_1} J
inst✝ : Category.{u_4, u_2} C
P Q : Karoubi (J ⥤ C)
f : P ⟶ Q
X✝ : J
X : J ⥤ C
j j' : J
φ : j ⟶ j'
⊢ 𝟙 (X.obj j) ≫ X.map φ = 𝟙 (X.obj j) ≫ X.map φ ≫ 𝟙 (X.obj j')

tactic: simp
state_before: case h_obj.h_map.h
J : Type u_1
C : Type u_2
inst✝¹ : Category.{u_3, u_1} J
inst✝ : Category.{u_4, u_2} C
P Q : Karoubi (J ⥤ C)
f : P ⟶ Q
X✝ : J
X : J ⥤ C
j j' : J
φ : j ⟶ j'
⊢ 𝟙 (X.obj j) ≫ X.map φ = 𝟙 (X.obj j) ≫ X.map φ ≫ 𝟙 (X.obj j')
state_after: no goals

tactic: intro j
state_before: case h_obj.h_obj
J : Type u_1
C : Type u_2
inst✝¹ : Category.{u_3, u_1} J
inst✝ : Category.{u_4, u_2} C
P Q : Karoubi (J ⥤ C)
f : P ⟶ Q
X✝ : J
X : J ⥤ C
⊢ ∀ (X_1 : J),
    ((toKaroubi (J ⥤ C) ⋙ karoubiFunctorCategoryEmbedding J C).obj X).obj X_1 =
      (((whiskeringRight J C (Karoubi C)).obj (toKaroubi C)).obj X).obj X_1
state_after: case h_obj.h_obj
J : Type u_1
C : Type u_2
inst✝¹ : Category.{u_3, u_1} J
inst✝ : Category.{u_4, u_2} C
P Q : Karoubi (J ⥤ C)
f : P ⟶ Q
X✝ : J
X : J ⥤ C
j : J
⊢ ((toKaroubi (J ⥤ C) ⋙ karoubiFunctorCategoryEmbedding J C).obj X).obj j =
    (((whiskeringRight J C (Karoubi C)).obj (toKaroubi C)).obj X).obj j

tactic: rfl
state_before: case h_obj.h_obj
J : Type u_1
C : Type u_2
inst✝¹ : Category.{u_3, u_1} J
inst✝ : Category.{u_4, u_2} C
P Q : Karoubi (J ⥤ C)
f : P ⟶ Q
X✝ : J
X : J ⥤ C
j : J
⊢ ((toKaroubi (J ⥤ C) ⋙ karoubiFunctorCategoryEmbedding J C).obj X).obj j =
    (((whiskeringRight J C (Karoubi C)).obj (toKaroubi C)).obj X).obj j
state_after: no goals