Theorem: CategoryTheory.Functor.pointwiseLeftKanExtensionUnit_app
File: Mathlib/CategoryTheory/Functor/KanExtension/Pointwise.lean

Proof steps:
state_before: C : Type u_1
D : Type u_2
H : Type u_3
inst✝³ : Category.{?u.108266, u_1} C
inst✝² : Category.{?u.108270, u_2} D
inst✝¹ : Category.{?u.108274, u_3} H
L : C ⥤ D
F : C ⥤ H
inst✝ : L.HasPointwiseLeftKanExtension F
X₁ X₂ : C
f : X₁ ⟶ X₂
⊢ F.map f ≫ (fun X => colimit.ι (CostructuredArrow.proj L (L.obj X) ⋙ F) (CostructuredArrow.mk (𝟙 (L.obj X)))) X₂ =
    (fun X => colimit.ι (CostructuredArrow.proj L (L.obj X) ⋙ F) (CostructuredArrow.mk (𝟙 (L.obj X)))) X₁ ≫
      (L ⋙ L.pointwiseLeftKanExtension F).map f
state_after: C : Type u_1
D : Type u_2
H : Type u_3
inst✝³ : Category.{?u.108266, u_1} C
inst✝² : Category.{?u.108270, u_2} D
inst✝¹ : Category.{?u.108274, u_3} H
L : C ⥤ D
F : C ⥤ H
inst✝ : L.HasPointwiseLeftKanExtension F
X₁ X₂ : C
f : X₁ ⟶ X₂
⊢ F.map f ≫ colimit.ι (CostructuredArrow.proj L (L.obj X₂) ⋙ F) (CostructuredArrow.mk (𝟙 (L.obj X₂))) =
    colimit.ι (CostructuredArrow.proj L (L.obj X₂) ⋙ F) (CostructuredArrow.mk (𝟙 (L.obj X₁) ≫ L.map f))
tactic: simp only [comp_obj, pointwiseLeftKanExtension_obj, comp_map,
      pointwiseLeftKanExtension_map, colimit.ι_desc, CostructuredArrow.map_mk]
state_before: C : Type u_1
D : Type u_2
H : Type u_3
inst✝³ : Category.{?u.108266, u_1} C
inst✝² : Category.{?u.108270, u_2} D
inst✝¹ : Category.{?u.108274, u_3} H
L : C ⥤ D
F : C ⥤ H
inst✝ : L.HasPointwiseLeftKanExtension F
X₁ X₂ : C
f : X₁ ⟶ X₂
⊢ F.map f ≫ colimit.ι (CostructuredArrow.proj L (L.obj X₂) ⋙ F) (CostructuredArrow.mk (𝟙 (L.obj X₂))) =
    colimit.ι (CostructuredArrow.proj L (L.obj X₂) ⋙ F) (CostructuredArrow.mk (𝟙 (L.obj X₁) ≫ L.map f))
state_after: C : Type u_1
D : Type u_2
H : Type u_3
inst✝³ : Category.{?u.108266, u_1} C
inst✝² : Category.{?u.108270, u_2} D
inst✝¹ : Category.{?u.108274, u_3} H
L : C ⥤ D
F : C ⥤ H
inst✝ : L.HasPointwiseLeftKanExtension F
X₁ X₂ : C
f : X₁ ⟶ X₂
⊢ F.map f ≫ colimit.ι (CostructuredArrow.proj L (L.obj X₂) ⋙ F) (CostructuredArrow.mk (𝟙 (L.obj X₂))) =
    colimit.ι (CostructuredArrow.proj L (L.obj X₂) ⋙ F) (CostructuredArrow.mk (L.map f))
tactic: rw [id_comp]
state_before: C : Type u_1
D : Type u_2
H : Type u_3
inst✝³ : Category.{?u.108266, u_1} C
inst✝² : Category.{?u.108270, u_2} D
inst✝¹ : Category.{?u.108274, u_3} H
L : C ⥤ D
F : C ⥤ H
inst✝ : L.HasPointwiseLeftKanExtension F
X₁ X₂ : C
f : X₁ ⟶ X₂
⊢ F.map f ≫ colimit.ι (CostructuredArrow.proj L (L.obj X₂) ⋙ F) (CostructuredArrow.mk (𝟙 (L.obj X₂))) =
    colimit.ι (CostructuredArrow.proj L (L.obj X₂) ⋙ F) (CostructuredArrow.mk (L.map f))
state_after: C : Type u_1
D : Type u_2
H : Type u_3
inst✝³ : Category.{?u.108266, u_1} C
inst✝² : Category.{?u.108270, u_2} D
inst✝¹ : Category.{?u.108274, u_3} H
L : C ⥤ D
F : C ⥤ H
inst✝ : L.HasPointwiseLeftKanExtension F
X₁ X₂ : C
f : X₁ ⟶ X₂
φ : CostructuredArrow.mk (L.map f) ⟶ CostructuredArrow.mk (𝟙 (L.obj X₂)) := CostructuredArrow.homMk f ⋯
⊢ F.map f ≫ colimit.ι (CostructuredArrow.proj L (L.obj X₂) ⋙ F) (CostructuredArrow.mk (𝟙 (L.obj X₂))) =
    colimit.ι (CostructuredArrow.proj L (L.obj X₂) ⋙ F) (CostructuredArrow.mk (L.map f))
tactic: let φ : CostructuredArrow.mk (L.map f) ⟶ CostructuredArrow.mk (𝟙 (L.obj X₂)) :=
      CostructuredArrow.homMk f
state_before: C : Type u_1
D : Type u_2
H : Type u_3
inst✝³ : Category.{?u.108266, u_1} C
inst✝² : Category.{?u.108270, u_2} D
inst✝¹ : Category.{?u.108274, u_3} H
L : C ⥤ D
F : C ⥤ H
inst✝ : L.HasPointwiseLeftKanExtension F
X₁ X₂ : C
f : X₁ ⟶ X₂
φ : CostructuredArrow.mk (L.map f) ⟶ CostructuredArrow.mk (𝟙 (L.obj X₂)) := CostructuredArrow.homMk f ⋯
⊢ F.map f ≫ colimit.ι (CostructuredArrow.proj L (L.obj X₂) ⋙ F) (CostructuredArrow.mk (𝟙 (L.obj X₂))) =
    colimit.ι (CostructuredArrow.proj L (L.obj X₂) ⋙ F) (CostructuredArrow.mk (L.map f))
state_after: no goals
tactic: exact colimit.w (CostructuredArrow.proj L (L.obj X₂) ⋙ F) φ