-- Lean 4 proof step from Mathlib.CategoryTheory.Limits.Shapes.WidePullbacks (goal)
Goal:
J : Type w
C : Type u
inst : Category.{v, u} C
B : C
objs : J → C
arrows : (j : J) → B ⟶ objs j
X Y Z : WidePushoutShape J
f : X ⟶ Y
g : Y ⟶ Z
⊢ Eq.{v + 1} (α :=
    Quiver.Hom.{v, u} (V := C) (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs : C)
      (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Z B objs : C))
    (Hom.casesOn (motive := fun (a a_1 : WidePushoutShape J) (x : a.Hom a_1) ↦
        (h : X = a) →
          (h : Z = a_1) →
            (h : f ≫ g ≍ x) →
              Quiver.Hom.{v, u} (V := C) (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs : C)
                (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Z B objs : C))
        (f ≫ g)
        (fun (X_1 : WidePushoutShape J) (h : X = X_1) ↦
          Eq.ndrec (motive := fun (X_2 : WidePushoutShape J) ↦
            (h : Z = X_2) →
              (h : f ≫ g ≍ Hom.id X_2) →
                Quiver.Hom.{v, u} (V := C) (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs : C)
                  (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Z B objs : C))
            (fun (h : Z = X) ↦
              Eq.ndrec (motive := fun {Y : WidePushoutShape J} ↦
                (f : X ⟶ Y) →
                  (h : f ≍ Hom.id X) →
                    Quiver.Hom.{v, u} (V := C)
                      (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs : C)
                      (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Y B objs : C))
                (fun (f : X ⟶ X) (h : f ≍ Hom.id X) ↦
                  𝟙 (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs))
                ⋯ (f ≫ g))
            h)
        (fun (j : J) (h : X = none) ↦
          Eq.ndrec (motive := fun {X : WidePushoutShape J} ↦
            (f : X ⟶ Z) →
              (h : Z = some j) →
                (h : f ≍ Hom.init j) →
                  Quiver.Hom.{v, u} (V := C) (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs : C)
                    (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Z B objs : C))
            (fun (f : none ⟶ Z) (h : Z = some j) ↦
              Eq.ndrec (motive := fun {Y : WidePushoutShape J} ↦
                (f : none ⟶ Y) →
                  (h : f ≍ Hom.init j) →
                    Quiver.Hom.{v, u} (V := C)
                      (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) none B objs : C)
                      (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Y B objs : C))
                (fun (f : none ⟶ some j) (h : f ≍ Hom.init j) ↦ arrows j) ⋯ f)
            ⋯ (f ≫ g))
        ⋯ ⋯ ⋯ :
      Quiver.Hom.{v, u} (V := C) (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs : C)
        (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Z B objs : C))
    (CategoryStruct.comp (Y := Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Y B objs)
        (Hom.casesOn (motive := fun (a a_1 : WidePushoutShape J) (x : a.Hom a_1) ↦
          (h : X = a) →
            (h : Y = a_1) →
              (h : f ≍ x) →
                Quiver.Hom.{v, u} (V := C) (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs : C)
                  (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Y B objs : C))
          f
          (fun (X_1 : WidePushoutShape J) (h : X = X_1) ↦
            Eq.ndrec (motive := fun (X_2 : WidePushoutShape J) ↦
              (h : Y = X_2) →
                (h : f ≍ Hom.id X_2) →
                  Quiver.Hom.{v, u} (V := C) (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs : C)
                    (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Y B objs : C))
              (fun (h : Y = X) ↦
                Eq.ndrec (motive := fun {Y : WidePushoutShape J} ↦
                  (f : X ⟶ Y) →
                    (h : f ≍ Hom.id X) →
                      Quiver.Hom.{v, u} (V := C)
                        (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs : C)
                        (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Y B objs : C))
                  (fun (f : X ⟶ X) (h : f ≍ Hom.id X) ↦
                    𝟙 (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs))
                  ⋯ f)
              h)
          (fun (j : J) (h : X = none) ↦
            Eq.ndrec (motive := fun {X : WidePushoutShape J} ↦
              (f : X ⟶ Y) →
                (h : Y = some j) →
                  (h : f ≍ Hom.init j) →
                    Quiver.Hom.{v, u} (V := C)
                      (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs : C)
                      (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Y B objs : C))
              (fun (f : none ⟶ Y) (h : Y = some j) ↦
                Eq.ndrec (motive := fun {Y : WidePushoutShape J} ↦
                  (f : none ⟶ Y) →
                    (h : f ≍ Hom.init j) →
                      Quiver.Hom.{v, u} (V := C)
                        (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) none B objs : C)
                        (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Y B objs : C))
                  (fun (f : none ⟶ some j) (h : f ≍ Hom.init j) ↦ arrows j) ⋯ f)
              ⋯ f)
          ⋯ ⋯ ⋯)
        (Hom.casesOn (motive := fun (a a_1 : WidePushoutShape J) (x : a.Hom a_1) ↦
          (h : Y = a) →
            (h : Z = a_1) →
              (h : g ≍ x) →
                Quiver.Hom.{v, u} (V := C) (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Y B objs : C)
                  (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Z B objs : C))
          g
          (fun (X : WidePushoutShape J) (h : Y = X) ↦
            Eq.ndrec (motive := fun (X : WidePushoutShape J) ↦
              (h : Z = X) →
                (h : g ≍ Hom.id X) →
                  Quiver.Hom.{v, u} (V := C) (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Y B objs : C)
                    (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Z B objs : C))
              (fun (h : Z = Y) ↦
                Eq.ndrec (motive := fun {Y_1 : WidePushoutShape J} ↦
                  (f : Y ⟶ Y_1) →
                    (h : f ≍ Hom.id Y) →
                      Quiver.Hom.{v, u} (V := C)
                        (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Y B objs : C)
                        (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Y_1 B objs : C))
                  (fun (f : Y ⟶ Y) (h : f ≍ Hom.id Y) ↦
                    𝟙 (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Y B objs))
                  ⋯ g)
              h)
          (fun (j : J) (h : Y = none) ↦
            Eq.ndrec (motive := fun {X : WidePushoutShape J} ↦
              (f : X ⟶ Z) →
                (h : Z = some j) →
                  (h : f ≍ Hom.init j) →
                    Quiver.Hom.{v, u} (V := C)
                      (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs : C)
                      (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Z B objs : C))
              (fun (f : none ⟶ Z) (h : Z = some j) ↦
                Eq.ndrec (motive := fun {Y : WidePushoutShape J} ↦
                  (f : none ⟶ Y) →
                    (h : f ≍ Hom.init j) →
                      Quiver.Hom.{v, u} (V := C)
                        (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) none B objs : C)
                        (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Y B objs : C))
                  (fun (f : none ⟶ some j) (h : f ≍ Hom.init j) ↦ arrows j) ⋯ f)
              ⋯ g)
          ⋯ ⋯ ⋯) :
      Quiver.Hom.{v, u} (V := C) (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs : C)
        (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Z B objs : C))
