Like a Scheme list, a Sol set is a collection of things. Unlike a Scheme list, a Sol set can be either finite or infinite, ordered or unordered. Every Scheme list has an explicit external representation, but many Sol sets don't have one, either because they are infinite (the set of complex numbers), implementation dependent (the set of characters), or are the result of set operations which don't reduce to an explicit set. Sol sets are hierarchical -- just as COMPLEX is a subset of NUMBER, all Sol entities are also subsets of the SOL set.
Sol defines a special set of procedures called set operators. The process of applying a set operator (operator for short) to a set is called an operation, and every operation results in a new (possibly empty) set. Once created Sol sets can not be modified -- a condition which facilitates the implementation of distributed processing.
Sol sets come in three basic flavors. There are the core sets, which form the basis of all other sets and are always available as part of the language environment. There are fundamental sets, a designation which includes the core sets and explicit user-defined sets. And there are derived sets, which are the result of set operations on fundamental or derived sets, e.g. (union boolean integer). Sets and set operations provide Sol with one of the most powerful typing systems of any programming language, as well as lexical parallelism -- one can see concurrency in a Sol program simply by examining the source code.