Theorem: CategoryTheory.whiskeringRight_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✝ : D ⥤ E
τ : X✝ ⟶ Y✝
F : C ⥤ D
X Y : C
f : X ⟶ Y
⊢ (((fun H => { obj := fun F => F ⋙ H, map := fun {X Y} α => whiskerRight α H, map_id := ⋯, map_comp := ⋯ }) X✝).obj
            F).map
        f ≫
      (fun c => τ.app (F.obj c)) Y =
    (fun c => τ.app (F.obj c)) X ≫
      (((fun H => { obj := fun F => F ⋙ H, map := fun {X Y} α => whiskerRight α H, map_id := ⋯, map_comp := ⋯ }) Y✝).obj
            F).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✝ : D ⥤ E
τ : X✝ ⟶ Y✝
F : C ⥤ D
X Y : C
f : X ⟶ Y
⊢ X✝.map (F.map f) ≫ τ.app (F.obj Y) = τ.app (F.obj X) ≫ Y✝.map (F.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✝ : D ⥤ E
τ : X✝ ⟶ Y✝
F : C ⥤ D
X Y : C
f : X ⟶ Y
⊢ X✝.map (F.map f) ≫ τ.app (F.obj Y) = τ.app (F.obj X) ≫ Y✝.map (F.map f)
state_after: no goals
tactic: rw [τ.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✝ : D ⥤ E
τ : X✝ ⟶ Y✝
X Y : C ⥤ D
f : X ⟶ Y
⊢ ((fun H => { obj := fun F => F ⋙ H, map := fun {X Y} α => whiskerRight α H, map_id := ⋯, map_comp := ⋯ }) X✝).map f ≫
      (fun F => { app := fun c => τ.app (F.obj c), naturality := ⋯ }) Y =
    (fun F => { app := fun c => τ.app (F.obj c), naturality := ⋯ }) X ≫
      ((fun H => { obj := fun F => F ⋙ H, map := fun {X Y} α => whiskerRight α H, 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✝ : D ⥤ E
τ : X✝ ⟶ Y✝
X Y : C ⥤ D
f : X ⟶ Y
x✝ : C
⊢ (((fun H => { obj := fun F => F ⋙ H, map := fun {X Y} α => whiskerRight α H, map_id := ⋯, map_comp := ⋯ }) X✝).map f ≫
          (fun F => { app := fun c => τ.app (F.obj c), naturality := ⋯ }) Y).app
      x✝ =
    ((fun F => { app := fun c => τ.app (F.obj c), naturality := ⋯ }) X ≫
          ((fun H => { obj := fun F => F ⋙ H, map := fun {X Y} α => whiskerRight α H, 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✝ : D ⥤ E
τ : X✝ ⟶ Y✝
X Y : C ⥤ D
f : X ⟶ Y
x✝ : C
⊢ (((fun H => { obj := fun F => F ⋙ H, map := fun {X Y} α => whiskerRight α H, map_id := ⋯, map_comp := ⋯ }) X✝).map f ≫
          (fun F => { app := fun c => τ.app (F.obj c), naturality := ⋯ }) Y).app
      x✝ =
    ((fun F => { app := fun c => τ.app (F.obj c), naturality := ⋯ }) X ≫
          ((fun H => { obj := fun F => F ⋙ H, map := fun {X Y} α => whiskerRight α H, 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✝ : D ⥤ E
τ : X✝ ⟶ Y✝
X Y : C ⥤ D
f : X ⟶ Y
x✝ : C
⊢ X✝.map (f.app x✝) ≫ τ.app (Y.obj x✝) = τ.app (X.obj x✝) ≫ Y✝.map (f.app 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✝ : D ⥤ E
τ : X✝ ⟶ Y✝
X Y : C ⥤ D
f : X ⟶ Y
x✝ : C
⊢ X✝.map (f.app x✝) ≫ τ.app (Y.obj x✝) = τ.app (X.obj x✝) ≫ Y✝.map (f.app x✝)
state_after: no goals
tactic: rw [← NatTrans.naturality]