-- Module: Mathlib.CategoryTheory.Presentable.Limits
Goal:
C : Type u
inst : Category.{v, u} C
K : Type u'
inst_1 : Category.{v', u'} K
F : K ⥤ Functor.{v, w', u, w' + 1} C (Type w')
c : Cone F
hc : (Y : C) → IsLimit (F := F ⋙ obj (evaluation C (Type w')) Y) (mapCone (obj (evaluation C (Type w')) Y) c)
κ : Cardinal.{w}
inst_2 : Fact κ.IsRegular
hK : HasCardinalLT (Arrow.{v', u'} K) κ
J : Type w
inst_3 : SmallCategory J
inst_4 : IsCardinalFiltered J κ
X : Functor.{w, v, w, u} J C
cX : Cocone X
hF : (k : K) → IsColimit ((F.obj k).mapCocone cX)
x : c.pt.obj cX.pt
this : IsFiltered J
y : (↑(F ⋙ obj (evaluation C (Type w')) cX.pt).sections : Type (max w' u'))
hy :
  (Equiv.symm (Types.isLimitEquivSections (hc cX.pt)) :
        (a : (↑(F ⋙ (evaluation C (Type w')).obj cX.pt).sections : Type (max w' u'))) →
          (((evaluation C (Type w')).obj cX.pt).mapCone c).pt)
      y =
    x
j₀ : J
z : (k : K) → (F.obj k).obj (X.obj j₀)
hz :
  ∀ (k : K),
    (↑y : (j : K) → (F ⋙ (evaluation C (Type w')).obj cX.pt).obj j) k =
      (ConcreteCategory.hom (FC := TypeCat.Fun) ((F.obj k).map (cX.ι.app j₀)) :
          (a : (fun (X : Type w') ↦ X) ((F.obj k).obj (X.obj j₀))) →
            (fun (X : Type w') ↦ X) ((F.obj k).obj (((const J).obj cX.pt).obj j₀)))
        (z k)
H :
  ∀ {k k' : K} (φ : k ⟶ k'),
    ∃ (j : J) (f : j₀ ⟶ j),
      Eq (α := (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j))
        ((ConcreteCategory.hom (FC := TypeCat.Fun) ((X ⋙ F.obj k').map f) :
              (a : (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j₀)) → (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j))
            ((ConcreteCategory.hom (FC := TypeCat.Fun) ((F.map φ).app (X.obj j₀)) :
                  (a : (fun (X : Type w') ↦ X) ((F.obj k).obj (X.obj j₀))) →
                    (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₀)))
                (z k) :
              (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₀))) :
          (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j))
        ((ConcreteCategory.hom (FC := TypeCat.Fun) ((X ⋙ F.obj k').map f) :
              (a : (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j₀)) → (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j))
            (z k') :
          (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j))
j : {k k' : K} → (φ : k ⟶ k') → J :=
  fun {k k' : K} (φ : k ⟶ k') ↦
    ⋯.choose (p := fun (j : J) ↦
      ∃ (f : j₀ ⟶ j),
        Eq (α := (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j))
          ((ConcreteCategory.hom (FC := TypeCat.Fun) ((X ⋙ F.obj k').map f) :
                (a : (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j₀)) → (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j))
              ((ConcreteCategory.hom (FC := TypeCat.Fun) ((F.map φ).app (X.obj j₀)) :
                    (a : (fun (X : Type w') ↦ X) ((F.obj k).obj (X.obj j₀))) →
                      (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₀)))
                  (z k) :
                (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₀))) :
            (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j))
          ((ConcreteCategory.hom (FC := TypeCat.Fun) ((X ⋙ F.obj k').map f) :
                (a : (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j₀)) → (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j))
              (z k') :
            (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j)))
g : {k k' : K} → (φ : k ⟶ k') → j₀ ⟶ j φ :=
  fun {k k' : K} (φ : k ⟶ k') ↦
    ⋯.choose (p :=
      fun
        (f :
          j₀ ⟶
            ⋯.choose (p := fun (j : J) ↦
              ∃ (f : j₀ ⟶ j),
                Eq (α := (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j))
                  ((ConcreteCategory.hom (FC := TypeCat.Fun) ((X ⋙ F.obj k').map f) :
                        (a : (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j₀)) →
                          (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j))
                      ((ConcreteCategory.hom (FC := TypeCat.Fun) ((F.map φ).app (X.obj j₀)) :
                            (a : (fun (X : Type w') ↦ X) ((F.obj k).obj (X.obj j₀))) →
                              (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₀)))
                          (z k) :
                        (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₀))) :
                    (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j))
                  ((ConcreteCategory.hom (FC := TypeCat.Fun) ((X ⋙ F.obj k').map f) :
                        (a : (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j₀)) →
                          (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j))
                      (z k') :
                    (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j)))) ↦
      Eq (α :=
        (fun (X : Type w') ↦ X)
          ((X ⋙ F.obj k').obj
            (⋯.choose (p := fun (j : J) ↦
              ∃ (f : j₀ ⟶ j),
                Eq (α := (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j))
                  ((ConcreteCategory.hom (FC := TypeCat.Fun) ((X ⋙ F.obj k').map f) :
                        (a : (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j₀)) →
                          (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j))
                      ((ConcreteCategory.hom (FC := TypeCat.Fun) ((F.map φ).app (X.obj j₀)) :
                            (a : (fun (X : Type w') ↦ X) ((F.obj k).obj (X.obj j₀))) →
                              (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₀)))
                          (z k) :
                        (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₀))) :
                    (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j))
                  ((ConcreteCategory.hom (FC := TypeCat.Fun) ((X ⋙ F.obj k').map f) :
                        (a : (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j₀)) →
                          (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j))
                      (z k') :
                    (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j))))))
        ((ConcreteCategory.hom (FC := TypeCat.Fun) ((X ⋙ F.obj k').map f) :
              (a : (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j₀)) →
                (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj ⋯.choose))
            ((ConcreteCategory.hom (FC := TypeCat.Fun) ((F.map φ).app (X.obj j₀)) :
                  (a : (fun (X : Type w') ↦ X) ((F.obj k).obj (X.obj j₀))) →
                    (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₀)))
                (z k) :
              (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₀))) :
          (fun (X : Type w') ↦ X)
            ((X ⋙ F.obj k').obj
              (⋯.choose (p := fun (j : J) ↦
                ∃ (f : j₀ ⟶ j),
                  Eq (α := (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j))
                    ((ConcreteCategory.hom (FC := TypeCat.Fun) ((X ⋙ F.obj k').map f) :
                          (a : (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j₀)) →
                            (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j))
                        ((ConcreteCategory.hom (FC := TypeCat.Fun) ((F.map φ).app (X.obj j₀)) :
                              (a : (fun (X : Type w') ↦ X) ((F.obj k).obj (X.obj j₀))) →
                                (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₀)))
                            (z k) :
                          (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₀))) :
                      (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j))
                    ((ConcreteCategory.hom (FC := TypeCat.Fun) ((X ⋙ F.obj k').map f) :
                          (a : (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j₀)) →
                            (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j))
                        (z k') :
                      (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j))))))
        ((ConcreteCategory.hom (FC := TypeCat.Fun) ((X ⋙ F.obj k').map f) :
              (a : (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j₀)) →
                (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj ⋯.choose))
            (z k') :
          (fun (X : Type w') ↦ X)
            ((X ⋙ F.obj k').obj
              (⋯.choose (p := fun (j : J) ↦
                ∃ (f : j₀ ⟶ j),
                  Eq (α := (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j))
                    ((ConcreteCategory.hom (FC := TypeCat.Fun) ((X ⋙ F.obj k').map f) :
                          (a : (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j₀)) →
                            (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j))
                        ((ConcreteCategory.hom (FC := TypeCat.Fun) ((F.map φ).app (X.obj j₀)) :
                              (a : (fun (X : Type w') ↦ X) ((F.obj k).obj (X.obj j₀))) →
                                (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₀)))
                            (z k) :
                          (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₀))) :
                      (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j))
                    ((ConcreteCategory.hom (FC := TypeCat.Fun) ((X ⋙ F.obj k').map f) :
                          (a : (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j₀)) →
                            (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j))
                        (z k') :
                      (fun (X : Type w') ↦ X) ((X ⋙ F.obj k').obj j)))))))
hg :
  ∀ {k k' : K} (φ : k ⟶ k'),
    Eq (α := (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj (j φ))))
      ((ConcreteCategory.hom (FC := TypeCat.Fun) ((F.obj k').map (X.map (g φ))) :
            (a : (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₀))) →
              (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj (j φ))))
          ((ConcreteCategory.hom (FC := TypeCat.Fun) ((F.map φ).app (X.obj j₀)) :
                (a : (fun (X : Type w') ↦ X) ((F.obj k).obj (X.obj j₀))) →
                  (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₀)))
              (z k) :
            (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₀))) :
        (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj (j φ))))
      ((ConcreteCategory.hom (FC := TypeCat.Fun) ((F.obj k').map (X.map (g φ))) :
            (a : (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₀))) →
              (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj (j φ))))
          (z k') :
        (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj (j φ))))
obtain :
  ∀ (j₁ : J) (α : j₀ ⟶ j₁) (β : ⦃k k' : K⦄ → (φ : k ⟶ k') → j φ ⟶ j₁) (hα : ∀ ⦃k k' : K⦄ (φ : k ⟶ k'), α = g φ ≫ β φ),
    ∃ (j₁ : J) (α : j₀ ⟶ j₁),
      ∀ ⦃k k' : K⦄ (φ : k ⟶ k'),
        Eq (α := (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₁)))
          ((ConcreteCategory.hom (FC := TypeCat.Fun) ((F.obj k').map (X.map α)) :
                (a : (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₀))) →
                  (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₁)))
              ((ConcreteCategory.hom (FC := TypeCat.Fun) ((F.map φ).app (X.obj j₀)) :
                    (a : (fun (X : Type w') ↦ X) ((F.obj k).obj (X.obj j₀))) →
                      (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₀)))
                  (z k) :
                (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₀))) :
            (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₁)))
          ((ConcreteCategory.hom (FC := TypeCat.Fun) ((F.obj k').map (X.map α)) :
                (a : (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₀))) →
                  (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₁)))
              (z k') :
            (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₁)))
⊢ ∃ (j₁ : J) (α : j₀ ⟶ j₁),
    ∀ ⦃k k' : K⦄ (φ : k ⟶ k'),
      Eq (α := (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₁)))
        ((ConcreteCategory.hom (FC := TypeCat.Fun) ((F.obj k').map (X.map α)) :
              (a : (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₀))) →
                (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₁)))
            ((ConcreteCategory.hom (FC := TypeCat.Fun) ((F.map φ).app (X.obj j₀)) :
                  (a : (fun (X : Type w') ↦ X) ((F.obj k).obj (X.obj j₀))) →
                    (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₀)))
                (z k) :
              (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₀))) :
          (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₁)))
        ((ConcreteCategory.hom (FC := TypeCat.Fun) ((F.obj k').map (X.map α)) :
              (a : (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₀))) →
                (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₁)))
            (z k') :
          (fun (X : Type w') ↦ X) ((F.obj k').obj (X.obj j₁)))

Tactic:
obtain ⟨j₁, α, β, hα⟩ : ∃ (j₁ : J) (α : j₀ ⟶ j₁)
        (β : ∀ ⦃k k' : K⦄ (φ : k ⟶ k'), j φ ⟶ j₁),
        ∀ ⦃k k' : K⦄ (φ : k ⟶ k'), α = g φ ≫ β φ := by
      let j'' (f : Arrow K) : J := j f.hom
      let ψ (f : Arrow K) : j₀ ⟶ IsCardinalFiltered.max j'' hK :=
        g f.hom ≫ IsCardinalFiltered.toMax j'' hK f
      refine ⟨IsCardinalFiltered.coeq ψ hK, IsCardinalFiltered.toCoeq ψ hK,
        fun k k' φ ↦ IsCardinalFiltered.toMax j'' hK φ ≫ IsCardinalFiltered.coeqHom ψ hK,
        fun k k' φ ↦ ?_⟩
      simpa [ψ] using (IsCardinalFiltered.coeq_condition ψ hK (Arrow.mk φ)).symm