/-- 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
    rintro (_ | _) (_ | _) (_ | _) (_ | _ | _) (_ | _ | _) <;> 

Proof state:
case left.left.right.id.fst
C : Type u
inst✝ : Category.{v, u} C
I : MultispanIndex C
a✝ : I.L
⊢ {
          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
      (WalkingMultispan.Hom.id (WalkingMultispan.left a✝) ≫ WalkingMultispan.Hom.fst a✝) =
    {
            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
        (WalkingMultispan.Hom.id (WalkingMultispan.left a✝)) ≫
      {
            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
        (WalkingMultispan.Hom.fst a✝)

Next tactic:
aesop_cat