Theorem: CategoryTheory.Idempotents.FunctorExtension₁.map_app_f
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.6113, u_1} C
inst✝¹ : Category.{?u.6117, u_2} D
inst✝ : Category.{?u.6121, u_3} E
F G : C ⥤ Karoubi D
φ : F ⟶ G
P : Karoubi C
⊢ (F.map P.p).f ≫ (φ.app P.X).f = ((obj F).obj P).p ≫ ((F.map P.p).f ≫ (φ.app P.X).f) ≫ ((obj G).obj P).p
state_after: C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.6113, u_1} C
inst✝¹ : Category.{?u.6117, u_2} D
inst✝ : Category.{?u.6121, u_3} E
F G : C ⥤ Karoubi D
φ : F ⟶ G
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 = ((obj F).obj P).p ≫ ((F.map P.p).f ≫ (φ.app P.X).f) ≫ ((obj G).obj P).p
tactic: have h := φ.naturality P.p
state_before: C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.6113, u_1} C
inst✝¹ : Category.{?u.6117, u_2} D
inst✝ : Category.{?u.6121, u_3} E
F G : C ⥤ Karoubi D
φ : F ⟶ G
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 = ((obj F).obj P).p ≫ ((F.map P.p).f ≫ (φ.app P.X).f) ≫ ((obj G).obj P).p
state_after: C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.6113, u_1} C
inst✝¹ : Category.{?u.6117, u_2} D
inst✝ : Category.{?u.6121, u_3} E
F G : C ⥤ Karoubi D
φ : F ⟶ G
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 = ((obj F).obj P).p ≫ ((F.map P.p).f ≫ (φ.app P.X).f) ≫ ((obj G).obj P).p
tactic: have h' := F.congr_map P.idem
state_before: C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.6113, u_1} C
inst✝¹ : Category.{?u.6117, u_2} D
inst✝ : Category.{?u.6121, u_3} E
F G : C ⥤ Karoubi D
φ : F ⟶ G
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 = ((obj F).obj P).p ≫ ((F.map P.p).f ≫ (φ.app P.X).f) ≫ ((obj G).obj P).p
state_after: C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.6113, u_1} C
inst✝¹ : Category.{?u.6117, u_2} D
inst✝ : Category.{?u.6121, u_3} E
F G : C ⥤ Karoubi D
φ : F ⟶ G
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 = ((obj F).obj P).p ≫ ((F.map P.p).f ≫ (φ.app P.X).f) ≫ ((obj G).obj P).p
tactic: simp only [hom_ext_iff, Karoubi.comp_f, F.map_comp] at h h'
state_before: C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.6113, u_1} C
inst✝¹ : Category.{?u.6117, u_2} D
inst✝ : Category.{?u.6121, u_3} E
F G : C ⥤ Karoubi D
φ : F ⟶ G
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 = ((obj F).obj P).p ≫ ((F.map P.p).f ≫ (φ.app P.X).f) ≫ ((obj G).obj P).p
state_after: C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.6113, u_1} C
inst✝¹ : Category.{?u.6117, u_2} D
inst✝ : Category.{?u.6121, u_3} E
F G : C ⥤ Karoubi D
φ : F ⟶ G
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 = (F.map P.p).f ≫ (F.map P.p).f ≫ (F.map P.p).f ≫ (φ.app P.X).f
tactic: simp only [obj_obj_p, assoc, ← h]
state_before: C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.6113, u_1} C
inst✝¹ : Category.{?u.6117, u_2} D
inst✝ : Category.{?u.6121, u_3} E
F G : C ⥤ Karoubi D
φ : F ⟶ G
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 = (F.map P.p).f ≫ (F.map P.p).f ≫ (F.map P.p).f ≫ (φ.app P.X).f
state_after: no goals
tactic: slice_rhs 1 3 => rw [h', h']
state_before: C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.6113, u_1} C
inst✝¹ : Category.{?u.6117, u_2} D
inst✝ : Category.{?u.6121, u_3} E
F G : C ⥤ Karoubi D
φ : F ⟶ G
x✝¹ x✝ : Karoubi C
f : x✝¹ ⟶ x✝
⊢ (obj F).map f ≫ (fun P => { f := (F.map P.p).f ≫ (φ.app P.X).f, comm := ⋯ }) x✝ =
    (fun P => { f := (F.map P.p).f ≫ (φ.app P.X).f, comm := ⋯ }) x✝¹ ≫ (obj G).map f
