4 only empset empset_create(void)
6 /* ensures fresh(result) /\ result' = { }; */
9 void empset_final (only empset s)
12 /* ensures trashed(s); */
15 void empset_clear(empset s)
18 /* ensures s' = { }; */
21 | bool : void | empset_insert (empset s, employee e) internalState;
23 modifies s, internalState;
24 /* ensures result = ~(e \in s^) /\ s' = insert(e, s^); */
27 void empset_insertUnique (empset s, employee e) internalState;
29 /* requires ~(e \in s^); */
30 modifies s, internalState;
31 /* ensures s' = insert(e, s^); */
34 | bool : void | empset_delete(empset s, employee e)
37 /* ensures result = e \in s^ /\ s' = delete(e, s^); */
40 only empset empset_union(empset s1, empset s2) internalState;
42 modifies internalState;
43 /* ensures result' = s1^ \U s2^ /\ fresh(result); */
46 only empset empset_disjointUnion (empset s1, empset s2) internalState;
48 modifies internalState;
49 /* requires s1^ \I s2^ = { }; */
50 /* ensures result' = s1^ \U s2^ /\ fresh(result); */
53 void empset_intersect (empset s1, empset s2) internalState;
55 modifies s1, internalState;
56 /* ensures s1' = s1^ \I s2^; */
59 int empset_size(empset s)
61 /* ensures result = size(s^); */
64 bool empset_member(employee e, empset s)
66 /* ensures result = e \in s^; */
69 bool empset_subset(empset s1, empset s2)
71 /* ensures result = s1^ \subseteq s2^; */
74 employee empset_choose(empset s)
76 /* requires s^ \neq { }; */
77 /* ensures result \in s^; */
80 only char *empset_sprint(empset s)
82 /* ensures isSprint(result[]', s^) /\ fresh(result[]); */
85 void empset_initMod (void) internalState;
87 modifies internalState;
91 iter empset_elements (empset s, yield employee x);