Finite Domains: ic

## 1.2 Finite Domains: ic

- Integer Domain
- Symbolic Domain: ic_symbolic
- Global Constraints: ic_global
- Scheduling Constraints

### 1.2.1 Integer Domain

The standard constraint solver offered by most constraint programming systems is the finite domain solver, which applies constraint propagation techniques developed in the AI community [21]. ECLiPSe supports finite domain constraints via the ic library2. This library implements finite domains of integers, and the usual functions and constraints on variables over these domains.

### 1.2.2 Symbolic Domain: ic_symbolic

In addition to integer domains, ECLiPSe offers finite domains of ordered non-numeric values, for example red, green, blue. These are implemented by the ic_symbolic library.
Whilst there is a standard set of constraints supported by the ic library in ECLiPSe and in most constraint programming systems, many more finite domain constraints have been introduced which have uses in specific applications and do not belong in a generic constraint programming library. The behaviour of these constraints is to prune the finite domains of their variables, in just the same way as the standard constraints. Therefore ECLiPSe offers several further libraries which implement more constraints using the ic library.

### 1.2.3 Global Constraints: ic_global

One such library is ic_global. It supports a variety of constraints, each of which takes as an argument a list of finite domain variables, of unspecified length. Such constraints are called “global” constraints [2]. Examples of such constraints, available from the ic_global library are `alldifferent/1`, `maxlist/2`, `occurrences/3` and `sorted/2`.

### 1.2.4 Scheduling Constraints

There are several ECLiPSe libraries implementing global constraints for scheduling applications. The constraints have the same semantics, but different propagation. The constraints take a list of tasks (start times, durations and resource needs), and a maximum resource level. They reduce the finite domains of the task start times by reasoning on resource bottlenecks [13]. Three ECLiPSe libraries implementing scheduling constraints are cumulative, edge_finder and edge_finder3.