Theorem: CategoryTheory.Idempotents.functorExtension₁_obj
File: Mathlib/CategoryTheory/Idempotents/FunctorExtension.lean

Proof steps:
state_before: C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.20465, u_1} C
inst✝¹ : Category.{?u.20469, u_2} D
inst✝ : Category.{?u.20473, u_3} E
F : C ⥤ Karoubi D
⊢ { obj := FunctorExtension₁.obj, map := fun {X Y} => FunctorExtension₁.map }.map (𝟙 F) =
    𝟙 ({ obj := FunctorExtension₁.obj, map := fun {X Y} => FunctorExtension₁.map }.obj F)
state_after: case w.h.h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.20465, u_1} C
inst✝¹ : Category.{?u.20469, u_2} D
inst✝ : Category.{?u.20473, u_3} E
F : C ⥤ Karoubi D
P : Karoubi C
⊢ (({ obj := FunctorExtension₁.obj, map := fun {X Y} => FunctorExtension₁.map }.map (𝟙 F)).app P).f =
    ((𝟙 ({ obj := FunctorExtension₁.obj, map := fun {X Y} => FunctorExtension₁.map }.obj F)).app P).f
tactic: ext P
state_before: case w.h.h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.20465, u_1} C
inst✝¹ : Category.{?u.20469, u_2} D
inst✝ : Category.{?u.20473, u_3} E
F : C ⥤ Karoubi D
P : Karoubi C
⊢ (({ obj := FunctorExtension₁.obj, map := fun {X Y} => FunctorExtension₁.map }.map (𝟙 F)).app P).f =
    ((𝟙 ({ obj := FunctorExtension₁.obj, map := fun {X Y} => FunctorExtension₁.map }.obj F)).app P).f
