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

tactic: refine Functor.ext ?_ ?_
state_before: C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ Type w
F : Cᵒᵖ ⥤ Type v
⊢ (fromCostructuredArrow F).rightOp ⋙ toCostructuredArrow F = 𝟭 (CostructuredArrow yoneda F)
state_after: case refine_1
C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ Type w
F : Cᵒᵖ ⥤ Type v
⊢ ∀ (X : CostructuredArrow yoneda F),
    ((fromCostructuredArrow F).rightOp ⋙ toCostructuredArrow F).obj X = (𝟭 (CostructuredArrow yoneda F)).obj X

case refine_2
C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ Type w
F : Cᵒᵖ ⥤ Type v
⊢ ∀ (X Y : CostructuredArrow yoneda F) (f : X ⟶ Y),
    ((fromCostructuredArrow F).rightOp ⋙ toCostructuredArrow F).map f =
      eqToHom ⋯ ≫ (𝟭 (CostructuredArrow yoneda F)).map f ≫ eqToHom ⋯

tactic: intro X
state_before: case refine_1
C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ Type w
F : Cᵒᵖ ⥤ Type v
⊢ ∀ (X : CostructuredArrow yoneda F),
    ((fromCostructuredArrow F).rightOp ⋙ toCostructuredArrow F).obj X = (𝟭 (CostructuredArrow yoneda F)).obj X
state_after: case refine_1
C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ Type w
F : Cᵒᵖ ⥤ Type v
X : CostructuredArrow yoneda F
⊢ ((fromCostructuredArrow F).rightOp ⋙ toCostructuredArrow F).obj X = (𝟭 (CostructuredArrow yoneda F)).obj X

tactic: cases' X with X_left X_right X_hom
state_before: case refine_1
C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ Type w
F : Cᵒᵖ ⥤ Type v
X : CostructuredArrow yoneda F
⊢ ((fromCostructuredArrow F).rightOp ⋙ toCostructuredArrow F).obj X = (𝟭 (CostructuredArrow yoneda F)).obj X
state_after: case refine_1.mk
C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ Type w
F : Cᵒᵖ ⥤ Type v
X_left : C
X_right : Discrete PUnit.{1}
X_hom : yoneda.obj X_left ⟶ (Functor.fromPUnit F).obj X_right
⊢ ((fromCostructuredArrow F).rightOp ⋙ toCostructuredArrow F).obj { left := X_left, right := X_right, hom := X_hom } =
    (𝟭 (CostructuredArrow yoneda F)).obj { left := X_left, right := X_right, hom := X_hom }

tactic: cases X_right
state_before: case refine_1.mk
C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ Type w
F : Cᵒᵖ ⥤ Type v
X_left : C
X_right : Discrete PUnit.{1}
X_hom : yoneda.obj X_left ⟶ (Functor.fromPUnit F).obj X_right
⊢ ((fromCostructuredArrow F).rightOp ⋙ toCostructuredArrow F).obj { left := X_left, right := X_right, hom := X_hom } =
    (𝟭 (CostructuredArrow yoneda F)).obj { left := X_left, right := X_right, hom := X_hom }
state_after: case refine_1.mk.mk
C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ Type w
F : Cᵒᵖ ⥤ Type v
X_left : C
as✝ : PUnit.{1}
X_hom : yoneda.obj X_left ⟶ (Functor.fromPUnit F).obj { as := as✝ }
⊢ ((fromCostructuredArrow F).rightOp ⋙ toCostructuredArrow F).obj
      { left := X_left, right := { as := as✝ }, hom := X_hom } =
    (𝟭 (CostructuredArrow yoneda F)).obj { left := X_left, right := { as := as✝ }, hom := X_hom }

tactic: simp only [Functor.id_obj, Functor.rightOp_obj, toCostructuredArrow_obj, Functor.comp_obj,
  CostructuredArrow.mk]
state_before: case refine_1.mk.mk
C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ Type w
F : Cᵒᵖ ⥤ Type v
X_left : C
as✝ : PUnit.{1}
X_hom : yoneda.obj X_left ⟶ (Functor.fromPUnit F).obj { as := as✝ }
⊢ ((fromCostructuredArrow F).rightOp ⋙ toCostructuredArrow F).obj
      { left := X_left, right := { as := as✝ }, hom := X_hom } =
    (𝟭 (CostructuredArrow yoneda F)).obj { left := X_left, right := { as := as✝ }, hom := X_hom }
state_after: case refine_1.mk.mk
C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ Type w
F : Cᵒᵖ ⥤ Type v
X_left : C
as✝ : PUnit.{1}
X_hom : yoneda.obj X_left ⟶ (Functor.fromPUnit F).obj { as := as✝ }
⊢ { left := ((fromCostructuredArrow F).obj { unop := { left := X_left, right := { as := as✝ }, hom := X_hom } }).1.unop,
      right := { as := PUnit.unit },
      hom :=
        yonedaEquiv.symm
          ((fromCostructuredArrow F).obj { unop := { left := X_left, right := { as := as✝ }, hom := X_hom } }).snd } =
    { left := X_left, right := { as := as✝ }, hom := X_hom }

