Proof using name_map_bijective.
apply: NoDup_Permutation; last split.
- exact: no_dup_nodes.
- apply nodup_to_map_name.
exact: no_dup_nodes.
- move => H_in.
set x' := tot_map_name_inv x.
have H_in' := all_names_nodes x'.
apply in_split in H_in'.
move: H_in' => [ns1 [ns2 H_eq]].
rewrite H_eq map_app /= /x'.
apply in_or_app.
right; left.
by rewrite tot_map_name_inverse_inv.
- move => H_in.
exact: all_names_nodes.
Qed.
Context {overlay_fst : NameOverlayParams multi_fst}.
Context {overlay_snd : NameOverlayParams multi_snd}.
Context {overlay_map_congr : NameOverlayParamsTotalMapCongruency overlay_fst overlay_snd name_map}.

(* Specifications: *)
Lemma tot_map_in_snd :
forall h m ns nm,
In nm
(map
(fun nm0 : name * msg =>
(tot_map_name (fst nm0), tot_map_msg (snd nm0)))
(map2snd m (filter_rel adjacent_to_dec h ns))) ->
snd nm = tot_map_msg m.