{log} (read `set-log') is an extended
logic programming language that embodies the fundamental forms of set designation
and a number of primitive operations for set management.
Sets are designated primarily by
the explicit enumeration of all its elements (extensional sets),
by using set terms. Sets can contain not only atoms as their
elements, but also other sets (nested sets), with no restriction
over the level of set nesting.
In addition, a set can be designated
in \setlog by stating a property that must be satisfied by all its elements
(intensional sets), by using simple intensional set terms.
The language also provides a number
of basic primitive operations for set management: in (set
membership), = (equality), un (union),
dis (disjointness), along with their negative
counterparts nin, neq, nun, ndis.
All these operations are dealt with as constraints, and,
hence, can be used with no concern about the instantiations
of their arguments, and inreducible constraints can occur in the
computed answer.
Furthermore, {log} provides
restricted universal quantifiers (RUQ) for aggregate operations.
Other set-theoretic operations,
such as intersection, difference, powerset, etc., can be effectively
programmed in the language itself.