tactic: congr
state_before: case refine_1.mk.mk
C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ Type w
F : Cᵒᵖ ⥤ Type v
X_left : C
as✝ : PUnit.{1}
X_hom : yoneda.obj X_left ⟶ (Functor.fromPUnit F).obj { as := as✝ }
⊢ { left := ((fromCostructuredArrow F).obj { unop := { left := X_left, right := { as := as✝ }, hom := X_hom } }).1.unop,
      right := { as := PUnit.unit },
      hom :=
        yonedaEquiv.symm
          ((fromCostructuredArrow F).obj { unop := { left := X_left, right := { as := as✝ }, hom := X_hom } }).snd } =
    { left := X_left, right := { as := as✝ }, hom := X_hom }
state_after: case refine_1.mk.mk.e_hom
C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ Type w
F : Cᵒᵖ ⥤ Type v
X_left : C
as✝ : PUnit.{1}
X_hom : yoneda.obj X_left ⟶ (Functor.fromPUnit F).obj { as := as✝ }
⊢ yonedaEquiv.symm
      ((fromCostructuredArrow F).obj { unop := { left := X_left, right := { as := as✝ }, hom := X_hom } }).snd =
    X_hom

tactic: ext x f
state_before: case refine_1.mk.mk.e_hom
C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ Type w
F : Cᵒᵖ ⥤ Type v
X_left : C
as✝ : PUnit.{1}
X_hom : yoneda.obj X_left ⟶ (Functor.fromPUnit F).obj { as := as✝ }
⊢ yonedaEquiv.symm
      ((fromCostructuredArrow F).obj { unop := { left := X_left, right := { as := as✝ }, hom := X_hom } }).snd =
    X_hom
state_after: case refine_1.mk.mk.e_hom.w.h.h
C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ Type w
F : Cᵒᵖ ⥤ Type v
X_left : C
as✝ : PUnit.{1}
X_hom : yoneda.obj X_left ⟶ (Functor.fromPUnit F).obj { as := as✝ }
x : Cᵒᵖ
f :
  (yoneda.obj
        ((fromCostructuredArrow F).obj { unop := { left := X_left, right := { as := as✝ }, hom := X_hom } }).1.unop).obj
    x
⊢ (yonedaEquiv.symm
          ((fromCostructuredArrow F).obj { unop := { left := X_left, right := { as := as✝ }, hom := X_hom } }).snd).app
      x f =
    X_hom.app x f

tactic: convert congr_fun (X_hom.naturality f.op).symm (𝟙 X_left)
state_before: case refine_1.mk.mk.e_hom.w.h.h
C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ Type w
F : Cᵒᵖ ⥤ Type v
X_left : C
as✝ : PUnit.{1}
X_hom : yoneda.obj X_left ⟶ (Functor.fromPUnit F).obj { as := as✝ }
x : Cᵒᵖ
f :
  (yoneda.obj
        ((fromCostructuredArrow F).obj { unop := { left := X_left, right := { as := as✝ }, hom := X_hom } }).1.unop).obj
    x
⊢ (yonedaEquiv.symm
          ((fromCostructuredArrow F).obj { unop := { left := X_left, right := { as := as✝ }, hom := X_hom } }).snd).app
      x f =
    X_hom.app x f
state_after: case h.e'_3.h
C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ Type w
F : Cᵒᵖ ⥤ Type v
X_left : C
as✝ : PUnit.{1}
X_hom : yoneda.obj X_left ⟶ (Functor.fromPUnit F).obj { as := as✝ }
x : Cᵒᵖ
f :
  (yoneda.obj
        ((fromCostructuredArrow F).obj { unop := { left := X_left, right := { as := as✝ }, hom := X_hom } }).1.unop).obj
    x
e_1✝ : F.obj x = ((Functor.fromPUnit F).obj { as := as✝ }).obj { unop := x.unop }
⊢ X_hom.app x f = ((yoneda.obj X_left).map (Quiver.Hom.op f) ≫ X_hom.app { unop := x.unop }) (𝟙 X_left)

tactic: simp
state_before: case h.e'_3.h
C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ Type w
F : Cᵒᵖ ⥤ Type v
X_left : C
as✝ : PUnit.{1}
X_hom : yoneda.obj X_left ⟶ (Functor.fromPUnit F).obj { as := as✝ }
x : Cᵒᵖ
f :
  (yoneda.obj
        ((fromCostructuredArrow F).obj { unop := { left := X_left, right := { as := as✝ }, hom := X_hom } }).1.unop).obj
    x
e_1✝ : F.obj x = ((Functor.fromPUnit F).obj { as := as✝ }).obj { unop := x.unop }
⊢ X_hom.app x f = ((yoneda.obj X_left).map (Quiver.Hom.op f) ≫ X_hom.app { unop := x.unop }) (𝟙 X_left)
state_after: no goals

tactic: aesop
state_before: case refine_2
C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ Type w
F : Cᵒᵖ ⥤ Type v
⊢ ∀ (X Y : CostructuredArrow yoneda F) (f : X ⟶ Y),
    ((fromCostructuredArrow F).rightOp ⋙ toCostructuredArrow F).map f =
      eqToHom ⋯ ≫ (𝟭 (CostructuredArrow yoneda F)).map f ≫ eqToHom ⋯
state_after: no goals