Theorem: CategoryTheory.Presheaf.compYonedaIsoYonedaCompLan.natTrans_app_yoneda_obj
File: Mathlib/CategoryTheory/Limits/Presheaf.lean

Proof steps:
state_before: C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
ℰ : Type u₂
inst✝³ : Category.{v₁, u₂} ℰ
A✝ A : C ⥤ ℰ
inst✝² : yoneda.HasPointwiseLeftKanExtension A
D : Type u₂
inst✝¹ : Category.{v₁, u₂} D
F : C ⥤ D
inst✝ : ∀ (P : Cᵒᵖ ⥤ Type v₁), F.op.HasLeftKanExtension P
X✝ : C
G : (Cᵒᵖ ⥤ Type v₁) ⥤ Dᵒᵖ ⥤ Type v₁
φ : F ⋙ yoneda ⟶ yoneda ⋙ G
X : C
⊢ (natTrans φ).app (yoneda.obj X) = (compYonedaIsoYonedaCompLan F).inv.app X ≫ φ.app X
state_after: C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
ℰ : Type u₂
inst✝³ : Category.{v₁, u₂} ℰ
A✝ A : C ⥤ ℰ
inst✝² : yoneda.HasPointwiseLeftKanExtension A
D : Type u₂
inst✝¹ : Category.{v₁, u₂} D
F : C ⥤ D
inst✝ : ∀ (P : Cᵒᵖ ⥤ Type v₁), F.op.HasLeftKanExtension P
X✝ : C
G : (Cᵒᵖ ⥤ Type v₁) ⥤ Dᵒᵖ ⥤ Type v₁
φ : F ⋙ yoneda ⟶ yoneda ⋙ G
X : C
⊢ (F.op.lan.obj (yoneda.obj X)).descOfIsLeftKanExtension (F.op.lanUnit.app (yoneda.obj X)) (G.obj (yoneda.obj X))
      (presheafHom φ (yoneda.obj X)) =
    (compYonedaIsoYonedaCompLan F).inv.app X ≫ φ.app X
tactic: dsimp [natTrans]
state_before: C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
ℰ : Type u₂
inst✝³ : Category.{v₁, u₂} ℰ
A✝ A : C ⥤ ℰ
inst✝² : yoneda.HasPointwiseLeftKanExtension A
D : Type u₂
inst✝¹ : Category.{v₁, u₂} D
F : C ⥤ D
inst✝ : ∀ (P : Cᵒᵖ ⥤ Type v₁), F.op.HasLeftKanExtension P
X✝ : C
G : (Cᵒᵖ ⥤ Type v₁) ⥤ Dᵒᵖ ⥤ Type v₁
φ : F ⋙ yoneda ⟶ yoneda ⋙ G
X : C
⊢ (F.op.lan.obj (yoneda.obj X)).descOfIsLeftKanExtension (F.op.lanUnit.app (yoneda.obj X)) (G.obj (yoneda.obj X))
      (presheafHom φ (yoneda.obj X)) =
    (compYonedaIsoYonedaCompLan F).inv.app X ≫ φ.app X
state_after: case hγ
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
ℰ : Type u₂
inst✝³ : Category.{v₁, u₂} ℰ
A✝ A : C ⥤ ℰ
inst✝² : yoneda.HasPointwiseLeftKanExtension A
D : Type u₂
inst✝¹ : Category.{v₁, u₂} D
F : C ⥤ D
inst✝ : ∀ (P : Cᵒᵖ ⥤ Type v₁), F.op.HasLeftKanExtension P
X✝ : C
G : (Cᵒᵖ ⥤ Type v₁) ⥤ Dᵒᵖ ⥤ Type v₁
φ : F ⋙ yoneda ⟶ yoneda ⋙ G
X : C
⊢ F.op.lanUnit.app (yoneda.obj X) ≫
      whiskerLeft F.op
        ((F.op.lan.obj (yoneda.obj X)).descOfIsLeftKanExtension (F.op.lanUnit.app (yoneda.obj X)) (G.obj (yoneda.obj X))
          (presheafHom φ (yoneda.obj X))) =
    F.op.lanUnit.app (yoneda.obj X) ≫ whiskerLeft F.op ((compYonedaIsoYonedaCompLan F).inv.app X ≫ φ.app X)
