Theorem: CategoryTheory.Presheaf.compYonedaIsoYonedaCompLan.yonedaEquiv_ι_presheafHom
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
P : Cᵒᵖ ⥤ Type v₁
X : C
f : yoneda.obj X ⟶ P
⊢ yonedaEquiv (f ≫ presheafHom φ P) =
    (G.map f).app (Opposite.op (F.obj X))
      ((φ.app X).app (Opposite.op (F.obj X)) (𝟙 (Opposite.unop (Opposite.op (F.obj X)))))
state_after: case intro
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
P : Cᵒᵖ ⥤ Type v₁
X : C
x : P.obj (Opposite.op X)
⊢ yonedaEquiv (yonedaEquiv.symm x ≫ presheafHom φ P) =
    (G.map (yonedaEquiv.symm x)).app (Opposite.op (F.obj X))
      ((φ.app X).app (Opposite.op (F.obj X)) (𝟙 (Opposite.unop (Opposite.op (F.obj X)))))
tactic: obtain ⟨x, rfl⟩ := yonedaEquiv.symm.surjective f
state_before: case intro
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
P : Cᵒᵖ ⥤ Type v₁
X : C
x : P.obj (Opposite.op X)
⊢ yonedaEquiv (yonedaEquiv.symm x ≫ presheafHom φ P) =
    (G.map (yonedaEquiv.symm x)).app (Opposite.op (F.obj X))
      ((φ.app X).app (Opposite.op (F.obj X)) (𝟙 (Opposite.unop (Opposite.op (F.obj X)))))
state_after: case intro
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
P : Cᵒᵖ ⥤ Type v₁
X : C
x : P.obj (Opposite.op X)
⊢ yonedaEquiv
      ({
              pt :=
                { obj := fun X => (G.obj P).obj (F.op.obj X), map := fun {X Y} f => (G.obj P).map (F.op.map f),
                  map_id := ⋯, map_comp := ⋯ },
              ι := { app := fun x => coconeApp φ (Opposite.unop x), naturality := ⋯ } }.ι.app
        (Opposite.op (P.elementsMk (Opposite.op X) x))) =
    (G.map (yonedaEquiv.symm x)).app (Opposite.op (F.obj X))
      ((φ.app X).app (Opposite.op (F.obj X)) (𝟙 (Opposite.unop (Opposite.op (F.obj X)))))
tactic: erw [(colimitOfRepresentable P).fac _ (Opposite.op (P.elementsMk _ x))]
state_before: case intro
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
P : Cᵒᵖ ⥤ Type v₁
X : C
x : P.obj (Opposite.op X)
⊢ yonedaEquiv
      ({
              pt :=
                { obj := fun X => (G.obj P).obj (F.op.obj X), map := fun {X Y} f => (G.obj P).map (F.op.map f),
                  map_id := ⋯, map_comp := ⋯ },
              ι := { app := fun x => coconeApp φ (Opposite.unop x), naturality := ⋯ } }.ι.app
        (Opposite.op (P.elementsMk (Opposite.op X) x))) =
    (G.map (yonedaEquiv.symm x)).app (Opposite.op (F.obj X))
      ((φ.app X).app (Opposite.op (F.obj X)) (𝟙 (Opposite.unop (Opposite.op (F.obj X)))))
state_after: case intro
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
P : Cᵒᵖ ⥤ Type v₁
X : C
x : P.obj (Opposite.op X)
⊢ yonedaEquiv
      (yonedaEquiv.symm
        ((G.map (yonedaEquiv.symm x)).app (F.op.obj (Opposite.op X))
          ((φ.app X).app (F.op.obj (Opposite.op X)) (𝟙 (Opposite.unop (F.op.obj (Opposite.op X))))))) =
    (G.map (yonedaEquiv.symm x)).app (Opposite.op (F.obj X)) ((φ.app X).app (Opposite.op (F.obj X)) (𝟙 (F.obj X)))
tactic: dsimp only [coconeApp]
state_before: case intro
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
P : Cᵒᵖ ⥤ Type v₁
X : C
x : P.obj (Opposite.op X)
⊢ yonedaEquiv
      (yonedaEquiv.symm
        ((G.map (yonedaEquiv.symm x)).app (F.op.obj (Opposite.op X))
          ((φ.app X).app (F.op.obj (Opposite.op X)) (𝟙 (Opposite.unop (F.op.obj (Opposite.op X))))))) =
    (G.map (yonedaEquiv.symm x)).app (Opposite.op (F.obj X)) ((φ.app X).app (Opposite.op (F.obj X)) (𝟙 (F.obj X)))
state_after: no goals
tactic: apply Equiv.apply_symm_apply