Proof using name_map_bijective.
elim => //=.
move => n ns IH f h m m' H_eq.
rewrite /= (IH _ _ _  m') //=.
rewrite 2!tot_map_name_inv_inverse /=.
set f1 := fun _ _ => _.
set f2 := update2 _ _ _ _ _.
have H_eq_f: f1 = f2.
rewrite /f1 /f2 {f1 f2}.
have H_eq' := pt_map_msg_update2 f (f n h ++ [m]) h n.
rewrite filterMap_app in H_eq'.
by rewrite H_eq' /= H_eq.
by rewrite H_eq_f.
Qed.

(* Specifications: *)
Theorem step_ordered_dynamic_failure_pt_mapped_simulation_1 :
forall net net' failed failed' tr,
NoDup (odnwNodes net) ->
@step_ordered_dynamic_failure _ _ overlay_fst new_msg_fst fail_msg_fst (failed, net) (failed', net') tr ->
@step_ordered_dynamic_failure _ _ overlay_snd new_msg_snd fail_msg_snd (map tot_map_name failed, pt_map_odnet net) (map tot_map_name failed', pt_map_odnet net') (filterMap pt_map_trace_ev tr) \/
pt_map_odnet net' = pt_map_odnet net /\ failed = failed' /\ filterMap pt_map_trace_ev tr = [].