Module Predicates records the occurrences of predicates as parameters of (doubly -)linked lists and Epara. Provides unique numbering for predicates and an iterator.

`type env`````

predicate environment

`val empty_env : unit ‑> env`

create an empty predicate environment

`val is_empty : env ‑> bool`

return true if the environment is empty

`val iter : env ‑> (int ‑> hpara ‑> unit) ‑> (int ‑> hpara_dll ‑> unit) ‑> unit`

`iter env f f_dll` iterates `f` and `f_dll` on all the hpara and hpara_dll, passing the unique id to the functions. The iterator can only be used once.

`val process_hpred : env ‑> hpred ‑> unit`

Process one hpred, updating the predicate environment