Theorem: CategoryTheory.Limits.MulticospanIndex.sectionsEquiv_symm_apply_val
File: Mathlib/CategoryTheory/Limits/Shapes/Types.lean

Proof steps:
state_before: I : MulticospanIndex (Type u)
s : I.sections
⊢ (fun i =>
      match i with
      | WalkingMulticospan.left i => s.val i
      | WalkingMulticospan.right j => I.fst j (s.val (I.fstTo j))) ∈
    I.multicospan.sections
state_after: case id
I : MulticospanIndex (Type u)
s : I.sections
j✝ : WalkingMulticospan I.fstTo I.sndTo
⊢ I.multicospan.map (WalkingMulticospan.Hom.id j✝)
      ((fun i =>
          match i with
          | WalkingMulticospan.left i => s.val i
          | WalkingMulticospan.right j => I.fst j (s.val (I.fstTo j)))
        j✝) =
    (fun i =>
        match i with
        | WalkingMulticospan.left i => s.val i
        | WalkingMulticospan.right j => I.fst j (s.val (I.fstTo j)))
      j✝

case fst
I : MulticospanIndex (Type u)
s : I.sections
b✝ : I.R
⊢ I.multicospan.map (WalkingMulticospan.Hom.fst b✝)
      ((fun i =>
          match i with
          | WalkingMulticospan.left i => s.val i
          | WalkingMulticospan.right j => I.fst j (s.val (I.fstTo j)))
        (WalkingMulticospan.left (I.fstTo b✝))) =
    (fun i =>
        match i with
        | WalkingMulticospan.left i => s.val i
        | WalkingMulticospan.right j => I.fst j (s.val (I.fstTo j)))
      (WalkingMulticospan.right b✝)

case snd
I : MulticospanIndex (Type u)
s : I.sections
r : I.R
⊢ I.multicospan.map (WalkingMulticospan.Hom.snd r)
      ((fun i =>
          match i with
          | WalkingMulticospan.left i => s.val i
          | WalkingMulticospan.right j => I.fst j (s.val (I.fstTo j)))
        (WalkingMulticospan.left (I.sndTo r))) =
    (fun i =>
        match i with
        | WalkingMulticospan.left i => s.val i
        | WalkingMulticospan.right j => I.fst j (s.val (I.fstTo j)))
      (WalkingMulticospan.right r)
tactic: rintro _ _ (_|_|r)
state_before: I : MulticospanIndex (Type u)
s : ↑I.multicospan.sections
⊢ (fun s =>
        ⟨fun i =>
          match i with
          | WalkingMulticospan.left i => s.val i
          | WalkingMulticospan.right j => I.fst j (s.val (I.fstTo j)),
          ⋯⟩)
      ((fun s => { val := fun i => ↑s (WalkingMulticospan.left i), property := ⋯ }) s) =
    s
state_after: case a.h.left
I : MulticospanIndex (Type u)
s : ↑I.multicospan.sections
a✝ : I.L
⊢ ↑((fun s =>
            ⟨fun i =>
              match i with
              | WalkingMulticospan.left i => s.val i
              | WalkingMulticospan.right j => I.fst j (s.val (I.fstTo j)),
              ⋯⟩)
          ((fun s => { val := fun i => ↑s (WalkingMulticospan.left i), property := ⋯ }) s))
      (WalkingMulticospan.left a✝) =
    ↑s (WalkingMulticospan.left a✝)

case a.h.right
I : MulticospanIndex (Type u)
s : ↑I.multicospan.sections
r : I.R
⊢ ↑((fun s =>
            ⟨fun i =>
              match i with
              | WalkingMulticospan.left i => s.val i
              | WalkingMulticospan.right j => I.fst j (s.val (I.fstTo j)),
              ⋯⟩)
          ((fun s => { val := fun i => ↑s (WalkingMulticospan.left i), property := ⋯ }) s))
      (WalkingMulticospan.right r) =
    ↑s (WalkingMulticospan.right r)
tactic: ext (_|r)