### 4.1 Set Variables and Set Domains

Set is defined as an ordered collection of integers using class org.jacop.core.IntervalDomain
and a set domain as abstract class org.jacop.set.core.SetDomain. Currently, there exist
only one implementation of set domain as a set interval, called BoundSetDomain. The set
interval for BoundSetDomain d is defined by its greatest lower bound (glb(d)) and its least
upper bound (lub(d)). For example, set domain d = {{1}..{1..3}} is defined with
glb(d) = {1}, set containing element 1, and lub(d) = {1..3}, set containing elements 1, 2
and 3. This set domain represent a set of sets {{1},{1..2},{1,3},{1..3}}. Each set
domain to be correct must have glb(d) ⊆ lub(d). glb(d) can be considered as a set of
all elements that are members of the set and lub(d) specifies the largest possible
set.

The following statement defines set variable s for the set domain discussed
above.

SetVar s = new SetVar(store, "s", new BoundSetDomain(new IntervalDomain(1,1), new IntervalDomain(1,3)));
BoundSetDomain can specify a typical set domain, such as d = {{}..{1..3}}, in a simple
way as

SetVar s = new SetVar(store, "s", 1, 3);
and an empty set domain as

SetVar s = new SetVar(store, "s", new BoundSetDomain());
Set domain can be created using IntervalDomain and BoundSetDomain class methods.
They make it possible to form different sets by adding elements to sets.