Section LabeledStepOrderDynamicFailure.
Context `{labeled_multi_params : LabeledMultiParams}.
Inductive lb_step_ordered_dynamic_failure : lb_step_relation (list name * ordered_dynamic_network) label (name * (input + output)) :=
| LabeledStepOrderedDynamicFailure_deliver : forall net net' failed tr m ms out d d' l from to lb,
~ In to failed ->
In to (odnwNodes net) ->
odnwState net to = Some d ->
odnwPackets net from to = m :: ms ->
lb_net_handlers to from m d = (lb, out, d', l) ->
net' = {| odnwNodes := odnwNodes net;
odnwPackets := collate name_eq_dec to (update2 name_eq_dec (odnwPackets net) from to ms) l;
odnwState := update name_eq_dec (odnwState net) to (Some d') |} ->
tr = map2fst to (map inr out) ->
lb_step_ordered_dynamic_failure (failed, net) lb (failed, net') tr
| LabeledStepOrderedDynamicFailure_input : forall h net net' failed tr out inp d d' l lb,
~ In h failed ->
In h (odnwNodes net) ->
odnwState net h = Some d ->
lb_input_handlers h inp d = (lb, out, d', l) ->
net' = {| odnwNodes := odnwNodes net;
odnwPackets := collate name_eq_dec h (odnwPackets net) l;
odnwState := update name_eq_dec (odnwState net) h (Some d') |} ->
tr = (h, inl inp) :: map2fst h (map inr out) ->
lb_step_ordered_dynamic_failure (failed, net) lb (failed, net') tr
| LabeledStepOrderedDynamicFailure_stutter : forall net failed,
lb_step_ordered_dynamic_failure (failed, net) label_silent (failed, net) [].
Context {overlay_params : NameOverlayParams unlabeled_multi_params}.
Context {fail_msg_params : FailMsgParams unlabeled_multi_params}.
Context {new_msg_params : NewMsgParams unlabeled_multi_params}.

Lemma step_ordered_dynamic_failure_star_lb_step_reachable :
step_star_lb_step_reachable lb_step_ordered_dynamic_failure step_ordered_dynamic_failure step_ordered_dynamic_failure_init.