tactic: apply (F.op.lan.obj (yoneda.obj X)).hom_ext_of_isLeftKanExtension (F.op.lanUnit.app _)
state_before: case hγ
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
ℰ : Type u₂
inst✝³ : Category.{v₁, u₂} ℰ
A✝ A : C ⥤ ℰ
inst✝² : yoneda.HasPointwiseLeftKanExtension A
D : Type u₂
inst✝¹ : Category.{v₁, u₂} D
F : C ⥤ D
inst✝ : ∀ (P : Cᵒᵖ ⥤ Type v₁), F.op.HasLeftKanExtension P
X✝ : C
G : (Cᵒᵖ ⥤ Type v₁) ⥤ Dᵒᵖ ⥤ Type v₁
φ : F ⋙ yoneda ⟶ yoneda ⋙ G
X : C
⊢ F.op.lanUnit.app (yoneda.obj X) ≫
      whiskerLeft F.op
        ((F.op.lan.obj (yoneda.obj X)).descOfIsLeftKanExtension (F.op.lanUnit.app (yoneda.obj X)) (G.obj (yoneda.obj X))
          (presheafHom φ (yoneda.obj X))) =
    F.op.lanUnit.app (yoneda.obj X) ≫ whiskerLeft F.op ((compYonedaIsoYonedaCompLan F).inv.app X ≫ φ.app X)
state_after: case hγ
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
ℰ : Type u₂
inst✝³ : Category.{v₁, u₂} ℰ
A✝ A : C ⥤ ℰ
inst✝² : yoneda.HasPointwiseLeftKanExtension A
D : Type u₂
inst✝¹ : Category.{v₁, u₂} D
F : C ⥤ D
inst✝ : ∀ (P : Cᵒᵖ ⥤ Type v₁), F.op.HasLeftKanExtension P
X✝ : C
G : (Cᵒᵖ ⥤ Type v₁) ⥤ Dᵒᵖ ⥤ Type v₁
φ : F ⋙ yoneda ⟶ yoneda ⋙ G
X : C
⊢ presheafHom φ (yoneda.obj X) =
    F.op.lanUnit.app (yoneda.obj X) ≫ whiskerLeft F.op ((compYonedaIsoYonedaCompLan F).inv.app X ≫ φ.app X)
tactic: rw [Functor.descOfIsLeftKanExtension_fac]
state_before: case hγ
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
ℰ : Type u₂
inst✝³ : Category.{v₁, u₂} ℰ
A✝ A : C ⥤ ℰ
inst✝² : yoneda.HasPointwiseLeftKanExtension A
D : Type u₂
inst✝¹ : Category.{v₁, u₂} D
F : C ⥤ D
inst✝ : ∀ (P : Cᵒᵖ ⥤ Type v₁), F.op.HasLeftKanExtension P
X✝ : C
G : (Cᵒᵖ ⥤ Type v₁) ⥤ Dᵒᵖ ⥤ Type v₁
φ : F ⋙ yoneda ⟶ yoneda ⋙ G
X : C
⊢ presheafHom φ (yoneda.obj X) =
    F.op.lanUnit.app (yoneda.obj X) ≫ whiskerLeft F.op ((compYonedaIsoYonedaCompLan F).inv.app X ≫ φ.app X)
