Theorem: CategoryTheory.Functor.pointwiseRightKanExtensionCounit_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.136944, u_1} C
inst✝² : Category.{?u.136948, u_2} D
inst✝¹ : Category.{?u.136952, u_3} H
L : C ⥤ D
F : C ⥤ H
inst✝ : L.HasPointwiseRightKanExtension F
X₁ X₂ : C
f : X₁ ⟶ X₂
⊢ (L ⋙ L.pointwiseRightKanExtension F).map f ≫
      (fun X => limit.π (StructuredArrow.proj (L.obj X) L ⋙ F) (StructuredArrow.mk (𝟙 (L.obj X)))) X₂ =
    (fun X => limit.π (StructuredArrow.proj (L.obj X) L ⋙ F) (StructuredArrow.mk (𝟙 (L.obj X)))) X₁ ≫ F.map f
state_after: C : Type u_1
D : Type u_2
H : Type u_3
inst✝³ : Category.{?u.136944, u_1} C
inst✝² : Category.{?u.136948, u_2} D
inst✝¹ : Category.{?u.136952, u_3} H
L : C ⥤ D
F : C ⥤ H
inst✝ : L.HasPointwiseRightKanExtension F
X₁ X₂ : C
f : X₁ ⟶ X₂
⊢ limit.π (StructuredArrow.proj (L.obj X₁) L ⋙ F) (StructuredArrow.mk (L.map f ≫ 𝟙 (L.obj X₂))) =
    limit.π (StructuredArrow.proj (L.obj X₁) L ⋙ F) (StructuredArrow.mk (𝟙 (L.obj X₁))) ≫ F.map f
tactic: simp only [comp_obj, pointwiseRightKanExtension_obj, comp_map,
      pointwiseRightKanExtension_map, limit.lift_π, StructuredArrow.map_mk]
state_before: C : Type u_1
D : Type u_2
H : Type u_3
inst✝³ : Category.{?u.136944, u_1} C
inst✝² : Category.{?u.136948, u_2} D
inst✝¹ : Category.{?u.136952, u_3} H
L : C ⥤ D
F : C ⥤ H
inst✝ : L.HasPointwiseRightKanExtension F
X₁ X₂ : C
f : X₁ ⟶ X₂
⊢ limit.π (StructuredArrow.proj (L.obj X₁) L ⋙ F) (StructuredArrow.mk (L.map f ≫ 𝟙 (L.obj X₂))) =
    limit.π (StructuredArrow.proj (L.obj X₁) L ⋙ F) (StructuredArrow.mk (𝟙 (L.obj X₁))) ≫ F.map f
state_after: C : Type u_1
D : Type u_2
H : Type u_3
inst✝³ : Category.{?u.136944, u_1} C
inst✝² : Category.{?u.136948, u_2} D
inst✝¹ : Category.{?u.136952, u_3} H
L : C ⥤ D
F : C ⥤ H
inst✝ : L.HasPointwiseRightKanExtension F
X₁ X₂ : C
f : X₁ ⟶ X₂
⊢ limit.π (StructuredArrow.proj (L.obj X₁) L ⋙ F) (StructuredArrow.mk (L.map f)) =
    limit.π (StructuredArrow.proj (L.obj X₁) L ⋙ F) (StructuredArrow.mk (𝟙 (L.obj X₁))) ≫ F.map f
tactic: rw [comp_id]
state_before: C : Type u_1
D : Type u_2
H : Type u_3
inst✝³ : Category.{?u.136944, u_1} C
inst✝² : Category.{?u.136948, u_2} D
inst✝¹ : Category.{?u.136952, u_3} H
L : C ⥤ D
F : C ⥤ H
inst✝ : L.HasPointwiseRightKanExtension F
X₁ X₂ : C
f : X₁ ⟶ X₂
⊢ limit.π (StructuredArrow.proj (L.obj X₁) L ⋙ F) (StructuredArrow.mk (L.map f)) =
    limit.π (StructuredArrow.proj (L.obj X₁) L ⋙ F) (StructuredArrow.mk (𝟙 (L.obj X₁))) ≫ F.map f
state_after: C : Type u_1
D : Type u_2
H : Type u_3
inst✝³ : Category.{?u.136944, u_1} C
inst✝² : Category.{?u.136948, u_2} D
inst✝¹ : Category.{?u.136952, u_3} H
L : C ⥤ D
F : C ⥤ H
inst✝ : L.HasPointwiseRightKanExtension F
X₁ X₂ : C
f : X₁ ⟶ X₂
φ : StructuredArrow.mk (𝟙 (L.obj X₁)) ⟶ StructuredArrow.mk (L.map f) := StructuredArrow.homMk f ⋯
⊢ limit.π (StructuredArrow.proj (L.obj X₁) L ⋙ F) (StructuredArrow.mk (L.map f)) =
    limit.π (StructuredArrow.proj (L.obj X₁) L ⋙ F) (StructuredArrow.mk (𝟙 (L.obj X₁))) ≫ F.map f
tactic: let φ : StructuredArrow.mk (𝟙 (L.obj X₁)) ⟶ StructuredArrow.mk (L.map f) :=
      StructuredArrow.homMk f
state_before: C : Type u_1
D : Type u_2
H : Type u_3
inst✝³ : Category.{?u.136944, u_1} C
inst✝² : Category.{?u.136948, u_2} D
inst✝¹ : Category.{?u.136952, u_3} H
L : C ⥤ D
F : C ⥤ H
inst✝ : L.HasPointwiseRightKanExtension F
X₁ X₂ : C
f : X₁ ⟶ X₂
φ : StructuredArrow.mk (𝟙 (L.obj X₁)) ⟶ StructuredArrow.mk (L.map f) := StructuredArrow.homMk f ⋯
⊢ limit.π (StructuredArrow.proj (L.obj X₁) L ⋙ F) (StructuredArrow.mk (L.map f)) =
    limit.π (StructuredArrow.proj (L.obj X₁) L ⋙ F) (StructuredArrow.mk (𝟙 (L.obj X₁))) ≫ F.map f
state_after: no goals
tactic: exact (limit.w (StructuredArrow.proj (L.obj X₁) L ⋙ F) φ).symm