Theorem: CategoryTheory.Limits.colimitCoyonedaHomIsoLimit_π_apply
File: Mathlib/CategoryTheory/Limits/IndYoneda.lean

tactic: change ((colimitCoyonedaHomIsoLimit D F).hom ≫ (limit.π (D ⋙ F ⋙ uliftFunctor.{u₁}) (op i))) f = _
state_before: C : Type u₁
inst✝³ : Category.{u₂, u₁} C
I : Type v₁
inst✝² : Category.{v₂, v₁} I
D : Iᵒᵖ ⥤ C
F : C ⥤ Type u₂
inst✝¹ : HasColimit (D.rightOp ⋙ coyoneda)
inst✝ : HasLimitsOfShape Iᵒᵖ (Type (max u₁ u₂))
f : colimit (D.rightOp ⋙ coyoneda) ⟶ F
i : I
⊢ limit.π (D ⋙ F ⋙ uliftFunctor.{u₁, u₂}) { unop := i } ((colimitCoyonedaHomIsoLimit D F).hom f) =
    {
      down :=
        f.app (D.obj { unop := i })
          ((colimit.ι (D.rightOp ⋙ coyoneda) i).app (D.obj { unop := i }) (𝟙 (D.obj { unop := i }))) }
state_after: C : Type u₁
inst✝³ : Category.{u₂, u₁} C
I : Type v₁
inst✝² : Category.{v₂, v₁} I
D : Iᵒᵖ ⥤ C
F : C ⥤ Type u₂
inst✝¹ : HasColimit (D.rightOp ⋙ coyoneda)
inst✝ : HasLimitsOfShape Iᵒᵖ (Type (max u₁ u₂))
f : colimit (D.rightOp ⋙ coyoneda) ⟶ F
i : I
⊢ ((colimitCoyonedaHomIsoLimit D F).hom ≫ limit.π (D ⋙ F ⋙ uliftFunctor.{u₁, u₂}) { unop := i }) f =
    {
      down :=
        f.app (D.obj { unop := i })
          ((colimit.ι (D.rightOp ⋙ coyoneda) i).app (D.obj { unop := i }) (𝟙 (D.obj { unop := i }))) }

tactic: simp only [colimitCoyonedaHomIsoLimit, Iso.trans_hom, Category.assoc,
  HasLimit.isoOfNatIso_hom_π]
state_before: C : Type u₁
inst✝³ : Category.{u₂, u₁} C
I : Type v₁
inst✝² : Category.{v₂, v₁} I
D : Iᵒᵖ ⥤ C
F : C ⥤ Type u₂
inst✝¹ : HasColimit (D.rightOp ⋙ coyoneda)
inst✝ : HasLimitsOfShape Iᵒᵖ (Type (max u₁ u₂))
f : colimit (D.rightOp ⋙ coyoneda) ⟶ F
i : I
⊢ ((colimitCoyonedaHomIsoLimit D F).hom ≫ limit.π (D ⋙ F ⋙ uliftFunctor.{u₁, u₂}) { unop := i }) f =
    {
      down :=
        f.app (D.obj { unop := i })
          ((colimit.ι (D.rightOp ⋙ coyoneda) i).app (D.obj { unop := i }) (𝟙 (D.obj { unop := i }))) }
state_after: C : Type u₁
inst✝³ : Category.{u₂, u₁} C
I : Type v₁
inst✝² : Category.{v₂, v₁} I
D : Iᵒᵖ ⥤ C
F : C ⥤ Type u₂
inst✝¹ : HasColimit (D.rightOp ⋙ coyoneda)
inst✝ : HasLimitsOfShape Iᵒᵖ (Type (max u₁ u₂))
f : colimit (D.rightOp ⋙ coyoneda) ⟶ F
i : I
⊢ ((colimitHomIsoLimitYoneda (D.rightOp ⋙ coyoneda) F).hom ≫
        limit.π ((D.rightOp ⋙ coyoneda).op ⋙ yoneda.obj F) { unop := i } ≫
          (isoWhiskerLeft (D ⋙ Prod.sectl C F) (coyonedaLemma C)).hom.app { unop := i })
      f =
    {
      down :=
        f.app (D.obj { unop := i })
          ((colimit.ι (D.rightOp ⋙ coyoneda) i).app (D.obj { unop := i }) (𝟙 (D.obj { unop := i }))) }

tactic: rw [← Category.assoc, colimitHomIsoLimitYoneda_hom_comp_π]
state_before: C : Type u₁
inst✝³ : Category.{u₂, u₁} C
I : Type v₁
inst✝² : Category.{v₂, v₁} I
D : Iᵒᵖ ⥤ C
F : C ⥤ Type u₂
inst✝¹ : HasColimit (D.rightOp ⋙ coyoneda)
inst✝ : HasLimitsOfShape Iᵒᵖ (Type (max u₁ u₂))
f : colimit (D.rightOp ⋙ coyoneda) ⟶ F
i : I
⊢ ((colimitHomIsoLimitYoneda (D.rightOp ⋙ coyoneda) F).hom ≫
        limit.π ((D.rightOp ⋙ coyoneda).op ⋙ yoneda.obj F) { unop := i } ≫
          (isoWhiskerLeft (D ⋙ Prod.sectl C F) (coyonedaLemma C)).hom.app { unop := i })
      f =
    {
      down :=
        f.app (D.obj { unop := i })
          ((colimit.ι (D.rightOp ⋙ coyoneda) i).app (D.obj { unop := i }) (𝟙 (D.obj { unop := i }))) }
