7 /* ensures fresh(result) /\ result' = { }; */
12 /* requires c^.activeIters = 0; */
14 /* ensures c' = { }; */
17 void erc_insert(erc c, eref er)
19 /* requires c^.activeIters = 0 /\ er \neq erefNIL; */
21 /* ensures c' = [insert(er, c^.val), 0]; */
24 | bool : void | erc_delete(erc c, eref er)
26 /* requires c^.activeIters = 0; */
28 /* ensures result = er \in c^.val
29 /\ c' = [delete(er, c^.val), 0]; */
32 bool erc_member(eref er, erc c)
34 /* ensures result = er \in c^.val; */
37 eref erc_choose(erc c)
39 /* requires size(c^.val) \neq 0; */
40 /* ensures result \in c^.val; */
45 /* ensures result = size(c^.val); */
48 void erc_join(erc c1, erc c2)
50 /* requires c1^.activeIters = 0; */
52 /* ensures c1' = [c1^.val \U c2^.val, 0]; */
55 char *erc_sprint(erc c)
57 /* ensures isSprint(result[]', c^) /\ fresh(result[]); */
63 /* ensures trashed(c); */
66 void erc_initMod(void)
68 modifies internalState;
72 iter erc_elements (erc c, yield eref el);