/-- Auxiliary definition: the proposed cone is a limit cone. -/
def limitConeIsLimit (F : J ⥤ Cat.{v, v}) : IsLimit (limitCone F) where
  lift := limitConeLift F
  fac s j := CategoryTheory.Functor.ext (by simp) fun X Y f => by
    dsimp [limitConeLift]
    

Proof state:
J : Type v
inst✝ : SmallCategory J
F : J ⥤ Cat
s : Cone F
j : J
X Y : ↑s.pt
f : X ⟶ Y
⊢ limit.π
      (homDiagram (limit.lift (F ⋙ objects) { pt := ↑s.pt, π := NatTrans.mk fun j => (s.π.app j).obj } X)
        (limit.lift (F ⋙ objects) { pt := ↑s.pt, π := NatTrans.mk fun j => (s.π.app j).obj } Y))
      j
      (Types.Limit.mk
        (homDiagram (limit.lift (F ⋙ objects) { pt := ↑s.pt, π := NatTrans.mk fun j => (s.π.app j).obj } X)
          (limit.lift (F ⋙ objects) { pt := ↑s.pt, π := NatTrans.mk fun j => (s.π.app j).obj } Y))
        (fun j =>
          eqToHom
              (_ :
                limit.π (F ⋙ objects) j
                    (limit.lift (F ⋙ objects) { pt := ↑s.pt, π := NatTrans.mk fun j => (s.π.app j).obj } X) =
                  (s.π.app j).obj X) ≫
            (s.π.app j).map f ≫
              eqToHom
                (_ :
                  (s.π.app j).obj Y =
                    limit.π (F ⋙ objects) j
                      (limit.lift (F ⋙ objects) { pt := ↑s.pt, π := NatTrans.mk fun j => (s.π.app j).obj } Y)))
        (_ :
          ∀ (j j' : J) (h : j ⟶ j'),
            (homDiagram (limit.lift (F ⋙ objects) { pt := ↑s.pt, π := NatTrans.mk fun j => (s.π.app j).obj } X)
                    (limit.lift (F ⋙ objects) { pt := ↑s.pt, π := NatTrans.mk fun j => (s.π.app j).obj } Y)).map
                h
                (eqToHom
                    (_ :
                      limit.π (F ⋙ objects) j
                          (limit.lift (F ⋙ objects) { pt := ↑s.pt, π := NatTrans.mk fun j => (s.π.app j).obj } X) =
                        (s.π.app j).obj X) ≫
                  (s.π.app j).map f ≫
                    eqToHom
                      (_ :
                        (s.π.app j).obj Y =
                          limit.π (F ⋙ objects) j
                            (limit.lift (F ⋙ objects) { pt := ↑s.pt, π := NatTrans.mk fun j => (s.π.app j).obj } Y))) =
              eqToHom
                  (_ :
                    limit.π (F ⋙ objects) j'
                        (limit.lift (F ⋙ objects) { pt := ↑s.pt, π := NatTrans.mk fun j => (s.π.app j).obj } X) =
                      (s.π.app j').obj X) ≫
                (s.π.app j').map f ≫
                  eqToHom
                    (_ :
                      (s.π.app j').obj Y =
                        limit.π (F ⋙ objects) j'
                          (limit.lift (F ⋙ objects) { pt := ↑s.pt, π := NatTrans.mk fun j => (s.π.app j).obj } Y)))) =
    eqToHom
        (_ :
          limit.π (F ⋙ objects) j
              (limit.lift (F ⋙ objects) { pt := ↑s.pt, π := NatTrans.mk fun j => (s.π.app j).obj } X) =
            (s.π.app j).obj X) ≫
      (s.π.app j).map f ≫
        eqToHom
          (_ :
            (s.π.app j).obj Y =
              limit.π (F ⋙ objects) j
                (limit.lift (F ⋙ objects) { pt := ↑s.pt, π := NatTrans.mk fun j => (s.π.app j).obj } Y))

Next tactic:
exact Types.Limit.π_mk.{v, v} _ _ _ _