have id : ∀ (g : X ⟶ Z),
  Eq.{v + 1} (α :=
    Quiver.Hom.{v, u} (V := C) (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs : C)
      (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Z B objs : C))
    (@Hom.casesOn _
        (fun (a a_1 : WidePushoutShape J) (x : a.Hom a_1) ↦
          (h : X = a) →
            (h : Z = a_1) →
              (h : HEq (α := X ⟶ Z) (Hom.id X ≫ g) x) →
                Quiver.Hom.{v, u} (V := C) (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs : C)
                  (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Z B objs : C))
        X _ (Hom.id X ≫ g)
        (fun (X_1 : WidePushoutShape J) (h : X = X_1) ↦
          Eq.ndrec (motive := fun (X_2 : WidePushoutShape J) ↦
            (h : Z = X_2) →
              (h : HEq (α := X ⟶ Z) (Hom.id X ≫ g) (Hom.id X_2)) →
                Quiver.Hom.{v, u} (V := C) (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs : C)
                  (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Z B objs : C))
            (fun (h : Z = X) ↦
              Eq.ndrec (motive := fun {Y : WidePushoutShape J} ↦
                (f : X ⟶ Y) →
                  (h : f ≍ Hom.id X) →
                    Quiver.Hom.{v, u} (V := C)
                      (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs : C)
                      (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Y B objs : C))
                (fun (f : X ⟶ X) (h : f ≍ Hom.id X) ↦
                  𝟙 (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs))
                sorry (Hom.id X ≫ g))
            h)
        (fun (j : J) (h : X = none) ↦
          Eq.ndrec (motive := fun {X : WidePushoutShape J} ↦
            (f : X ⟶ Z) →
              (h : Z = some j) →
                (h : f ≍ Hom.init j) →
                  Quiver.Hom.{v, u} (V := C) (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs : C)
                    (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Z B objs : C))
            (fun (f : none ⟶ Z) (h : Z = some j) ↦
              Eq.ndrec (motive := fun {Y : WidePushoutShape J} ↦
                (f : none ⟶ Y) →
                  (h : f ≍ Hom.init j) →
                    Quiver.Hom.{v, u} (V := C)
                      (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) none B objs : C)
                      (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Y B objs : C))
                (fun (f : none ⟶ some j) (h : f ≍ Hom.init j) ↦ arrows j) sorry f)
            sorry (Hom.id X ≫ g))
        sorry sorry sorry :
      Quiver.Hom.{v, u} (V := C) (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs : C)
        (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Z B objs : C))
    (CategoryStruct.comp (Y := Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs)
        (Hom.casesOn (motive := fun (a a_1 : WidePushoutShape J) (x : a.Hom a_1) ↦
          (h : X = a) →
            (h : X = a_1) →
              (h : Hom.id X ≍ x) →
                Quiver.Hom.{v, u} (V := C) (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs : C)
                  (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs : C))
          (Hom.id X)
          (fun (X_1 : WidePushoutShape J) (h : X = X_1) ↦
            Eq.ndrec (motive := fun (X_2 : WidePushoutShape J) ↦
              (h : X = X_2) →
                (h : Hom.id X ≍ Hom.id X_2) →
                  Quiver.Hom.{v, u} (V := C) (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs : C)
                    (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs : C))
              (fun (h : X = X) ↦
                Eq.ndrec (motive := fun {Y : WidePushoutShape J} ↦
                  (f : X ⟶ Y) →
                    (h : f ≍ Hom.id X) →
                      Quiver.Hom.{v, u} (V := C)
                        (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs : C)
                        (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Y B objs : C))
                  (fun (f : X ⟶ X) (h : f ≍ Hom.id X) ↦
                    𝟙 (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs))
                  sorry (Hom.id X))
              h)
          (fun (j : J) (h : X = none) ↦
            Eq.ndrec (motive := fun {X_1 : WidePushoutShape J} ↦
              (f : X_1 ⟶ X) →
                (h : X = some j) →
                  (h : f ≍ Hom.init j) →
                    Quiver.Hom.{v, u} (V := C)
                      (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X_1 B objs : C)
                      (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs : C))
              (fun (f : none ⟶ X) (h : X = some j) ↦
                Eq.ndrec (motive := fun {Y : WidePushoutShape J} ↦
                  (f : none ⟶ Y) →
                    (h : f ≍ Hom.init j) →
                      Quiver.Hom.{v, u} (V := C)
                        (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) none B objs : C)
                        (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Y B objs : C))
                  (fun (f : none ⟶ some j) (h : f ≍ Hom.init j) ↦ arrows j) sorry f)
              sorry (Hom.id X))
          sorry sorry sorry)
        (Hom.casesOn (motive := fun (a a_1 : WidePushoutShape J) (x : a.Hom a_1) ↦
          (h : X = a) →
            (h : Z = a_1) →
              (h : g ≍ x) →
                Quiver.Hom.{v, u} (V := C) (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs : C)
                  (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Z B objs : C))
          g
          (fun (X_1 : WidePushoutShape J) (h : X = X_1) ↦
            Eq.ndrec (motive := fun (X_2 : WidePushoutShape J) ↦
              (h : Z = X_2) →
                (h : g ≍ Hom.id X_2) →
                  Quiver.Hom.{v, u} (V := C) (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs : C)
                    (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Z B objs : C))
              (fun (h : Z = X) ↦
                Eq.ndrec (motive := fun {Y : WidePushoutShape J} ↦
                  (f : X ⟶ Y) →
                    (h : f ≍ Hom.id X) →
                      Quiver.Hom.{v, u} (V := C)
                        (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs : C)
                        (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Y B objs : C))
                  (fun (f : X ⟶ X) (h : f ≍ Hom.id X) ↦
                    𝟙 (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs))
                  sorry g)
              h)
          (fun (j : J) (h : X = none) ↦
            Eq.ndrec (motive := fun {X : WidePushoutShape J} ↦
              (f : X ⟶ Z) →
                (h : Z = some j) →
                  (h : f ≍ Hom.init j) →
                    Quiver.Hom.{v, u} (V := C)
                      (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs : C)
                      (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Z B objs : C))
              (fun (f : none ⟶ Z) (h : Z = some j) ↦
                Eq.ndrec (motive := fun {Y : WidePushoutShape J} ↦
                  (f : none ⟶ Y) →
                    (h : f ≍ Hom.init j) →
                      Quiver.Hom.{v, u} (V := C)
                        (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) none B objs : C)
                        (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Y B objs : C))
                  (fun (f : none ⟶ some j) (h : f ≍ Hom.init j) ↦ arrows j) sorry f)
              sorry g)
          sorry sorry sorry) :
      Quiver.Hom.{v, u} (V := C) (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) X B objs : C)
        (Option.casesOn (motive := fun (x : WidePushoutShape J) ↦ C) Z B objs : C))
Tactic: cases f
Cleared hypotheses: Y, f, g