state_after: no goals
tactic: exact comp_p (F.map P.p)
state_before: C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.20465, u_1} C
inst✝¹ : Category.{?u.20469, u_2} D
inst✝ : Category.{?u.20473, u_3} E
F G H : C ⥤ Karoubi D
φ : F ⟶ G
φ' : G ⟶ H
⊢ { obj := FunctorExtension₁.obj, map := fun {X Y} => FunctorExtension₁.map }.map (φ ≫ φ') =
    { obj := FunctorExtension₁.obj, map := fun {X Y} => FunctorExtension₁.map }.map φ ≫
      { obj := FunctorExtension₁.obj, map := fun {X Y} => FunctorExtension₁.map }.map φ'
state_after: case w.h.h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.20465, u_1} C
inst✝¹ : Category.{?u.20469, u_2} D
inst✝ : Category.{?u.20473, u_3} E
F G H : C ⥤ Karoubi D
φ : F ⟶ G
φ' : G ⟶ H
P : Karoubi C
⊢ (({ obj := FunctorExtension₁.obj, map := fun {X Y} => FunctorExtension₁.map }.map (φ ≫ φ')).app P).f =
    (({ obj := FunctorExtension₁.obj, map := fun {X Y} => FunctorExtension₁.map }.map φ ≫
            { obj := FunctorExtension₁.obj, map := fun {X Y} => FunctorExtension₁.map }.map φ').app
        P).f
tactic: ext P
state_before: case w.h.h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.20465, u_1} C
inst✝¹ : Category.{?u.20469, u_2} D
inst✝ : Category.{?u.20473, u_3} E
F G H : C ⥤ Karoubi D
φ : F ⟶ G
φ' : G ⟶ H
P : Karoubi C
⊢ (({ obj := FunctorExtension₁.obj, map := fun {X Y} => FunctorExtension₁.map }.map (φ ≫ φ')).app P).f =
    (({ obj := FunctorExtension₁.obj, map := fun {X Y} => FunctorExtension₁.map }.map φ ≫
            { obj := FunctorExtension₁.obj, map := fun {X Y} => FunctorExtension₁.map }.map φ').app
        P).f
state_after: case w.h.h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.20465, u_1} C
inst✝¹ : Category.{?u.20469, u_2} D
inst✝ : Category.{?u.20473, u_3} E
F G H : C ⥤ Karoubi D
φ : F ⟶ G
φ' : G ⟶ H
P : Karoubi C
⊢ (F.map P.p).f ≫ (φ.app P.X).f ≫ (φ'.app P.X).f = (F.map P.p).f ≫ (φ.app P.X).f ≫ (G.map P.p).f ≫ (φ'.app P.X).f
tactic: simp only [comp_f, FunctorExtension₁.map_app_f, NatTrans.comp_app, assoc]
state_before: case w.h.h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.20465, u_1} C
inst✝¹ : Category.{?u.20469, u_2} D
inst✝ : Category.{?u.20473, u_3} E
F G H : C ⥤ Karoubi D
φ : F ⟶ G
φ' : G ⟶ H
P : Karoubi C
⊢ (F.map P.p).f ≫ (φ.app P.X).f ≫ (φ'.app P.X).f = (F.map P.p).f ≫ (φ.app P.X).f ≫ (G.map P.p).f ≫ (φ'.app P.X).f
state_after: case w.h.h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.20465, u_1} C
inst✝¹ : Category.{?u.20469, u_2} D
inst✝ : Category.{?u.20473, u_3} E
F G H : C ⥤ Karoubi D
φ : F ⟶ G
φ' : G ⟶ H
P : Karoubi C
h : F.map P.p ≫ φ.app P.X = φ.app P.X ≫ G.map P.p
⊢ (F.map P.p).f ≫ (φ.app P.X).f ≫ (φ'.app P.X).f = (F.map P.p).f ≫ (φ.app P.X).f ≫ (G.map P.p).f ≫ (φ'.app P.X).f
tactic: have h := φ.naturality P.p
state_before: case w.h.h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.20465, u_1} C
inst✝¹ : Category.{?u.20469, u_2} D
inst✝ : Category.{?u.20473, u_3} E
F G H : C ⥤ Karoubi D
φ : F ⟶ G
φ' : G ⟶ H
P : Karoubi C
h : F.map P.p ≫ φ.app P.X = φ.app P.X ≫ G.map P.p
⊢ (F.map P.p).f ≫ (φ.app P.X).f ≫ (φ'.app P.X).f = (F.map P.p).f ≫ (φ.app P.X).f ≫ (G.map P.p).f ≫ (φ'.app P.X).f
state_after: case w.h.h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.20465, u_1} C
inst✝¹ : Category.{?u.20469, u_2} D
inst✝ : Category.{?u.20473, u_3} E
F G H : C ⥤ Karoubi D
φ : F ⟶ G
φ' : G ⟶ H
P : Karoubi C
h : F.map P.p ≫ φ.app P.X = φ.app P.X ≫ G.map P.p
h' : F.map (P.p ≫ P.p) = F.map P.p
⊢ (F.map P.p).f ≫ (φ.app P.X).f ≫ (φ'.app P.X).f = (F.map P.p).f ≫ (φ.app P.X).f ≫ (G.map P.p).f ≫ (φ'.app P.X).f
tactic: have h' := F.congr_map P.idem
state_before: case w.h.h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.20465, u_1} C
inst✝¹ : Category.{?u.20469, u_2} D
inst✝ : Category.{?u.20473, u_3} E
F G H : C ⥤ Karoubi D
φ : F ⟶ G
φ' : G ⟶ H
P : Karoubi C
h : F.map P.p ≫ φ.app P.X = φ.app P.X ≫ G.map P.p
h' : F.map (P.p ≫ P.p) = F.map P.p
⊢ (F.map P.p).f ≫ (φ.app P.X).f ≫ (φ'.app P.X).f = (F.map P.p).f ≫ (φ.app P.X).f ≫ (G.map P.p).f ≫ (φ'.app P.X).f
state_after: case w.h.h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.20465, u_1} C
inst✝¹ : Category.{?u.20469, u_2} D
inst✝ : Category.{?u.20473, u_3} E
F G H : C ⥤ Karoubi D
φ : F ⟶ G
φ' : G ⟶ H
P : Karoubi C
h : (F.map P.p).f ≫ (φ.app P.X).f = (φ.app P.X).f ≫ (G.map P.p).f
h' : (F.map P.p).f ≫ (F.map P.p).f = (F.map P.p).f
⊢ (F.map P.p).f ≫ (φ.app P.X).f ≫ (φ'.app P.X).f = (F.map P.p).f ≫ (φ.app P.X).f ≫ (G.map P.p).f ≫ (φ'.app P.X).f
tactic: simp only [hom_ext_iff, comp_f, F.map_comp] at h h'
state_before: case w.h.h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.20465, u_1} C
inst✝¹ : Category.{?u.20469, u_2} D
inst✝ : Category.{?u.20473, u_3} E
F G H : C ⥤ Karoubi D
φ : F ⟶ G
φ' : G ⟶ H
P : Karoubi C
h : (F.map P.p).f ≫ (φ.app P.X).f = (φ.app P.X).f ≫ (G.map P.p).f
h' : (F.map P.p).f ≫ (F.map P.p).f = (F.map P.p).f
⊢ (F.map P.p).f ≫ (φ.app P.X).f ≫ (φ'.app P.X).f = (F.map P.p).f ≫ (φ.app P.X).f ≫ (G.map P.p).f ≫ (φ'.app P.X).f
state_after: case w.h.h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.20465, u_1} C
inst✝¹ : Category.{?u.20469, u_2} D
inst✝ : Category.{?u.20473, u_3} E
F G H : C ⥤ Karoubi D
φ : F ⟶ G
φ' : G ⟶ H
P : Karoubi C
h : (F.map P.p).f ≫ (φ.app P.X).f = (φ.app P.X).f ≫ (G.map P.p).f
h' : (F.map P.p).f ≫ (F.map P.p).f = (F.map P.p).f
⊢ (F.map P.p).f ≫ (φ.app P.X).f ≫ (φ'.app P.X).f = (F.map P.p).f ≫ ((F.map P.p).f ≫ (φ.app P.X).f) ≫ (φ'.app P.X).f
tactic: slice_rhs 2 3 => rw [← h]
state_before: case w.h.h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.20465, u_1} C
inst✝¹ : Category.{?u.20469, u_2} D
inst✝ : Category.{?u.20473, u_3} E
F G H : C ⥤ Karoubi D
φ : F ⟶ G
φ' : G ⟶ H
P : Karoubi C
h : (F.map P.p).f ≫ (φ.app P.X).f = (φ.app P.X).f ≫ (G.map P.p).f
h' : (F.map P.p).f ≫ (F.map P.p).f = (F.map P.p).f
⊢ (F.map P.p).f ≫ (φ.app P.X).f ≫ (φ'.app P.X).f = (F.map P.p).f ≫ ((F.map P.p).f ≫ (φ.app P.X).f) ≫ (φ'.app P.X).f
state_after: case w.h.h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.20465, u_1} C
inst✝¹ : Category.{?u.20469, u_2} D
inst✝ : Category.{?u.20473, u_3} E
F G H : C ⥤ Karoubi D
φ : F ⟶ G
φ' : G ⟶ H
P : Karoubi C
h : (F.map P.p).f ≫ (φ.app P.X).f = (φ.app P.X).f ≫ (G.map P.p).f
h' : (F.map P.p).f ≫ (F.map P.p).f = (F.map P.p).f
⊢ (F.map P.p).f ≫ (φ.app P.X).f ≫ (φ'.app P.X).f = ((F.map P.p).f ≫ (φ.app P.X).f) ≫ (φ'.app P.X).f
tactic: slice_rhs 1 2 => rw [h']
state_before: case w.h.h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.20465, u_1} C
inst✝¹ : Category.{?u.20469, u_2} D
inst✝ : Category.{?u.20473, u_3} E
F G H : C ⥤ Karoubi D
φ : F ⟶ G
φ' : G ⟶ H
P : Karoubi C
h : (F.map P.p).f ≫ (φ.app P.X).f = (φ.app P.X).f ≫ (G.map P.p).f
h' : (F.map P.p).f ≫ (F.map P.p).f = (F.map P.p).f
⊢ (F.map P.p).f ≫ (φ.app P.X).f ≫ (φ'.app P.X).f = ((F.map P.p).f ≫ (φ.app P.X).f) ≫ (φ'.app P.X).f
state_after: no goals
tactic: simp only [assoc]