Theorem: CategoryTheory.CategoryOfElements.fromCostructuredArrow_obj_fst
File: Mathlib/CategoryTheory/Elements.lean

Proof steps:
state_before: C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ Type w
F : Cᵒᵖ ⥤ Type v
X Y : (CostructuredArrow yoneda F)ᵒᵖ
f : X ⟶ Y
⊢ F.map f.unop.left.op ((fun X => ⟨op (unop X).left, yonedaEquiv.toFun (unop X).hom⟩) X).snd =
    ((fun X => ⟨op (unop X).left, yonedaEquiv.toFun (unop X).hom⟩) Y).snd
state_after: case h.e'_3.h
C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ Type w
F : Cᵒᵖ ⥤ Type v
X Y : (CostructuredArrow yoneda F)ᵒᵖ
f : X ⟶ Y
e_1✝ :
  F.obj ((fun X => ⟨op (unop X).left, yonedaEquiv.toFun (unop X).hom⟩) Y).fst =
    ((Functor.fromPUnit F).obj (unop X).right).obj (op (unop Y).left)
⊢ ((fun X => ⟨op (unop X).left, yonedaEquiv.toFun (unop X).hom⟩) Y).snd =
    ((yoneda.obj (unop X).left).map f.unop.left.op ≫ (unop X).hom.app (op (unop Y).left)) (𝟙 (unop (op (unop X).left)))
tactic: convert (congr_fun ((unop X).hom.naturality f.unop.left.op) (𝟙 _)).symm
state_before: case h.e'_3.h
C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ Type w
F : Cᵒᵖ ⥤ Type v
X Y : (CostructuredArrow yoneda F)ᵒᵖ
f : X ⟶ Y
e_1✝ :
  F.obj ((fun X => ⟨op (unop X).left, yonedaEquiv.toFun (unop X).hom⟩) Y).fst =
    ((Functor.fromPUnit F).obj (unop X).right).obj (op (unop Y).left)
⊢ ((fun X => ⟨op (unop X).left, yonedaEquiv.toFun (unop X).hom⟩) Y).snd =
    ((yoneda.obj (unop X).left).map f.unop.left.op ≫ (unop X).hom.app (op (unop Y).left)) (𝟙 (unop (op (unop X).left)))
state_after: case h.e'_3.h
C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ Type w
F : Cᵒᵖ ⥤ Type v
X Y : (CostructuredArrow yoneda F)ᵒᵖ
f : X ⟶ Y
e_1✝ :
  F.obj ((fun X => ⟨op (unop X).left, yonedaEquiv.toFun (unop X).hom⟩) Y).fst =
    ((Functor.fromPUnit F).obj (unop X).right).obj (op (unop Y).left)
⊢ (unop Y).hom.app (op (unop Y).left) (𝟙 (unop Y).left) = (unop X).hom.app (op (unop Y).left) f.unop.left
tactic: simp only [Equiv.toFun_as_coe, Quiver.Hom.unop_op, yonedaEquiv_apply, types_comp_apply,
        Category.comp_id, yoneda_obj_map]
state_before: case h.e'_3.h
C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ Type w
F : Cᵒᵖ ⥤ Type v
X Y : (CostructuredArrow yoneda F)ᵒᵖ
f : X ⟶ Y
e_1✝ :
  F.obj ((fun X => ⟨op (unop X).left, yonedaEquiv.toFun (unop X).hom⟩) Y).fst =
    ((Functor.fromPUnit F).obj (unop X).right).obj (op (unop Y).left)
⊢ (unop Y).hom.app (op (unop Y).left) (𝟙 (unop Y).left) = (unop X).hom.app (op (unop Y).left) f.unop.left
state_after: case h.e'_3.h
C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ Type w
F : Cᵒᵖ ⥤ Type v
X Y : (CostructuredArrow yoneda F)ᵒᵖ
f : X ⟶ Y
e_1✝ :
  F.obj ((fun X => ⟨op (unop X).left, yonedaEquiv.toFun (unop X).hom⟩) Y).fst =
    ((Functor.fromPUnit F).obj (unop X).right).obj (op (unop Y).left)