state_after: case h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.6113, u_1} C
inst✝¹ : Category.{?u.6117, u_2} D
inst✝ : Category.{?u.6121, u_3} E
F G : C ⥤ Karoubi D
φ : F ⟶ G
x✝¹ x✝ : Karoubi C
f : x✝¹ ⟶ x✝
⊢ ((obj F).map f ≫ (fun P => { f := (F.map P.p).f ≫ (φ.app P.X).f, comm := ⋯ }) x✝).f =
    ((fun P => { f := (F.map P.p).f ≫ (φ.app P.X).f, comm := ⋯ }) x✝¹ ≫ (obj G).map f).f
tactic: ext
state_before: case h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.6113, u_1} C
inst✝¹ : Category.{?u.6117, u_2} D
inst✝ : Category.{?u.6121, u_3} E
F G : C ⥤ Karoubi D
φ : F ⟶ G
x✝¹ x✝ : Karoubi C
f : x✝¹ ⟶ x✝
⊢ ((obj F).map f ≫ (fun P => { f := (F.map P.p).f ≫ (φ.app P.X).f, comm := ⋯ }) x✝).f =
    ((fun P => { f := (F.map P.p).f ≫ (φ.app P.X).f, comm := ⋯ }) x✝¹ ≫ (obj G).map f).f
