Module VSM := VSM.
Proof with simpl; auto.
intros; induction l... rewrite IHl; clear IHl.
remember (nonreflex_atom a) as b; destruct b...
destruct a; simpl in *.
assert (expr_cmp e e0 = Eq).
remember (expr_cmp e e0) as b; destruct b; try reflexivity.
inversion Heqb. inversion Heqb. clear Heqb.
symmetry in H; apply comp_eq in H; auto. rewrite H.
extensionality s; apply prop_ext; split; simpl; auto.
intros [H1 H2]; auto. split; auto. apply var_eq_refl.
Qed.

Lemma list_denote_normalize_pure_atoms :
forall Q (B:spred) (l:list pure_atom)
(Qassoc: forall x y z , Q x (Q y z) = Q (Q x y) z)
(Qsymm: forall x y, Q x y = Q y x)
(Hcmp: forall x y, Eq = pure_atom_cmp x y ->
(forall P, Q (pure_atom_denote x) (Q (pure_atom_denote y) P) =
Q (pure_atom_denote y) P)),
list_denote pure_atom_denote Q B l =
list_denote pure_atom_denote Q B (normalize_atoms l).