state_after: case hγ.a
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
ℰ : Type u₂
inst✝³ : Category.{v₁, u₂} ℰ
A✝ A : C ⥤ ℰ
inst✝² : yoneda.HasPointwiseLeftKanExtension A
D : Type u₂
inst✝¹ : Category.{v₁, u₂} D
F : C ⥤ D
inst✝ : ∀ (P : Cᵒᵖ ⥤ Type v₁), F.op.HasLeftKanExtension P
X✝ : C
G : (Cᵒᵖ ⥤ Type v₁) ⥤ Dᵒᵖ ⥤ Type v₁
φ : F ⋙ yoneda ⟶ yoneda ⋙ G
X : C
⊢ yonedaEquiv (presheafHom φ (yoneda.obj X)) =
    yonedaEquiv
      (F.op.lanUnit.app (yoneda.obj X) ≫ whiskerLeft F.op ((compYonedaIsoYonedaCompLan F).inv.app X ≫ φ.app X))
tactic: apply yonedaEquiv.injective
state_before: case hγ.a
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
ℰ : Type u₂
inst✝³ : Category.{v₁, u₂} ℰ
A✝ A : C ⥤ ℰ
inst✝² : yoneda.HasPointwiseLeftKanExtension A
D : Type u₂
inst✝¹ : Category.{v₁, u₂} D
F : C ⥤ D
inst✝ : ∀ (P : Cᵒᵖ ⥤ Type v₁), F.op.HasLeftKanExtension P
X✝ : C
G : (Cᵒᵖ ⥤ Type v₁) ⥤ Dᵒᵖ ⥤ Type v₁
φ : F ⋙ yoneda ⟶ yoneda ⋙ G
X : C
⊢ yonedaEquiv (presheafHom φ (yoneda.obj X)) =
    yonedaEquiv
      (F.op.lanUnit.app (yoneda.obj X) ≫ whiskerLeft F.op ((compYonedaIsoYonedaCompLan F).inv.app X ≫ φ.app X))
state_after: case hγ.a
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
ℰ : Type u₂
inst✝³ : Category.{v₁, u₂} ℰ
A✝ A : C ⥤ ℰ
inst✝² : yoneda.HasPointwiseLeftKanExtension A
D : Type u₂
inst✝¹ : Category.{v₁, u₂} D
F : C ⥤ D
inst✝ : ∀ (P : Cᵒᵖ ⥤ Type v₁), F.op.HasLeftKanExtension P
X✝ : C
G : (Cᵒᵖ ⥤ Type v₁) ⥤ Dᵒᵖ ⥤ Type v₁
φ : F ⋙ yoneda ⟶ yoneda ⋙ G
X : C
⊢ (φ.app X).app (F.op.obj (Opposite.op X)) (𝟙 (Opposite.unop (F.op.obj (Opposite.op X)))) =
    yonedaEquiv
      (F.op.lanUnit.app (yoneda.obj X) ≫ whiskerLeft F.op ((compYonedaIsoYonedaCompLan F).inv.app X ≫ φ.app X))
tactic: rw [yonedaEquiv_presheafHom_yoneda_obj]
state_before: case hγ.a
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
ℰ : Type u₂
inst✝³ : Category.{v₁, u₂} ℰ
A✝ A : C ⥤ ℰ
inst✝² : yoneda.HasPointwiseLeftKanExtension A
D : Type u₂
inst✝¹ : Category.{v₁, u₂} D
F : C ⥤ D
inst✝ : ∀ (P : Cᵒᵖ ⥤ Type v₁), F.op.HasLeftKanExtension P
X✝ : C
G : (Cᵒᵖ ⥤ Type v₁) ⥤ Dᵒᵖ ⥤ Type v₁
φ : F ⋙ yoneda ⟶ yoneda ⋙ G
X : C
⊢ (φ.app X).app (F.op.obj (Opposite.op X)) (𝟙 (Opposite.unop (F.op.obj (Opposite.op X)))) =
    yonedaEquiv
      (F.op.lanUnit.app (yoneda.obj X) ≫ whiskerLeft F.op ((compYonedaIsoYonedaCompLan F).inv.app X ≫ φ.app X))
state_after: no goals
tactic: exact congr_arg _ (compYonedaIsoYonedaCompLan_inv_app_app_apply_eq_id F X).symm