Proof using.
move => net tr H_st.
apply step_async_pt_mapped_simulation_star_1 in H_st.
break_exists.
break_and.
exists x.
rewrite -pt_map_net_deserialize_net.
split => //.
find_reverse_rewrite.
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_failure_deserialized_simulation :
forall net net' failed failed' tr,
@step_failure _ _ serialized_failure_params (failed, net) (failed', net') tr ->
@step_failure _ _ orig_failure_params (failed, deserialize_net net) (failed', deserialize_net net') tr \/
(deserialize_net net' = deserialize_net net /\ failed = failed').