Theorem: CategoryTheory.whiskeringLeft_map_app_app
File: Mathlib/CategoryTheory/Whiskering.lean

Proof steps:
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
E : Type u₃
inst✝ : Category.{v₃, u₃} E
X✝ Y✝ : C ⥤ D
τ : X✝ ⟶ Y✝
H : D ⥤ E
X Y : C
f : X ⟶ Y
⊢ (((fun F => { obj := fun G => F ⋙ G, map := fun {X Y} α => whiskerLeft F α, map_id := ⋯, map_comp := ⋯ }) X✝).obj
            H).map
        f ≫
      (fun c => H.map (τ.app c)) Y =
    (fun c => H.map (τ.app c)) X ≫
      (((fun F => { obj := fun G => F ⋙ G, map := fun {X Y} α => whiskerLeft F α, map_id := ⋯, map_comp := ⋯ }) Y✝).obj
            H).map
        f
state_after: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
E : Type u₃
inst✝ : Category.{v₃, u₃} E
X✝ Y✝ : C ⥤ D
τ : X✝ ⟶ Y✝
H : D ⥤ E
X Y : C
f : X ⟶ Y
⊢ H.map (X✝.map f) ≫ H.map (τ.app Y) = H.map (τ.app X) ≫ H.map (Y✝.map f)
tactic: dsimp
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
E : Type u₃
inst✝ : Category.{v₃, u₃} E
X✝ Y✝ : C ⥤ D
τ : X✝ ⟶ Y✝
H : D ⥤ E
X Y : C
f : X ⟶ Y
⊢ H.map (X✝.map f) ≫ H.map (τ.app Y) = H.map (τ.app X) ≫ H.map (Y✝.map f)
state_after: no goals
tactic: rw [← H.map_comp, ← H.map_comp, ← τ.naturality]
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
E : Type u₃
inst✝ : Category.{v₃, u₃} E
X✝ Y✝ : C ⥤ D
τ : X✝ ⟶ Y✝
X Y : D ⥤ E
f : X ⟶ Y
⊢ ((fun F => { obj := fun G => F ⋙ G, map := fun {X Y} α => whiskerLeft F α, map_id := ⋯, map_comp := ⋯ }) X✝).map f ≫
      (fun H => { app := fun c => H.map (τ.app c), naturality := ⋯ }) Y =
    (fun H => { app := fun c => H.map (τ.app c), naturality := ⋯ }) X ≫
      ((fun F => { obj := fun G => F ⋙ G, map := fun {X Y} α => whiskerLeft F α, map_id := ⋯, map_comp := ⋯ }) Y✝).map f
state_after: case w.h
C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
E : Type u₃
inst✝ : Category.{v₃, u₃} E
X✝ Y✝ : C ⥤ D
τ : X✝ ⟶ Y✝
X Y : D ⥤ E
f : X ⟶ Y
x✝ : C
⊢ (((fun F => { obj := fun G => F ⋙ G, map := fun {X Y} α => whiskerLeft F α, map_id := ⋯, map_comp := ⋯ }) X✝).map f ≫
          (fun H => { app := fun c => H.map (τ.app c), naturality := ⋯ }) Y).app
      x✝ =
    ((fun H => { app := fun c => H.map (τ.app c), naturality := ⋯ }) X ≫
          ((fun F => { obj := fun G => F ⋙ G, map := fun {X Y} α => whiskerLeft F α, map_id := ⋯, map_comp := ⋯ })
                Y✝).map
            f).app
      x✝
tactic: ext
state_before: case w.h
C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
E : Type u₃
inst✝ : Category.{v₃, u₃} E
X✝ Y✝ : C ⥤ D
τ : X✝ ⟶ Y✝
X Y : D ⥤ E
f : X ⟶ Y
x✝ : C
⊢ (((fun F => { obj := fun G => F ⋙ G, map := fun {X Y} α => whiskerLeft F α, map_id := ⋯, map_comp := ⋯ }) X✝).map f ≫
          (fun H => { app := fun c => H.map (τ.app c), naturality := ⋯ }) Y).app
      x✝ =
    ((fun H => { app := fun c => H.map (τ.app c), naturality := ⋯ }) X ≫
          ((fun F => { obj := fun G => F ⋙ G, map := fun {X Y} α => whiskerLeft F α, map_id := ⋯, map_comp := ⋯ })
                Y✝).map
            f).app
      x✝
state_after: case w.h
C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
E : Type u₃
inst✝ : Category.{v₃, u₃} E
X✝ Y✝ : C ⥤ D
τ : X✝ ⟶ Y✝
X Y : D ⥤ E
f : X ⟶ Y
x✝ : C
⊢ f.app (X✝.obj x✝) ≫ Y.map (τ.app x✝) = X.map (τ.app x✝) ≫ f.app (Y✝.obj x✝)
tactic: dsimp
state_before: case w.h
C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
E : Type u₃
inst✝ : Category.{v₃, u₃} E
X✝ Y✝ : C ⥤ D
τ : X✝ ⟶ Y✝
X Y : D ⥤ E
f : X ⟶ Y
x✝ : C
⊢ f.app (X✝.obj x✝) ≫ Y.map (τ.app x✝) = X.map (τ.app x✝) ≫ f.app (Y✝.obj x✝)
state_after: no goals
tactic: rw [f.naturality]