Theorem: CategoryTheory.Coyoneda.colimitCoconeIsColimit_desc
File: Mathlib/CategoryTheory/Limits/Yoneda.lean

Proof steps:
state_before: C : Type u
inst✝ : Category.{v, u} C
X : Cᵒᵖ
s : Cocone (coyoneda.obj X)
Y : C
⊢ (colimitCocone X).ι.app Y ≫ (fun s x => s.ι.app (unop X) (𝟙 (unop X))) s = s.ι.app Y
state_after: case h
C : Type u
inst✝ : Category.{v, u} C
X : Cᵒᵖ
s : Cocone (coyoneda.obj X)
Y : C
f : (coyoneda.obj X).obj Y
⊢ ((colimitCocone X).ι.app Y ≫ (fun s x => s.ι.app (unop X) (𝟙 (unop X))) s) f = s.ι.app Y f
tactic: funext f
state_before: case h
C : Type u
inst✝ : Category.{v, u} C
X : Cᵒᵖ
s : Cocone (coyoneda.obj X)
Y : C
f : (coyoneda.obj X).obj Y
⊢ ((colimitCocone X).ι.app Y ≫ (fun s x => s.ι.app (unop X) (𝟙 (unop X))) s) f = s.ι.app Y f
state_after: case h.e'_3.h
C : Type u
inst✝ : Category.{v, u} C
X : Cᵒᵖ
s : Cocone (coyoneda.obj X)
Y : C
f : (coyoneda.obj X).obj Y
e_1✝ : s.pt = ((Functor.const C).obj s.pt).obj (unop X)
⊢ s.ι.app Y f = ((coyoneda.obj X).map f ≫ s.ι.app Y) (𝟙 (unop X))
tactic: convert congr_fun (s.w f).symm (𝟙 (unop X))
state_before: case h.e'_3.h
C : Type u
inst✝ : Category.{v, u} C
X : Cᵒᵖ
s : Cocone (coyoneda.obj X)
Y : C
f : (coyoneda.obj X).obj Y
e_1✝ : s.pt = ((Functor.const C).obj s.pt).obj (unop X)
⊢ s.ι.app Y f = ((coyoneda.obj X).map f ≫ s.ι.app Y) (𝟙 (unop X))
state_after: no goals
tactic: simp only [coyoneda_obj_obj, Functor.const_obj_obj, types_comp_apply,
      coyoneda_obj_map, Category.id_comp]
state_before: C : Type u
inst✝ : Category.{v, u} C
X : Cᵒᵖ
s : Cocone (coyoneda.obj X)
m : (colimitCocone X).pt ⟶ s.pt
w : ∀ (j : C), (colimitCocone X).ι.app j ≫ m = s.ι.app j
⊢ m = (fun s x => s.ι.app (unop X) (𝟙 (unop X))) s
state_after: case h
C : Type u
inst✝ : Category.{v, u} C
X : Cᵒᵖ
s : Cocone (coyoneda.obj X)
m : (colimitCocone X).pt ⟶ s.pt
w : ∀ (j : C), (colimitCocone X).ι.app j ≫ m = s.ι.app j
⊢ ∀ (x : (colimitCocone X).pt), m x = (fun s x => s.ι.app (unop X) (𝟙 (unop X))) s x
tactic: apply funext
state_before: case h
C : Type u
inst✝ : Category.{v, u} C
X : Cᵒᵖ
s : Cocone (coyoneda.obj X)
m : (colimitCocone X).pt ⟶ s.pt
w : ∀ (j : C), (colimitCocone X).ι.app j ≫ m = s.ι.app j
⊢ ∀ (x : (colimitCocone X).pt), m x = (fun s x => s.ι.app (unop X) (𝟙 (unop X))) s x
state_after: case h.unit
C : Type u
inst✝ : Category.{v, u} C
X : Cᵒᵖ
s : Cocone (coyoneda.obj X)
m : (colimitCocone X).pt ⟶ s.pt
w : ∀ (j : C), (colimitCocone X).ι.app j ≫ m = s.ι.app j
⊢ m PUnit.unit = (fun s x => s.ι.app (unop X) (𝟙 (unop X))) s PUnit.unit
tactic: rintro ⟨⟩
state_before: case h.unit
C : Type u
inst✝ : Category.{v, u} C
X : Cᵒᵖ
s : Cocone (coyoneda.obj X)
m : (colimitCocone X).pt ⟶ s.pt
w : ∀ (j : C), (colimitCocone X).ι.app j ≫ m = s.ι.app j
⊢ m PUnit.unit = (fun s x => s.ι.app (unop X) (𝟙 (unop X))) s PUnit.unit
state_after: case h.unit
C : Type u
inst✝ : Category.{v, u} C
X : Cᵒᵖ
s : Cocone (coyoneda.obj X)
m : (colimitCocone X).pt ⟶ s.pt
w : ∀ (j : C), (colimitCocone X).ι.app j ≫ m = s.ι.app j
⊢ m PUnit.unit = s.ι.app (unop X) (𝟙 (unop X))
tactic: dsimp
state_before: case h.unit
C : Type u
inst✝ : Category.{v, u} C
X : Cᵒᵖ
s : Cocone (coyoneda.obj X)
m : (colimitCocone X).pt ⟶ s.pt
w : ∀ (j : C), (colimitCocone X).ι.app j ≫ m = s.ι.app j
⊢ m PUnit.unit = s.ι.app (unop X) (𝟙 (unop X))
state_after: case h.unit
C : Type u
inst✝ : Category.{v, u} C
X : Cᵒᵖ
s : Cocone (coyoneda.obj X)
m : (colimitCocone X).pt ⟶ s.pt
w : ∀ (j : C), (colimitCocone X).ι.app j ≫ m = s.ι.app j
⊢ m PUnit.unit = ((colimitCocone X).ι.app (unop X) ≫ m) (𝟙 (unop X))
tactic: rw [← w]
state_before: case h.unit
C : Type u
inst✝ : Category.{v, u} C
X : Cᵒᵖ
s : Cocone (coyoneda.obj X)
m : (colimitCocone X).pt ⟶ s.pt
w : ∀ (j : C), (colimitCocone X).ι.app j ≫ m = s.ι.app j
⊢ m PUnit.unit = ((colimitCocone X).ι.app (unop X) ≫ m) (𝟙 (unop X))
state_after: no goals
tactic: simp