Section LabeledStepFailure.
Context `{labeled_multi_params : LabeledMultiParams}.
Inductive lb_step_failure : lb_step_relation (list name * network) label (name * (input + list output)) :=
| LabeledStepFailure_deliver : forall net net' failed p xs ys out d l lb,
nwPackets net = xs ++ p :: ys ->
~ In (pDst p) failed ->
lb_net_handlers (pDst p) (pSrc p) (pBody p) (nwState net (pDst p)) = (lb, out, d, l) ->
net' = mkNetwork (send_packets (pDst p) l ++ xs ++ ys)
(update name_eq_dec (nwState net) (pDst p) d) ->
lb_step_failure (failed, net) lb (failed, net') [(pDst p, inr out)]
| LabeledStepFailure_input : forall h net net' failed out inp d l lb,
~ In h failed ->
lb_input_handlers h inp (nwState net h) = (lb, out, d, l) ->
net' = mkNetwork (send_packets h l ++ nwPackets net)
(update name_eq_dec (nwState net) h d) ->
lb_step_failure (failed, net) lb (failed, net') [(h, inl inp); (h, inr out)]
| LabeledStepFailure_stutter : forall net failed, lb_step_failure (failed, net) label_silent (failed, net) [].
Context {failure_params : FailureParams unlabeled_multi_params}.

Lemma step_failure_star_lb_step_reachable :
step_star_lb_step_reachable lb_step_failure step_failure step_failure_init.