state_after: C : Type u₁
inst✝³ : Category.{u₂, u₁} C
I : Type v₁
inst✝² : Category.{v₂, v₁} I
D : Iᵒᵖ ⥤ C
F : C ⥤ Type u₂
inst✝¹ : HasColimit (D.rightOp ⋙ coyoneda)
inst✝ : HasLimitsOfShape Iᵒᵖ (Type (max u₁ u₂))
f : colimit (D.rightOp ⋙ coyoneda) ⟶ F
i : I
⊢ ((coyoneda.map (colimit.ι (D.rightOp ⋙ coyoneda) i).op).app F ≫
        (isoWhiskerLeft (D ⋙ Prod.sectl C F) (coyonedaLemma C)).hom.app { unop := i })
      f =
    {
      down :=
        f.app (D.obj { unop := i })
          ((colimit.ι (D.rightOp ⋙ coyoneda) i).app (D.obj { unop := i }) (𝟙 (D.obj { unop := i }))) }

tactic: dsimp [coyonedaLemma, types_comp_apply]
state_before: C : Type u₁
inst✝³ : Category.{u₂, u₁} C
I : Type v₁
inst✝² : Category.{v₂, v₁} I
D : Iᵒᵖ ⥤ C
F : C ⥤ Type u₂
inst✝¹ : HasColimit (D.rightOp ⋙ coyoneda)
inst✝ : HasLimitsOfShape Iᵒᵖ (Type (max u₁ u₂))
f : colimit (D.rightOp ⋙ coyoneda) ⟶ F
i : I
⊢ ((coyoneda.map (colimit.ι (D.rightOp ⋙ coyoneda) i).op).app F ≫
        (isoWhiskerLeft (D ⋙ Prod.sectl C F) (coyonedaLemma C)).hom.app { unop := i })
      f =
    {
      down :=
        f.app (D.obj { unop := i })
          ((colimit.ι (D.rightOp ⋙ coyoneda) i).app (D.obj { unop := i }) (𝟙 (D.obj { unop := i }))) }
state_after: C : Type u₁
inst✝³ : Category.{u₂, u₁} C
I : Type v₁
inst✝² : Category.{v₂, v₁} I
D : Iᵒᵖ ⥤ C
F : C ⥤ Type u₂
inst✝¹ : HasColimit (D.rightOp ⋙ coyoneda)
inst✝ : HasLimitsOfShape Iᵒᵖ (Type (max u₁ u₂))
f : colimit (D.rightOp ⋙ coyoneda) ⟶ F
i : I
⊢ Equiv.ulift.symm (coyonedaEquiv (colimit.ι (D.rightOp ⋙ coyoneda) i ≫ f)) =
    {
      down :=
        f.app (D.obj { unop := i })
          ((colimit.ι (D.rightOp ⋙ coyoneda) i).app (D.obj { unop := i }) (𝟙 (D.obj { unop := i }))) }

tactic: erw [coyonedaEquiv_comp, coyonedaEquiv_apply]
state_before: C : Type u₁
inst✝³ : Category.{u₂, u₁} C
I : Type v₁
inst✝² : Category.{v₂, v₁} I
D : Iᵒᵖ ⥤ C
F : C ⥤ Type u₂
inst✝¹ : HasColimit (D.rightOp ⋙ coyoneda)
inst✝ : HasLimitsOfShape Iᵒᵖ (Type (max u₁ u₂))
f : colimit (D.rightOp ⋙ coyoneda) ⟶ F
i : I
⊢ Equiv.ulift.symm (coyonedaEquiv (colimit.ι (D.rightOp ⋙ coyoneda) i ≫ f)) =
    {
      down :=
        f.app (D.obj { unop := i })
          ((colimit.ι (D.rightOp ⋙ coyoneda) i).app (D.obj { unop := i }) (𝟙 (D.obj { unop := i }))) }
state_after: C : Type u₁
inst✝³ : Category.{u₂, u₁} C
I : Type v₁
inst✝² : Category.{v₂, v₁} I
D : Iᵒᵖ ⥤ C
F : C ⥤ Type u₂
inst✝¹ : HasColimit (D.rightOp ⋙ coyoneda)
inst✝ : HasLimitsOfShape Iᵒᵖ (Type (max u₁ u₂))
f : colimit (D.rightOp ⋙ coyoneda) ⟶ F
i : I
⊢ Equiv.ulift.symm
      (f.app (D.obj { unop := i })
        ((colimit.ι (D.rightOp ⋙ coyoneda) i).app (D.obj { unop := i }) (𝟙 (D.obj { unop := i })))) =
    {
      down :=
        f.app (D.obj { unop := i })
          ((colimit.ι (D.rightOp ⋙ coyoneda) i).app (D.obj { unop := i }) (𝟙 (D.obj { unop := i }))) }

tactic: rfl
state_before: C : Type u₁
inst✝³ : Category.{u₂, u₁} C
I : Type v₁
inst✝² : Category.{v₂, v₁} I
D : Iᵒᵖ ⥤ C
F : C ⥤ Type u₂
inst✝¹ : HasColimit (D.rightOp ⋙ coyoneda)
inst✝ : HasLimitsOfShape Iᵒᵖ (Type (max u₁ u₂))
f : colimit (D.rightOp ⋙ coyoneda) ⟶ F
i : I
⊢ Equiv.ulift.symm
      (f.app (D.obj { unop := i })
        ((colimit.ι (D.rightOp ⋙ coyoneda) i).app (D.obj { unop := i }) (𝟙 (D.obj { unop := i })))) =
    {
      down :=
        f.app (D.obj { unop := i })
          ((colimit.ι (D.rightOp ⋙ coyoneda) i).app (D.obj { unop := i }) (𝟙 (D.obj { unop := i }))) }
state_after: no goals