Theorem: CategoryTheory.bifunctorComp₁₂_map_app_app
File: Mathlib/CategoryTheory/Functor/Trifunctor.lean

Proof steps:
state_before: C₁ : Type u_1
C₂ : Type u_2
C₃ : Type u_3
C₄ : Type u_4
C₁₂ : Type u_5
C₂₃ : Type u_6
inst✝⁵ : Category.{?u.4909, u_1} C₁
inst✝⁴ : Category.{?u.4913, u_2} C₂
inst✝³ : Category.{?u.4917, u_3} C₃
inst✝² : Category.{?u.4921, u_4} C₄
inst✝¹ : Category.{?u.4925, u_5} C₁₂
inst✝ : Category.{?u.4929, u_6} C₂₃
F₁₂ : C₁ ⥤ C₂ ⥤ C₁₂
G : C₁₂ ⥤ C₃ ⥤ C₄
X₁ Y₁ : C₁
φ : X₁ ⟶ Y₁
X₂ Y₂ : C₂
ψ : X₂ ⟶ Y₂
⊢ ((fun X₁ => bifunctorComp₁₂Obj F₁₂ G X₁) X₁).map ψ ≫
      (fun X₂ => { app := fun X₃ => (G.map ((F₁₂.map φ).app X₂)).app X₃, naturality := ⋯ }) Y₂ =
    (fun X₂ => { app := fun X₃ => (G.map ((F₁₂.map φ).app X₂)).app X₃, naturality := ⋯ }) X₂ ≫
      ((fun X₁ => bifunctorComp₁₂Obj F₁₂ G X₁) Y₁).map ψ
state_after: case w.h
C₁ : Type u_1
C₂ : Type u_2
C₃ : Type u_3
C₄ : Type u_4
C₁₂ : Type u_5
C₂₃ : Type u_6
inst✝⁵ : Category.{?u.4909, u_1} C₁
inst✝⁴ : Category.{?u.4913, u_2} C₂
inst✝³ : Category.{?u.4917, u_3} C₃
inst✝² : Category.{?u.4921, u_4} C₄
inst✝¹ : Category.{?u.4925, u_5} C₁₂
inst✝ : Category.{?u.4929, u_6} C₂₃
F₁₂ : C₁ ⥤ C₂ ⥤ C₁₂
G : C₁₂ ⥤ C₃ ⥤ C₄
X₁ Y₁ : C₁
φ : X₁ ⟶ Y₁
X₂ Y₂ : C₂
ψ : X₂ ⟶ Y₂
X₃ : C₃
⊢ (((fun X₁ => bifunctorComp₁₂Obj F₁₂ G X₁) X₁).map ψ ≫
          (fun X₂ => { app := fun X₃ => (G.map ((F₁₂.map φ).app X₂)).app X₃, naturality := ⋯ }) Y₂).app
      X₃ =
    ((fun X₂ => { app := fun X₃ => (G.map ((F₁₂.map φ).app X₂)).app X₃, naturality := ⋯ }) X₂ ≫
          ((fun X₁ => bifunctorComp₁₂Obj F₁₂ G X₁) Y₁).map ψ).app
      X₃
tactic: ext X₃
state_before: case w.h
C₁ : Type u_1
C₂ : Type u_2
C₃ : Type u_3
C₄ : Type u_4
C₁₂ : Type u_5
C₂₃ : Type u_6
inst✝⁵ : Category.{?u.4909, u_1} C₁
inst✝⁴ : Category.{?u.4913, u_2} C₂
inst✝³ : Category.{?u.4917, u_3} C₃
inst✝² : Category.{?u.4921, u_4} C₄
inst✝¹ : Category.{?u.4925, u_5} C₁₂
inst✝ : Category.{?u.4929, u_6} C₂₃
F₁₂ : C₁ ⥤ C₂ ⥤ C₁₂
G : C₁₂ ⥤ C₃ ⥤ C₄
X₁ Y₁ : C₁
φ : X₁ ⟶ Y₁
X₂ Y₂ : C₂
ψ : X₂ ⟶ Y₂
X₃ : C₃
⊢ (((fun X₁ => bifunctorComp₁₂Obj F₁₂ G X₁) X₁).map ψ ≫
          (fun X₂ => { app := fun X₃ => (G.map ((F₁₂.map φ).app X₂)).app X₃, naturality := ⋯ }) Y₂).app
      X₃ =
    ((fun X₂ => { app := fun X₃ => (G.map ((F₁₂.map φ).app X₂)).app X₃, naturality := ⋯ }) X₂ ≫
          ((fun X₁ => bifunctorComp₁₂Obj F₁₂ G X₁) Y₁).map ψ).app
      X₃
state_after: case w.h
C₁ : Type u_1
C₂ : Type u_2
C₃ : Type u_3
C₄ : Type u_4
C₁₂ : Type u_5
C₂₃ : Type u_6
inst✝⁵ : Category.{?u.4909, u_1} C₁
inst✝⁴ : Category.{?u.4913, u_2} C₂
inst✝³ : Category.{?u.4917, u_3} C₃
inst✝² : Category.{?u.4921, u_4} C₄
inst✝¹ : Category.{?u.4925, u_5} C₁₂
inst✝ : Category.{?u.4929, u_6} C₂₃
F₁₂ : C₁ ⥤ C₂ ⥤ C₁₂
G : C₁₂ ⥤ C₃ ⥤ C₄
X₁ Y₁ : C₁
φ : X₁ ⟶ Y₁
X₂ Y₂ : C₂
ψ : X₂ ⟶ Y₂
X₃ : C₃
⊢ (G.map ((F₁₂.obj X₁).map ψ)).app X₃ ≫ (G.map ((F₁₂.map φ).app Y₂)).app X₃ =
    (G.map ((F₁₂.map φ).app X₂)).app X₃ ≫ (G.map ((F₁₂.obj Y₁).map ψ)).app X₃
tactic: dsimp
state_before: case w.h
C₁ : Type u_1
C₂ : Type u_2
C₃ : Type u_3
C₄ : Type u_4
C₁₂ : Type u_5
C₂₃ : Type u_6
inst✝⁵ : Category.{?u.4909, u_1} C₁
inst✝⁴ : Category.{?u.4913, u_2} C₂
inst✝³ : Category.{?u.4917, u_3} C₃
inst✝² : Category.{?u.4921, u_4} C₄
inst✝¹ : Category.{?u.4925, u_5} C₁₂
inst✝ : Category.{?u.4929, u_6} C₂₃
F₁₂ : C₁ ⥤ C₂ ⥤ C₁₂
G : C₁₂ ⥤ C₃ ⥤ C₄
X₁ Y₁ : C₁
φ : X₁ ⟶ Y₁
X₂ Y₂ : C₂
ψ : X₂ ⟶ Y₂
X₃ : C₃
⊢ (G.map ((F₁₂.obj X₁).map ψ)).app X₃ ≫ (G.map ((F₁₂.map φ).app Y₂)).app X₃ =
    (G.map ((F₁₂.map φ).app X₂)).app X₃ ≫ (G.map ((F₁₂.obj Y₁).map ψ)).app X₃
state_after: no goals
tactic: simp only [← NatTrans.comp_app, ← G.map_comp, NatTrans.naturality]