apply prop_ext; split.
intro A. assert (B : exists z, OrderedClause.eq y z /\ In z (M.elements s0)).
unfold OrderedClause.eq. eauto.
rewrite <- SetoidList.InA_alt, M.elements_spec1 in B. auto.
rewrite <- M.elements_spec1, SetoidList.InA_alt; intros [z [A B]].
subst; auto.
Qed.

(* Specifications: *)
Lemma empty_set_elems : M.elements M.empty = nil. (* !!! why not in stdlib *)
Proof with simpl; auto.