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

Proof state:
case left.right.right.fst.id
C : Type u
inst✝ : Category.{v, u} C
I : MulticospanIndex C
a✝ : I.R
⊢ {
          obj := fun x =>
            match x with
            | WalkingMulticospan.left a => left I a
            | WalkingMulticospan.right b => right I b,
          map := fun {x y} f =>
            match x, y, f with
            | x, .(x), WalkingMulticospan.Hom.id .(x) =>
              𝟙
                ((fun x =>
                    match x with
                    | WalkingMulticospan.left a => left I a
                    | WalkingMulticospan.right b => right I b)
                  x)
            | .(WalkingMulticospan.left (fstTo I b)), .(WalkingMulticospan.right b), WalkingMulticospan.Hom.fst b =>
              fst I b
            | .(WalkingMulticospan.left (sndTo I b)), .(WalkingMulticospan.right b), WalkingMulticospan.Hom.snd b =>
              snd I b }.map
      (WalkingMulticospan.Hom.fst a✝ ≫ WalkingMulticospan.Hom.id (WalkingMulticospan.right a✝)) =
    {
            obj := fun x =>
              match x with
              | WalkingMulticospan.left a => left I a
              | WalkingMulticospan.right b => right I b,
            map := fun {x y} f =>
              match x, y, f with
              | x, .(x), WalkingMulticospan.Hom.id .(x) =>
                𝟙
                  ((fun x =>
                      match x with
                      | WalkingMulticospan.left a => left I a
                      | WalkingMulticospan.right b => right I b)
                    x)
              | .(WalkingMulticospan.left (fstTo I b)), .(WalkingMulticospan.right b), WalkingMulticospan.Hom.fst b =>
                fst I b
              | .(WalkingMulticospan.left (sndTo I b)), .(WalkingMulticospan.right b), WalkingMulticospan.Hom.snd b =>
                snd I b }.map
        (WalkingMulticospan.Hom.fst a✝) ≫
      {
            obj := fun x =>
              match x with
              | WalkingMulticospan.left a => left I a
              | WalkingMulticospan.right b => right I b,
            map := fun {x y} f =>
              match x, y, f with
              | x, .(x), WalkingMulticospan.Hom.id .(x) =>
                𝟙
                  ((fun x =>
                      match x with
                      | WalkingMulticospan.left a => left I a
                      | WalkingMulticospan.right b => right I b)
                    x)
              | .(WalkingMulticospan.left (fstTo I b)), .(WalkingMulticospan.right b), WalkingMulticospan.Hom.fst b =>
                fst I b
              | .(WalkingMulticospan.left (sndTo I b)), .(WalkingMulticospan.right b), WalkingMulticospan.Hom.snd b =>
                snd I b }.map
        (WalkingMulticospan.Hom.id (WalkingMulticospan.right a✝))

Next tactic:
aesop_cat