Fact sublist_refl : forall l, sublist l l.
Fact good_sublist : forall l l', sublist l l' -> good embeds l -> good embeds l'.
Fact bad_sublist :  forall l l', sublist l' l -> bad embeds l -> bad embeds l'.
Fact greater_add_letter : forall a w ws, greater embeds w ws ->
greater embeds (a :: w) ws.
Fact greater_remove_letter : forall a w ws,
greater embeds w ws -> greater embeds (a :: w) ws.
Fact sorted_remove_head : forall a l, sorted leA (a::l) -> sorted leA l.

(* Specifications: *)
Lemma sorted_remove_inner : forall a a' l, sorted leA (a::a'::l) -> sorted leA (a::l).
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).