Fixpoint merge_label (ws : list (list A)) (l : list A) {struct l} : list (list A) :=
match ws,l with 
| w::ws', a::l' => (a::w)::(merge_label ws' l')
| ws', nil => ws'
| nil, _ => nil
end.

Lemma good_merge : forall vs, good embeds vs -> forall l, sorted leA l -> good embeds (merge_label vs l).