void AddEntry(DomainType I, RsmgeType V, boolft AddedOk); /* modifies: self, AddedOk •=K post A: (\exists (EntryType e) [ ** e \iii theTable /\ Index(e) = I] ** /\ AddedOk' = false) \/ C! (\exists (EntryType e) [ e \in theTable /\ Index(e) = 1]) ** /\ theTable' = theTable \union {(I, V)} »• /\ AddedOk' = true) */ void RemoveEntryCDomainType I); /* modifies: self ** postA: theTable' = theTable-{e I e \in theTable /\ Index(e) = 1} */ void AccessTable(DomainType I, RangeTypeft V, boolft Defined); /* modifies: V, Defined ** postA: (\exists (EntryType e) [ ** e \in theTable /\ Index(e) = I /\ V = Value(e)] ** /\ Defined' = true) \/ C! (\exists (EntryType e) [ ** e \in theTable /\ Index(e) = 1]) ** /\ Defined' = false) */ void ReplaceValue(DomainType I, RangeType V, bool& ChangedOK); /* modifies: self, ChangedOK ** postA: (\exists (EntryType e) [ ** e \in theTable /\ Index(e) = I ** /\ theTable' = (theTable-{e}) \union {(I, V)}] *• /\ ChangedOk' = true) ** \/ (!(\exists (EntryType e) [ ** e \in theTable /\ Index (e) = 1]) ** /\ ChangedOk' = false) > 2.2.4 Prosper As in VDM, Prosper uses modules to control what types and operations are exported by a specification. Unlike VDM (or any other language in this survey),