this : yoneda.map f.unop.left ≫ (unop X).hom = (unop Y).hom
⊢ (unop Y).hom.app (op (unop Y).left) (𝟙 (unop Y).left) = (unop X).hom.app (op (unop Y).left) f.unop.left
tactic: have : yoneda.map f.unop.left ≫ (unop X).hom = (unop Y).hom := by
        convert f.unop.3
state_before: case h.e'_3.h
C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ Type w
F : Cᵒᵖ ⥤ Type v
X Y : (CostructuredArrow yoneda F)ᵒᵖ
f : X ⟶ Y
e_1✝ :
  F.obj ((fun X => ⟨op (unop X).left, yonedaEquiv.toFun (unop X).hom⟩) Y).fst =
    ((Functor.fromPUnit F).obj (unop X).right).obj (op (unop Y).left)
this : yoneda.map f.unop.left ≫ (unop X).hom = (unop Y).hom
⊢ (unop Y).hom.app (op (unop Y).left) (𝟙 (unop Y).left) = (unop X).hom.app (op (unop Y).left) f.unop.left
state_after: case h.e'_3.h
C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ Type w
F : Cᵒᵖ ⥤ Type v
X Y : (CostructuredArrow yoneda F)ᵒᵖ
f : X ⟶ Y
e_1✝ :
  F.obj ((fun X => ⟨op (unop X).left, yonedaEquiv.toFun (unop X).hom⟩) Y).fst =
    ((Functor.fromPUnit F).obj (unop X).right).obj (op (unop Y).left)
this : yoneda.map f.unop.left ≫ (unop X).hom = (unop Y).hom
⊢ (yoneda.map f.unop.left ≫ (unop X).hom).app (op (unop Y).left) (𝟙 (unop Y).left) =
    (unop X).hom.app (op (unop Y).left) f.unop.left
tactic: erw [← this]
state_before: case h.e'_3.h
C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ Type w
F : Cᵒᵖ ⥤ Type v
X Y : (CostructuredArrow yoneda F)ᵒᵖ
f : X ⟶ Y
e_1✝ :
  F.obj ((fun X => ⟨op (unop X).left, yonedaEquiv.toFun (unop X).hom⟩) Y).fst =
    ((Functor.fromPUnit F).obj (unop X).right).obj (op (unop Y).left)
this : yoneda.map f.unop.left ≫ (unop X).hom = (unop Y).hom
⊢ (yoneda.map f.unop.left ≫ (unop X).hom).app (op (unop Y).left) (𝟙 (unop Y).left) =
    (unop X).hom.app (op (unop Y).left) f.unop.left
state_after: case h.e'_3.h
C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ Type w
F : Cᵒᵖ ⥤ Type v
X Y : (CostructuredArrow yoneda F)ᵒᵖ
f : X ⟶ Y
e_1✝ :
  F.obj ((fun X => ⟨op (unop X).left, yonedaEquiv.toFun (unop X).hom⟩) Y).fst =
    ((Functor.fromPUnit F).obj (unop X).right).obj (op (unop Y).left)
this : yoneda.map f.unop.left ≫ (unop X).hom = (unop Y).hom
⊢ (unop X).hom.app (op (unop Y).left) (𝟙 (unop Y).left ≫ f.unop.left) = (unop X).hom.app (op (unop Y).left) f.unop.left
tactic: simp only [yoneda_map_app, FunctorToTypes.comp]
state_before: case h.e'_3.h
C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ Type w
F : Cᵒᵖ ⥤ Type v
X Y : (CostructuredArrow yoneda F)ᵒᵖ
f : X ⟶ Y
e_1✝ :
  F.obj ((fun X => ⟨op (unop X).left, yonedaEquiv.toFun (unop X).hom⟩) Y).fst =
    ((Functor.fromPUnit F).obj (unop X).right).obj (op (unop Y).left)
this : yoneda.map f.unop.left ≫ (unop X).hom = (unop Y).hom
⊢ (unop X).hom.app (op (unop Y).left) (𝟙 (unop Y).left ≫ f.unop.left) = (unop X).hom.app (op (unop Y).left) f.unop.left
state_after: no goals
tactic: erw [Category.id_comp]