state_after: case h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.6113, u_1} C
inst✝¹ : Category.{?u.6117, u_2} D
inst✝ : Category.{?u.6121, u_3} E
F G : C ⥤ Karoubi D
φ : F ⟶ G
x✝¹ x✝ : Karoubi C
f : x✝¹ ⟶ x✝
⊢ (F.map f.f).f ≫ (F.map x✝.p).f ≫ (φ.app x✝.X).f = ((F.map x✝¹.p).f ≫ (φ.app x✝¹.X).f) ≫ (G.map f.f).f
tactic: dsimp [obj]
state_before: case h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.6113, u_1} C
inst✝¹ : Category.{?u.6117, u_2} D
inst✝ : Category.{?u.6121, u_3} E
F G : C ⥤ Karoubi D
φ : F ⟶ G
x✝¹ x✝ : Karoubi C
f : x✝¹ ⟶ x✝
⊢ (F.map f.f).f ≫ (F.map x✝.p).f ≫ (φ.app x✝.X).f = ((F.map x✝¹.p).f ≫ (φ.app x✝¹.X).f) ≫ (G.map f.f).f
state_after: case h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.6113, u_1} C
inst✝¹ : Category.{?u.6117, u_2} D
inst✝ : Category.{?u.6121, u_3} E
F G : C ⥤ Karoubi D
φ : F ⟶ G
x✝¹ x✝ : Karoubi C
f : x✝¹ ⟶ x✝
h : F.map f.f ≫ φ.app x✝.X = φ.app x✝¹.X ≫ G.map f.f
⊢ (F.map f.f).f ≫ (F.map x✝.p).f ≫ (φ.app x✝.X).f = ((F.map x✝¹.p).f ≫ (φ.app x✝¹.X).f) ≫ (G.map f.f).f
tactic: have h := φ.naturality f.f
state_before: case h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.6113, u_1} C
inst✝¹ : Category.{?u.6117, u_2} D
inst✝ : Category.{?u.6121, u_3} E
F G : C ⥤ Karoubi D
φ : F ⟶ G
x✝¹ x✝ : Karoubi C
f : x✝¹ ⟶ x✝
h : F.map f.f ≫ φ.app x✝.X = φ.app x✝¹.X ≫ G.map f.f
⊢ (F.map f.f).f ≫ (F.map x✝.p).f ≫ (φ.app x✝.X).f = ((F.map x✝¹.p).f ≫ (φ.app x✝¹.X).f) ≫ (G.map f.f).f
state_after: case h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.6113, u_1} C
inst✝¹ : Category.{?u.6117, u_2} D
inst✝ : Category.{?u.6121, u_3} E
F G : C ⥤ Karoubi D
φ : F ⟶ G
x✝¹ x✝ : Karoubi C
f : x✝¹ ⟶ x✝
h : F.map f.f ≫ φ.app x✝.X = φ.app x✝¹.X ≫ G.map f.f
h' : F.map (f.f ≫ x✝.p) = F.map f.f
⊢ (F.map f.f).f ≫ (F.map x✝.p).f ≫ (φ.app x✝.X).f = ((F.map x✝¹.p).f ≫ (φ.app x✝¹.X).f) ≫ (G.map f.f).f
tactic: have h' := F.congr_map (comp_p f)
state_before: case h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.6113, u_1} C
inst✝¹ : Category.{?u.6117, u_2} D
inst✝ : Category.{?u.6121, u_3} E
F G : C ⥤ Karoubi D
φ : F ⟶ G
x✝¹ x✝ : Karoubi C
f : x✝¹ ⟶ x✝
h : F.map f.f ≫ φ.app x✝.X = φ.app x✝¹.X ≫ G.map f.f
h' : F.map (f.f ≫ x✝.p) = F.map f.f
⊢ (F.map f.f).f ≫ (F.map x✝.p).f ≫ (φ.app x✝.X).f = ((F.map x✝¹.p).f ≫ (φ.app x✝¹.X).f) ≫ (G.map f.f).f
state_after: case h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.6113, u_1} C
inst✝¹ : Category.{?u.6117, u_2} D
inst✝ : Category.{?u.6121, u_3} E
F G : C ⥤ Karoubi D
φ : F ⟶ G
x✝¹ x✝ : Karoubi C
f : x✝¹ ⟶ x✝
h : F.map f.f ≫ φ.app x✝.X = φ.app x✝¹.X ≫ G.map f.f
h' : F.map (f.f ≫ x✝.p) = F.map f.f
h'' : F.map (x✝¹.p ≫ f.f) = F.map f.f
⊢ (F.map f.f).f ≫ (F.map x✝.p).f ≫ (φ.app x✝.X).f = ((F.map x✝¹.p).f ≫ (φ.app x✝¹.X).f) ≫ (G.map f.f).f
tactic: have h'' := F.congr_map (p_comp f)
state_before: case h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.6113, u_1} C
inst✝¹ : Category.{?u.6117, u_2} D
inst✝ : Category.{?u.6121, u_3} E
F G : C ⥤ Karoubi D
φ : F ⟶ G
x✝¹ x✝ : Karoubi C
f : x✝¹ ⟶ x✝
h : F.map f.f ≫ φ.app x✝.X = φ.app x✝¹.X ≫ G.map f.f
h' : F.map (f.f ≫ x✝.p) = F.map f.f
h'' : F.map (x✝¹.p ≫ f.f) = F.map f.f
⊢ (F.map f.f).f ≫ (F.map x✝.p).f ≫ (φ.app x✝.X).f = ((F.map x✝¹.p).f ≫ (φ.app x✝¹.X).f) ≫ (G.map f.f).f
state_after: case h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.6113, u_1} C
inst✝¹ : Category.{?u.6117, u_2} D
inst✝ : Category.{?u.6121, u_3} E
F G : C ⥤ Karoubi D
φ : F ⟶ G
x✝¹ x✝ : Karoubi C
f : x✝¹ ⟶ x✝
h : (F.map f.f).f ≫ (φ.app x✝.X).f = (φ.app x✝¹.X).f ≫ (G.map f.f).f
h' : (F.map f.f).f ≫ (F.map x✝.p).f = (F.map f.f).f
h'' : (F.map x✝¹.p).f ≫ (F.map f.f).f = (F.map f.f).f
⊢ (F.map f.f).f ≫ (F.map x✝.p).f ≫ (φ.app x✝.X).f = ((F.map x✝¹.p).f ≫ (φ.app x✝¹.X).f) ≫ (G.map f.f).f
tactic: simp only [hom_ext_iff, Functor.map_comp, comp_f] at h h' h'' ⊢
state_before: case h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.6113, u_1} C
inst✝¹ : Category.{?u.6117, u_2} D
inst✝ : Category.{?u.6121, u_3} E
F G : C ⥤ Karoubi D
φ : F ⟶ G
x✝¹ x✝ : Karoubi C
f : x✝¹ ⟶ x✝
h : (F.map f.f).f ≫ (φ.app x✝.X).f = (φ.app x✝¹.X).f ≫ (G.map f.f).f
h' : (F.map f.f).f ≫ (F.map x✝.p).f = (F.map f.f).f
h'' : (F.map x✝¹.p).f ≫ (F.map f.f).f = (F.map f.f).f
⊢ (F.map f.f).f ≫ (F.map x✝.p).f ≫ (φ.app x✝.X).f = ((F.map x✝¹.p).f ≫ (φ.app x✝¹.X).f) ≫ (G.map f.f).f
state_after: case h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.6113, u_1} C
inst✝¹ : Category.{?u.6117, u_2} D
inst✝ : Category.{?u.6121, u_3} E
F G : C ⥤ Karoubi D
φ : F ⟶ G
x✝¹ x✝ : Karoubi C
f : x✝¹ ⟶ x✝
h : (F.map f.f).f ≫ (φ.app x✝.X).f = (φ.app x✝¹.X).f ≫ (G.map f.f).f
h' : (F.map f.f).f ≫ (F.map x✝.p).f = (F.map f.f).f
h'' : (F.map x✝¹.p).f ≫ (F.map f.f).f = (F.map f.f).f
⊢ (F.map f.f).f ≫ (F.map x✝.p).f ≫ (φ.app x✝.X).f = (F.map x✝¹.p).f ≫ (F.map f.f).f ≫ (φ.app x✝.X).f
tactic: slice_rhs 2 3 => rw [← h]
state_before: case h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.6113, u_1} C
inst✝¹ : Category.{?u.6117, u_2} D
inst✝ : Category.{?u.6121, u_3} E
F G : C ⥤ Karoubi D
φ : F ⟶ G
x✝¹ x✝ : Karoubi C
f : x✝¹ ⟶ x✝
h : (F.map f.f).f ≫ (φ.app x✝.X).f = (φ.app x✝¹.X).f ≫ (G.map f.f).f
h' : (F.map f.f).f ≫ (F.map x✝.p).f = (F.map f.f).f
h'' : (F.map x✝¹.p).f ≫ (F.map f.f).f = (F.map f.f).f
⊢ (F.map f.f).f ≫ (F.map x✝.p).f ≫ (φ.app x✝.X).f = (F.map x✝¹.p).f ≫ (F.map f.f).f ≫ (φ.app x✝.X).f
state_after: case h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.6113, u_1} C
inst✝¹ : Category.{?u.6117, u_2} D
inst✝ : Category.{?u.6121, u_3} E
F G : C ⥤ Karoubi D
φ : F ⟶ G
x✝¹ x✝ : Karoubi C
f : x✝¹ ⟶ x✝
h : (F.map f.f).f ≫ (φ.app x✝.X).f = (φ.app x✝¹.X).f ≫ (G.map f.f).f
h' : (F.map f.f).f ≫ (F.map x✝.p).f = (F.map f.f).f
h'' : (F.map x✝¹.p).f ≫ (F.map f.f).f = (F.map f.f).f
⊢ (F.map f.f).f ≫ (φ.app x✝.X).f = (F.map x✝¹.p).f ≫ (F.map f.f).f ≫ (φ.app x✝.X).f
tactic: slice_lhs 1 2 => rw [h']
state_before: case h
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{?u.6113, u_1} C
inst✝¹ : Category.{?u.6117, u_2} D
inst✝ : Category.{?u.6121, u_3} E
F G : C ⥤ Karoubi D
φ : F ⟶ G
x✝¹ x✝ : Karoubi C
f : x✝¹ ⟶ x✝
h : (F.map f.f).f ≫ (φ.app x✝.X).f = (φ.app x✝¹.X).f ≫ (G.map f.f).f
h' : (F.map f.f).f ≫ (F.map x✝.p).f = (F.map f.f).f
h'' : (F.map x✝¹.p).f ≫ (F.map f.f).f = (F.map f.f).f
⊢ (F.map f.f).f ≫ (φ.app x✝.X).f = (F.map x✝¹.p).f ≫ (F.map f.f).f ≫ (φ.app x✝.X).f
state_after: no goals
tactic: slice_rhs 1 2 => rw [h'']