imports employee; mutable type empset; empset empset_create(void) { /* ensures fresh(result) /\ result' = { }; */ } void empset_final(empset s) { modifies s; /* ensures trashed(s); */ } void empset_clear(empset s) { modifies s; /* ensures s' = { }; */ } bool empset_insert(empset s, employee e) { modifies s; /* ensures result = ~(e \in s^) /\ s' = insert(e, s^); */ } void empset_insertUnique(empset s, employee e) { /* requires ~(e \in s^); */ modifies s; /* ensures s' = insert(e, s^); */ } bool empset_delete(empset s, employee e) { modifies s; /* ensures result = e \in s^ /\ s' = delete(e, s^); */ } empset empset_union(empset s1, empset s2) { /* ensures result' = s1^ \U s2^ /\ fresh(result); */ } empset empset_disjointUnion(empset s1, empset s2) { /* requires s1^ \I s2^ = { }; */ /* ensures result' = s1^ \U s2^ /\ fresh(result); */ } void empset_intersect(empset s1, empset s2) { modifies s1; /* ensures s1' = s1^ \I s2^; */ } int empset_size(empset s) { /* ensures result = size(s^); */ } bool empset_member(employee e, empset s) { /* ensures result = e \in s^; */ } bool empset_subset(empset s1, empset s2) { /* ensures result = s1^ \subseteq s2^; */ } employee empset_choose(empset s) { /* requires s^ \neq { }; */ /* ensures result \in s^; */ } char *empset_sprint(empset s) { /* ensures isSprint(result[]', s^) /\ fresh(result[]); */ } void empset_initMod(void) { ensures true; }