/-- The multispan associated to `I : MultispanIndex`. -/
def multispan : WalkingMultispan I.fstFrom I.sndFrom ⥤ C where
  obj x :=
    match x with
    | WalkingMultispan.left a => I.left a
    | WalkingMultispan.right b => I.right b
  map {x y} f :=
    match x, y, f with
    | _, _, WalkingMultispan.Hom.id x => 𝟙 _
    | _, _, WalkingMultispan.Hom.fst b => I.fst _
    | _, _, WalkingMultispan.Hom.snd b => I.snd _
  map_id := by
    rintro (_ | _) <;> rfl
  map_comp := by
    

Proof state:
C : Type u
inst✝ : Category.{v, u} C
I : MultispanIndex C
⊢ ∀ {X Y Z : WalkingMultispan I.fstFrom I.sndFrom} (f : X ⟶ Y) (g : Y ⟶ Z),
    {
            obj := fun x =>
              match x with
              | WalkingMultispan.left a => left I a
              | WalkingMultispan.right b => right I b,
            map := fun {x y} f =>
              match x, y, f with
              | x, .(x), WalkingMultispan.Hom.id .(x) =>
                𝟙
                  ((fun x =>
                      match x with
                      | WalkingMultispan.left a => left I a
                      | WalkingMultispan.right b => right I b)
                    x)
              | .(WalkingMultispan.left b), .(WalkingMultispan.right (fstFrom I b)), WalkingMultispan.Hom.fst b =>
                fst I b
              | .(WalkingMultispan.left b), .(WalkingMultispan.right (sndFrom I b)), WalkingMultispan.Hom.snd b =>
                snd I b }.map
        (f ≫ g) =
      {
              obj := fun x =>
                match x with
                | WalkingMultispan.left a => left I a
                | WalkingMultispan.right b => right I b,
              map := fun {x y} f =>
                match x, y, f with
                | x, .(x), WalkingMultispan.Hom.id .(x) =>
                  𝟙
                    ((fun x =>
                        match x with
                        | WalkingMultispan.left a => left I a
                        | WalkingMultispan.right b => right I b)
                      x)
                | .(WalkingMultispan.left b), .(WalkingMultispan.right (fstFrom I b)), WalkingMultispan.Hom.fst b =>
                  fst I b
                | .(WalkingMultispan.left b), .(WalkingMultispan.right (sndFrom I b)), WalkingMultispan.Hom.snd b =>
                  snd I b }.map
          f ≫
        {
              obj := fun x =>
                match x with
                | WalkingMultispan.left a => left I a
                | WalkingMultispan.right b => right I b,
              map := fun {x y} f =>
                match x, y, f with
                | x, .(x), WalkingMultispan.Hom.id .(x) =>
                  𝟙
                    ((fun x =>
                        match x with
                        | WalkingMultispan.left a => left I a
                        | WalkingMultispan.right b => right I b)
                      x)
                | .(WalkingMultispan.left b), .(WalkingMultispan.right (fstFrom I b)), WalkingMultispan.Hom.fst b =>
                  fst I b
                | .(WalkingMultispan.left b), .(WalkingMultispan.right (sndFrom I b)), WalkingMultispan.Hom.snd b =>
                  snd I b }.map
          g

Next tactic:
rintro (_ | _) (_ | _) (_ | _) (_ | _ | _) (_ | _ | _)