Proof using.
move => net failed tr H_st.
apply step_failure_pt_mapped_simulation_star_1 in H_st.
break_exists.
break_and.
exists x.
rewrite -pt_map_net_deserialize_net.
have H_eq_n: failed = map (@tot_map_name _ _ _ _ multi_params_orig_name_tot_map) failed by rewrite /tot_map_name /= map_id.
rewrite {1}H_eq_n.
split => //.
rewrite -H0.
have <-: tr = filterMap (@pt_map_trace_occ _ _ _ _ _ orig_multi_params_name_tot_map) tr.
rewrite /pt_map_trace_occ /= /id.
clear.
elim: tr => //=.
case => a; case => b l IH; first by rewrite -IH.
rewrite -IH.
set fm := filterMap _ _.
have H_b: b = fm.
rewrite /fm {fm}.
elim: b => //=.
move => o l' IH'.
by rewrite -IH'.
by rewrite H_b.
by [].
Qed.

(* Specifications: *)
Lemma step_ordered_failure_deserialized_simulation :
forall net net' failed failed' tr,
@step_ordered_failure _ _ serialized_name_overlay_params serialized_fail_msg_params (failed, net) (failed', net') tr ->
@step_ordered_failure _ _ orig_name_overlay_params orig_fail_msg_params (failed, deserialize_onet net) (failed', deserialize_onet net') tr \/
deserialize_onet net = deserialize_onet net' /\ failed = failed' /\ tr = [].