Load loadpath.
veristar.list_denote veristar.model_type veristar.model
veristar.basic veristar.compare.
Module Type SPRED_LEMMAS.
Declare Module VSM : VERISTAR_MODEL.
End SPRED_LEMMAS.
Module SPredLemmas (VSM : VERISTAR_MODEL) <: SPRED_LEMMAS
with Module VSM := VSM.
Module VSM := VSM.
(* properties of spred operators *)
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).