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

tactic: fapply Functor.ext
state_before: C : Type u
inst✝ : Category.{v, u} C
F : C ⥤ Type w
F₁ F₂ : Cᵒᵖ ⥤ Type v
α : F₁ ⟶ F₂
⊢ (map α).op ⋙ toCostructuredArrow F₂ = toCostructuredArrow F₁ ⋙ CostructuredArrow.map α
state_after: case h_obj
C : Type u
inst✝ : Category.{v, u} C
F : C ⥤ Type w
F₁ F₂ : Cᵒᵖ ⥤ Type v
α : F₁ ⟶ F₂
⊢ ∀ (X : F₁.Elementsᵒᵖ),
    ((map α).op ⋙ toCostructuredArrow F₂).obj X = (toCostructuredArrow F₁ ⋙ CostructuredArrow.map α).obj X

case h_map
C : Type u
inst✝ : Category.{v, u} C
F : C ⥤ Type w
F₁ F₂ : Cᵒᵖ ⥤ Type v
α : F₁ ⟶ F₂
⊢ autoParam
    (∀ (X Y : F₁.Elementsᵒᵖ) (f : X ⟶ Y),
      ((map α).op ⋙ toCostructuredArrow F₂).map f =
        eqToHom ⋯ ≫ (toCostructuredArrow F₁ ⋙ CostructuredArrow.map α).map f ≫ eqToHom ⋯)
    _auto✝

tactic: intro X
state_before: case h_obj
C : Type u
inst✝ : Category.{v, u} C
F : C ⥤ Type w
F₁ F₂ : Cᵒᵖ ⥤ Type v
α : F₁ ⟶ F₂
⊢ ∀ (X : F₁.Elementsᵒᵖ),
    ((map α).op ⋙ toCostructuredArrow F₂).obj X = (toCostructuredArrow F₁ ⋙ CostructuredArrow.map α).obj X
state_after: case h_obj
C : Type u
inst✝ : Category.{v, u} C
F : C ⥤ Type w
F₁ F₂ : Cᵒᵖ ⥤ Type v
α : F₁ ⟶ F₂
X : F₁.Elementsᵒᵖ
⊢ ((map α).op ⋙ toCostructuredArrow F₂).obj X = (toCostructuredArrow F₁ ⋙ CostructuredArrow.map α).obj X

tactic: simp only [CostructuredArrow.map_mk, toCostructuredArrow_obj, Functor.op_obj,
  Functor.comp_obj]
state_before: case h_obj
C : Type u
inst✝ : Category.{v, u} C
F : C ⥤ Type w
F₁ F₂ : Cᵒᵖ ⥤ Type v
α : F₁ ⟶ F₂
X : F₁.Elementsᵒᵖ
⊢ ((map α).op ⋙ toCostructuredArrow F₂).obj X = (toCostructuredArrow F₁ ⋙ CostructuredArrow.map α).obj X
state_after: case h_obj
C : Type u
inst✝ : Category.{v, u} C
F : C ⥤ Type w
F₁ F₂ : Cᵒᵖ ⥤ Type v
α : F₁ ⟶ F₂
X : F₁.Elementsᵒᵖ
⊢ CostructuredArrow.mk (yonedaEquiv.symm ((map α).obj X.unop).snd) =
    CostructuredArrow.mk (yonedaEquiv.symm X.unop.snd ≫ α)

tactic: congr
state_before: case h_obj
C : Type u
inst✝ : Category.{v, u} C
F : C ⥤ Type w
F₁ F₂ : Cᵒᵖ ⥤ Type v
α : F₁ ⟶ F₂
X : F₁.Elementsᵒᵖ
⊢ CostructuredArrow.mk (yonedaEquiv.symm ((map α).obj X.unop).snd) =
    CostructuredArrow.mk (yonedaEquiv.symm X.unop.snd ≫ α)
state_after: case h_obj.e_f
C : Type u
inst✝ : Category.{v, u} C
F : C ⥤ Type w
F₁ F₂ : Cᵒᵖ ⥤ Type v
α : F₁ ⟶ F₂
X : F₁.Elementsᵒᵖ
⊢ yonedaEquiv.symm ((map α).obj X.unop).snd = yonedaEquiv.symm X.unop.snd ≫ α

tactic: ext _ f
state_before: case h_obj.e_f
C : Type u
inst✝ : Category.{v, u} C
F : C ⥤ Type w
F₁ F₂ : Cᵒᵖ ⥤ Type v
α : F₁ ⟶ F₂
X : F₁.Elementsᵒᵖ
⊢ yonedaEquiv.symm ((map α).obj X.unop).snd = yonedaEquiv.symm X.unop.snd ≫ α
state_after: case h_obj.e_f.w.h.h
C : Type u
inst✝ : Category.{v, u} C
F : C ⥤ Type w
F₁ F₂ : Cᵒᵖ ⥤ Type v
α : F₁ ⟶ F₂
X : F₁.Elementsᵒᵖ
x✝ : Cᵒᵖ
f : (yoneda.obj ((map α).obj X.unop).1.unop).obj x✝
⊢ (yonedaEquiv.symm ((map α).obj X.unop).snd).app x✝ f = (yonedaEquiv.symm X.unop.snd ≫ α).app x✝ f

tactic: simpa using congr_fun (α.naturality f.op).symm (unop X).snd
state_before: case h_obj.e_f.w.h.h
C : Type u
inst✝ : Category.{v, u} C
F : C ⥤ Type w
F₁ F₂ : Cᵒᵖ ⥤ Type v
α : F₁ ⟶ F₂
X : F₁.Elementsᵒᵖ
x✝ : Cᵒᵖ
f : (yoneda.obj ((map α).obj X.unop).1.unop).obj x✝
⊢ (yonedaEquiv.symm ((map α).obj X.unop).snd).app x✝ f = (yonedaEquiv.symm X.unop.snd ≫ α).app x✝ f
state_after: no goals

tactic: simp [autoParam]
state_before: case h_map
C : Type u
inst✝ : Category.{v, u} C
F : C ⥤ Type w
F₁ F₂ : Cᵒᵖ ⥤ Type v
α : F₁ ⟶ F₂
⊢ autoParam
    (∀ (X Y : F₁.Elementsᵒᵖ) (f : X ⟶ Y),
      ((map α).op ⋙ toCostructuredArrow F₂).map f =
        eqToHom ⋯ ≫ (toCostructuredArrow F₁ ⋙ CostructuredArrow.map α).map f ≫ eqToHom ⋯)
    _auto✝
state_after: no goals