Theorem: CategoryTheory.Limits.Cocones.functoriality_obj_pt
File: Mathlib/CategoryTheory/Limits/Cones.lean

Proof steps:
state_before: J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u₃
inst✝¹ : Category.{v₃, u₃} C
D : Type u₄
inst✝ : Category.{v₄, u₄} D
F : J ⥤ C
G : C ⥤ D
A : Cocone F
⊢ ∀ ⦃X Y : J⦄ (f : X ⟶ Y),
    (F ⋙ G).map f ≫ (fun j => G.map (A.ι.app j)) Y = (fun j => G.map (A.ι.app j)) X ≫ ((const J).obj (G.obj A.pt)).map f
state_after: J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u₃
inst✝¹ : Category.{v₃, u₃} C
D : Type u₄
inst✝ : Category.{v₄, u₄} D
F : J ⥤ C
G : C ⥤ D
A : Cocone F
X✝ Y✝ : J
f✝ : X✝ ⟶ Y✝
⊢ (F ⋙ G).map f✝ ≫ (fun j => G.map (A.ι.app j)) Y✝ =
    (fun j => G.map (A.ι.app j)) X✝ ≫ ((const J).obj (G.obj A.pt)).map f✝
tactic: intros
state_before: J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u₃
inst✝¹ : Category.{v₃, u₃} C
D : Type u₄
inst✝ : Category.{v₄, u₄} D
F : J ⥤ C
G : C ⥤ D
A : Cocone F
X✝ Y✝ : J
f✝ : X✝ ⟶ Y✝
⊢ (F ⋙ G).map f✝ ≫ (fun j => G.map (A.ι.app j)) Y✝ =
    (fun j => G.map (A.ι.app j)) X✝ ≫ ((const J).obj (G.obj A.pt)).map f✝
state_after: J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u₃
inst✝¹ : Category.{v₃, u₃} C
D : Type u₄
inst✝ : Category.{v₄, u₄} D
F : J ⥤ C
G : C ⥤ D
A : Cocone F
X✝ Y✝ : J
f✝ : X✝ ⟶ Y✝
⊢ G.map (F.map f✝ ≫ A.ι.app Y✝) = (fun j => G.map (A.ι.app j)) X✝ ≫ ((const J).obj (G.obj A.pt)).map f✝
tactic: erw [← G.map_comp]
state_before: J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u₃
inst✝¹ : Category.{v₃, u₃} C
D : Type u₄
inst✝ : Category.{v₄, u₄} D
F : J ⥤ C
G : C ⥤ D
A : Cocone F
X✝ Y✝ : J
f✝ : X✝ ⟶ Y✝
⊢ G.map (F.map f✝ ≫ A.ι.app Y✝) = (fun j => G.map (A.ι.app j)) X✝ ≫ ((const J).obj (G.obj A.pt)).map f✝
state_after: no goals
tactic: aesop_cat
state_before: J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u₃
inst✝¹ : Category.{v₃, u₃} C
D : Type u₄
inst✝ : Category.{v₄, u₄} D
F : J ⥤ C
G : C ⥤ D
X✝ Y✝ : Cocone F
f : X✝ ⟶ Y✝
⊢ ∀ (j : J),
    ((fun A => { pt := G.obj A.pt, ι := { app := fun j => G.map (A.ι.app j), naturality := ⋯ } }) X✝).ι.app j ≫
        G.map f.hom =
      ((fun A => { pt := G.obj A.pt, ι := { app := fun j => G.map (A.ι.app j), naturality := ⋯ } }) Y✝).ι.app j
state_after: J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u₃
inst✝¹ : Category.{v₃, u₃} C
D : Type u₄
inst✝ : Category.{v₄, u₄} D
F : J ⥤ C
G : C ⥤ D
X✝ Y✝ : Cocone F
f : X✝ ⟶ Y✝
j✝ : J
⊢ ((fun A => { pt := G.obj A.pt, ι := { app := fun j => G.map (A.ι.app j), naturality := ⋯ } }) X✝).ι.app j✝ ≫
      G.map f.hom =
    ((fun A => { pt := G.obj A.pt, ι := { app := fun j => G.map (A.ι.app j), naturality := ⋯ } }) Y✝).ι.app j✝
tactic: intros
state_before: J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u₃
inst✝¹ : Category.{v₃, u₃} C
D : Type u₄
inst✝ : Category.{v₄, u₄} D
F : J ⥤ C
G : C ⥤ D
X✝ Y✝ : Cocone F
f : X✝ ⟶ Y✝
j✝ : J
⊢ ((fun A => { pt := G.obj A.pt, ι := { app := fun j => G.map (A.ι.app j), naturality := ⋯ } }) X✝).ι.app j✝ ≫
      G.map f.hom =
    ((fun A => { pt := G.obj A.pt, ι := { app := fun j => G.map (A.ι.app j), naturality := ⋯ } }) Y✝).ι.app j✝
state_after: no goals
tactic: rw [← Functor.map_comp, CoconeMorphism.w]