Module spred. Section spred.
Variables x y z : spred.
Local Open Scope pred.

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).