Proof using name_map_bijective multi_map_congr.
move => net tr H_step.
remember step_ordered_init as y in *.
move: Heqy.
induction H_step using refl_trans_1n_trace_n1_ind => H_init /=.
rewrite H_init.
rewrite /step_ordered_init /= /pt_ext_map_net /=.
rewrite pt_ext_init_handlers_fun_eq.
exists [].
exact: RT1nTBase.
concludes.
rewrite H_init in H_step2 H_step1.
apply step_ordered_pt_ext_mapped_simulation_1 in H.
case: H => H.
move: IHH_step1 => [tr' H_star].
move: H => [tr'' H].
exists (tr' ++ tr'').
have H_trans := refl_trans_1n_trace_trans H_star.
apply: H_trans.
have ->: tr'' = tr'' ++ [] by rewrite -app_nil_end.
apply: (@RT1nTStep _ _ _ _ (pt_ext_map_onet x'')) => //.
exact: RT1nTBase.
move: H => [H_eq H_eq'].
move: IHH_step1 => [tr' H_star].
exists tr'.
by rewrite /pt_ext_map_onet H_eq H_eq'.
Qed.
Context {overlay_fst : NameOverlayParams multi_fst}.
Context {overlay_snd : NameOverlayParams multi_snd}.
Context {overlay_map_congr : NameOverlayParamsTotalMapCongruency overlay_fst overlay_snd name_map}.
Context {fail_msg_fst : FailMsgParams multi_fst}.
Context {fail_msg_snd : FailMsgParams multi_snd}.
Context {fail_msg_map_congr : FailMsgParamsPartialMapCongruency fail_msg_fst fail_msg_snd msg_map}.

(* Specifications: *)
Theorem step_ordered_failure_pt_ext_mapped_simulation_1 :
forall net net' failed failed' tr,
@step_ordered_failure _ _ overlay_fst fail_msg_fst (failed, net) (failed', net') tr ->
(exists tr', @step_ordered_failure _ _ overlay_snd fail_msg_snd (map tot_map_name failed, pt_ext_map_onet net) (map tot_map_name failed', pt_ext_map_onet net') tr') \/ pt_ext_map_onet net' = pt_ext_map_onet net /\ failed = failed'.