SET signature
functor MkTreapTable
A set $S$ is a finite collection of unique elements of some type and the size of $S$, denoted by $|S|$, is the number of elements in that set. The crucial difference between a set in the mathematical sense and a set in this library is that a set here is always ordered implicitly for enumeration purposes. The empty set is denoted by $\emptyset$.
structure Key : EQKEY
structure Seq : SEQUENCE
type set
type key = Key.t
val size : set -> int
val toString : set -> string
val toSeq : set -> key Seq.seq
val empty : unit -> set
val singleton : key -> set
val fromSeq : key Seq.seq -> set
val find : set -> key -> bool
val insert : key -> set -> set
val delete : key -> set -> set
val filter : (key -> bool) -> set -> set
val union : set * set -> set
val intersection : set * set -> set
val difference : set * set -> set
type t = set
val $ : key -> set
structure Key : EQKEYKey substructure defines the type of
elements in a set, providing equality and toString
functions on such elements.structure Seq :
SEQUENCESeq substructure defines the underlying
SEQUENCE type to
and from which sets can be converted.type settype key = Key.tKey.t.val size :
set -> int(size X) evaluates to $|X|$,
the number of elements in the set $X$.val toString :
set -> string(toString X) evaluates to a string representation
of $X$. This representation begins with “{”,
followed by the results of applying Key.toString to
each element of $X$ in some order interleaved with
“,”, and ends with
“}”.val toSeq :
set -> key Seq.seq(toSeq X) evaluates to a sequence
containing all elements in the set $X$. The ordering of
the sequence is implementation-defined.val empty :
unit -> set(empty ()) evaluates to the empty set, $\emptyset$.val singleton :
key -> set(singleton x) evaluates to the set
containing only the element $x$.val fromSeq :
key Seq.seq -> set(fromSeq S) evaluates to the set
$\{S_0,S_1,\ldots,S_{n-1}\}$.
The ordering in the set representation may differ from
the ordering in the sequence representation.val find :
set -> key -> bool(find X k) evaluates to true if and
only if $k$ is a memeber of the set $X$.val insert :
key -> set -> set(insert k X) evaluates to the set $X\cup\{k\}$.val delete :
key -> set -> set(delete k X) evaluates to the set $X\setminus\{k\}$.val filter :
(key -> bool) -> set -> set(filter p X) evaluates to the subset $X'$ of $X$ such
that an element $x\in X'$ if and only if $p(x)$ evaluates to true.val union :
set * set -> set(union (X, Y)) evaluates to the set $X\cup Y$.val intersection :
set * set -> set(intersection (X, Y)) evaluates to the set $X\cap Y$.val difference :
set * set -> set(difference (X, Y)) evaluates to the set
$X\setminus Y$.