module Make:
type term
A term denotes a disjoint sum of sets with unification
variables inside.
val variable : Set.t -> term
variable s returns a fresh unification variable whose
denotation cannot intersect s.
val svariable : unit -> term
svariable () is equivalent to variable Set.empty.
val empty : term
empty denotes the constant empty set.
val sum : Set.t -> term -> term
sum s t adds s to the sum denoted by t.
Error is raised if s intersects t.
val unify : term -> term -> unit
unify t t' solves the equality between two disjoint sums
by determining the unification variable if necessary.
If the equality is not satisfiable, Error is raised.
exception Error
Error is raised if the construction of a disjoint sum has
failed.
val print : term -> string
print t returns a string representation of the disjoint
sum t.