# Module "ordsets"

This module provides ordered sets. The ordered sets are
represented by lists [x_{1}, .., x_{n}]. The lists
must be ordered and duplicate free. If this precondition is
violated the behaviour of the predicates is undefined.

Examples:

?- ord_union([2,3,4],[1,2,4,5],X).

X = [1,2,3,4,5]

?- ord_union([1,2,4,5],[2,3,4],X).

X = [1,2,3,4,5]

The realization uses a membership check based on (==)/2 and
lexical ordering based on (@<)/2. As a result the predicates
are safe to be used with non-ground terms. On the other hand,
since this comparison is not arithmetical, 1 and 1.0 are for
example considered different.

An unordered set can be converted into an ordered set by using
the ISO predicate sort/2. Also there is no need for predicate
permutation/2 here, since equality of ordered sets can be tested
via the ISO predicate ==/2, provided the elements are sufficiently
normalized.

The following ordered sets predicates are provided:

**ord_contains(E, O):**
- The predicate succeeds when the set O contains the element E.
**ord_difference(O1, O2, O3):**
- The predicate succeeds when O3 unifies with the difference of
O1 by O2.
**ord_intersection(O1, O2, O3):**
- The predicate succeeds when O3 unifies with the intersection
of O1 and O2.
**ord_union(O1, O2, O3):**
- The predicate succeeds when O3 unifies with the union of O1
and O2.
**ord_subset(O1, O2):**
- The predicate succeeds when O1 is a subset of O2.

## Comments