Theorem: CategoryTheory.Limits.Multicofork.IsColimit.mk_desc
File: Mathlib/CategoryTheory/Limits/Shapes/Multiequalizer.lean

Proof steps:
state_before: C : Type u
inst✝ : Category.{v, u} C
I : MultispanIndex C
K : Multicofork I
desc : (E : Multicofork I) → K.pt ⟶ E.pt
fac : ∀ (E : Multicofork I) (i : I.R), K.π i ≫ desc E = E.π i
uniq : ∀ (E : Multicofork I) (m : K.pt ⟶ E.pt), (∀ (i : I.R), K.π i ≫ m = E.π i) → m = desc E
⊢ ∀ (s : Cocone I.multispan) (j : WalkingMultispan I.fstFrom I.sndFrom), K.ι.app j ≫ desc s = s.ι.app j
state_after: case left
C : Type u
inst✝ : Category.{v, u} C
I : MultispanIndex C
K : Multicofork I
desc : (E : Multicofork I) → K.pt ⟶ E.pt
fac : ∀ (E : Multicofork I) (i : I.R), K.π i ≫ desc E = E.π i
uniq : ∀ (E : Multicofork I) (m : K.pt ⟶ E.pt), (∀ (i : I.R), K.π i ≫ m = E.π i) → m = desc E
S : Cocone I.multispan
a : I.L
⊢ K.ι.app (WalkingMultispan.left a) ≫ desc S = S.ι.app (WalkingMultispan.left a)

case right
C : Type u
inst✝ : Category.{v, u} C
I : MultispanIndex C
K : Multicofork I
desc : (E : Multicofork I) → K.pt ⟶ E.pt
fac : ∀ (E : Multicofork I) (i : I.R), K.π i ≫ desc E = E.π i
uniq : ∀ (E : Multicofork I) (m : K.pt ⟶ E.pt), (∀ (i : I.R), K.π i ≫ m = E.π i) → m = desc E
S : Cocone I.multispan
b : I.R
⊢ K.ι.app (WalkingMultispan.right b) ≫ desc S = S.ι.app (WalkingMultispan.right b)
tactic: rintro S (a | b)
state_before: C : Type u
inst✝ : Category.{v, u} C
I : MultispanIndex C
K : Multicofork I
desc : (E : Multicofork I) → K.pt ⟶ E.pt
fac : ∀ (E : Multicofork I) (i : I.R), K.π i ≫ desc E = E.π i
uniq : ∀ (E : Multicofork I) (m : K.pt ⟶ E.pt), (∀ (i : I.R), K.π i ≫ m = E.π i) → m = desc E
⊢ ∀ (s : Cocone I.multispan) (m : K.pt ⟶ s.pt),
    (∀ (j : WalkingMultispan I.fstFrom I.sndFrom), K.ι.app j ≫ m = s.ι.app j) → m = desc s
state_after: C : Type u
inst✝ : Category.{v, u} C
I : MultispanIndex C
K : Multicofork I
desc : (E : Multicofork I) → K.pt ⟶ E.pt
fac : ∀ (E : Multicofork I) (i : I.R), K.π i ≫ desc E = E.π i
uniq : ∀ (E : Multicofork I) (m : K.pt ⟶ E.pt), (∀ (i : I.R), K.π i ≫ m = E.π i) → m = desc E
S : Cocone I.multispan
m : K.pt ⟶ S.pt
hm : ∀ (j : WalkingMultispan I.fstFrom I.sndFrom), K.ι.app j ≫ m = S.ι.app j
⊢ m = desc S
tactic: intro S m hm
state_before: C : Type u
inst✝ : Category.{v, u} C
I : MultispanIndex C
K : Multicofork I
desc : (E : Multicofork I) → K.pt ⟶ E.pt
fac : ∀ (E : Multicofork I) (i : I.R), K.π i ≫ desc E = E.π i
uniq : ∀ (E : Multicofork I) (m : K.pt ⟶ E.pt), (∀ (i : I.R), K.π i ≫ m = E.π i) → m = desc E
S : Cocone I.multispan
m : K.pt ⟶ S.pt
hm : ∀ (j : WalkingMultispan I.fstFrom I.sndFrom), K.ι.app j ≫ m = S.ι.app j
⊢ m = desc S
state_after: case a
C : Type u
inst✝ : Category.{v, u} C
I : MultispanIndex C
K : Multicofork I
desc : (E : Multicofork I) → K.pt ⟶ E.pt
fac : ∀ (E : Multicofork I) (i : I.R), K.π i ≫ desc E = E.π i
uniq : ∀ (E : Multicofork I) (m : K.pt ⟶ E.pt), (∀ (i : I.R), K.π i ≫ m = E.π i) → m = desc E
S : Cocone I.multispan
m : K.pt ⟶ S.pt
hm : ∀ (j : WalkingMultispan I.fstFrom I.sndFrom), K.ι.app j ≫ m = S.ι.app j
⊢ ∀ (i : I.R), K.π i ≫ m = π S i
tactic: apply uniq
state_before: case a
C : Type u
inst✝ : Category.{v, u} C
I : MultispanIndex C
K : Multicofork I
desc : (E : Multicofork I) → K.pt ⟶ E.pt
fac : ∀ (E : Multicofork I) (i : I.R), K.π i ≫ desc E = E.π i
uniq : ∀ (E : Multicofork I) (m : K.pt ⟶ E.pt), (∀ (i : I.R), K.π i ≫ m = E.π i) → m = desc E
S : Cocone I.multispan
m : K.pt ⟶ S.pt
hm : ∀ (j : WalkingMultispan I.fstFrom I.sndFrom), K.ι.app j ≫ m = S.ι.app j
⊢ ∀ (i : I.R), K.π i ≫ m = π S i
state_after: case a
C : Type u
inst✝ : Category.{v, u} C
I : MultispanIndex C
K : Multicofork I
desc : (E : Multicofork I) → K.pt ⟶ E.pt
fac : ∀ (E : Multicofork I) (i : I.R), K.π i ≫ desc E = E.π i
uniq : ∀ (E : Multicofork I) (m : K.pt ⟶ E.pt), (∀ (i : I.R), K.π i ≫ m = E.π i) → m = desc E
S : Cocone I.multispan
m : K.pt ⟶ S.pt
hm : ∀ (j : WalkingMultispan I.fstFrom I.sndFrom), K.ι.app j ≫ m = S.ι.app j
i : I.R
⊢ K.π i ≫ m = π S i
tactic: intro i
state_before: case a
C : Type u
inst✝ : Category.{v, u} C
I : MultispanIndex C
K : Multicofork I
desc : (E : Multicofork I) → K.pt ⟶ E.pt
fac : ∀ (E : Multicofork I) (i : I.R), K.π i ≫ desc E = E.π i
uniq : ∀ (E : Multicofork I) (m : K.pt ⟶ E.pt), (∀ (i : I.R), K.π i ≫ m = E.π i) → m = desc E
S : Cocone I.multispan
m : K.pt ⟶ S.pt
hm : ∀ (j : WalkingMultispan I.fstFrom I.sndFrom), K.ι.app j ≫ m = S.ι.app j
i : I.R
⊢ K.π i ≫ m = π S i
state_after: no goals
tactic: apply hm