/-- 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
    

Proof state:
C : Type u
inst✝ : Category.{v, u} C
I : MulticospanIndex C
⊢ ∀ {X Y Z : WalkingMulticospan I.fstTo I.sndTo} (f : X ⟶ Y) (g : Y ⟶ Z),
    {
            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
        (f ≫ g) =
      {
              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
          f ≫
        {
              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
          g

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