ChoiceBag (E, C): trait
% A bag with a weakly-specified choose operator
includes Bag
introduces
choose: C -> E
rest: C -> C
isEmpty: C -> Bool
asserts forall e, e1: E, b: C
b \neq {} => choose(b) \in b;
b \neq {} => rest(b) = delete(choose(b), b);
isEmpty(b) == b = {}
implies
Container (choose for head, rest for tail,
{} for empty)
C partitioned by choose, rest, isEmpty
forall e: E, b: C
b \neq {} => b = insert(choose(b), rest(b))
[Table of Contents] [Index]