use DocLog syntax for section anchors and links within the document
This commit is contained in:
@@ -296,7 +296,7 @@ of Prolog.
|
|||||||
|
|
||||||
There are two major use cases of CLP(ℤ) constraints:
|
There are two major use cases of CLP(ℤ) constraints:
|
||||||
|
|
||||||
1. [*declarative integer arithmetic*](<#clpz-integer-arith>)
|
1. [*declarative integer arithmetic*](#clpz-integer-arith)
|
||||||
|
|
||||||
2. solving *combinatorial problems* such as planning, scheduling
|
2. solving *combinatorial problems* such as planning, scheduling
|
||||||
and allocation tasks.
|
and allocation tasks.
|
||||||
@@ -310,7 +310,7 @@ The predicates of this library can be classified as:
|
|||||||
* _reification_ predicates such as `#<==>/2`
|
* _reification_ predicates such as `#<==>/2`
|
||||||
* _reflection_ predicates such as `fd_dom/2`
|
* _reflection_ predicates such as `fd_dom/2`
|
||||||
|
|
||||||
In most cases, [_arithmetic constraints_](<#clpz-arith-constraints>)
|
In most cases, [_arithmetic constraints_](#clpz-arith-constraints)
|
||||||
are the only predicates you will ever need from this library. When
|
are the only predicates you will ever need from this library. When
|
||||||
reasoning over integers, simply replace low-level arithmetic
|
reasoning over integers, simply replace low-level arithmetic
|
||||||
predicates like `(is)/2` and `(>)/2` by the corresponding CLP(ℤ)
|
predicates like `(is)/2` and `(>)/2` by the corresponding CLP(ℤ)
|
||||||
@@ -362,7 +362,8 @@ constraints is to use the dedicated `clpz` tag on
|
|||||||
foremost CLP(ℤ) experts regularly participate in these discussions
|
foremost CLP(ℤ) experts regularly participate in these discussions
|
||||||
and will help you for free on this platform.
|
and will help you for free on this platform.
|
||||||
|
|
||||||
## Arithmetic constraints {#clpz-arith-constraints}
|
{#clpz-arith-constraints}
|
||||||
|
## Arithmetic constraints
|
||||||
|
|
||||||
In modern Prolog systems, *arithmetic constraints* subsume and
|
In modern Prolog systems, *arithmetic constraints* subsume and
|
||||||
supersede low-level predicates over integers. The main advantage of
|
supersede low-level predicates over integers. The main advantage of
|
||||||
@@ -408,7 +409,8 @@ The bitwise operations `(\)/1`, `(/\)/2`, `(\/)/2`, `(>>)/2`,
|
|||||||
`(<<)/2`, `lsb/1`, `msb/1`, `popcount/1` and `(xor)/2` are also
|
`(<<)/2`, `lsb/1`, `msb/1`, `popcount/1` and `(xor)/2` are also
|
||||||
supported.
|
supported.
|
||||||
|
|
||||||
## Declarative integer arithmetic {#clpz-integer-arith}
|
{#clpz-integer-arith}
|
||||||
|
## Declarative integer arithmetic
|
||||||
|
|
||||||
The [_arithmetic constraints_](#clpz-arith-constraints) `(#=)/2`,
|
The [_arithmetic constraints_](#clpz-arith-constraints) `(#=)/2`,
|
||||||
`(#>)/2` etc. are meant to be used _instead_ of the primitives
|
`(#>)/2` etc. are meant to be used _instead_ of the primitives
|
||||||
@@ -460,7 +462,7 @@ and should therefore be deferred to more advanced lectures.
|
|||||||
|
|
||||||
For supported expressions, CLP(ℤ) constraints are drop-in
|
For supported expressions, CLP(ℤ) constraints are drop-in
|
||||||
replacements of these low-level arithmetic predicates, often yielding
|
replacements of these low-level arithmetic predicates, often yielding
|
||||||
more general programs. See [`n_factorial/2`](<#clpz-factorial>) for an
|
more general programs. See [`n_factorial/2`](#clpz-factorial) for an
|
||||||
example.
|
example.
|
||||||
|
|
||||||
This library uses goal_expansion/2 to automatically rewrite
|
This library uses goal_expansion/2 to automatically rewrite
|
||||||
@@ -497,7 +499,8 @@ primitives by providing declarative alternatives that are meant to be
|
|||||||
used instead.
|
used instead.
|
||||||
|
|
||||||
|
|
||||||
## Example: Factorial relation {#clpz-factorial}
|
{#clpz-factorial}
|
||||||
|
## Example: Factorial relation
|
||||||
|
|
||||||
We illustrate the benefit of using `(#=)/2` for more generality with a
|
We illustrate the benefit of using `(#=)/2` for more generality with a
|
||||||
simple example.
|
simple example.
|
||||||
@@ -571,7 +574,8 @@ eliminate the complexity of introducing `(is)/2` and `(=:=)/2` to
|
|||||||
beginners, since _both_ predicates are subsumed by `(#=)/2` when
|
beginners, since _both_ predicates are subsumed by `(#=)/2` when
|
||||||
reasoning over integers.
|
reasoning over integers.
|
||||||
|
|
||||||
## Combinatorial constraints {#clpz-combinatorial}
|
{#clpz-combinatorial}
|
||||||
|
## Combinatorial constraints
|
||||||
|
|
||||||
In addition to subsuming and replacing low-level arithmetic
|
In addition to subsuming and replacing low-level arithmetic
|
||||||
predicates, CLP(ℤ) constraints are often used to solve combinatorial
|
predicates, CLP(ℤ) constraints are often used to solve combinatorial
|
||||||
@@ -581,7 +585,8 @@ most frequently used *combinatorial constraints* are `all_distinct/1`,
|
|||||||
several other constraints like `disjoint2/1` and `automaton/8`, which are
|
several other constraints like `disjoint2/1` and `automaton/8`, which are
|
||||||
useful in more specialized applications.
|
useful in more specialized applications.
|
||||||
|
|
||||||
## Domains {#clpz-domains}
|
{#clpz-domains}
|
||||||
|
## Domains
|
||||||
|
|
||||||
Each CLP(ℤ) variable has an associated set of admissible integers,
|
Each CLP(ℤ) variable has an associated set of admissible integers,
|
||||||
which we call the variable's *domain*. Initially, the domain of each
|
which we call the variable's *domain*. Initially, the domain of each
|
||||||
@@ -597,7 +602,8 @@ is automatically unified to that element.
|
|||||||
Domains are taken into account when further constraints are stated,
|
Domains are taken into account when further constraints are stated,
|
||||||
and by enumeration predicates like labeling/2.
|
and by enumeration predicates like labeling/2.
|
||||||
|
|
||||||
## Example: Sudoku {#clpz-sudoku}
|
{#clpz-sudoku}
|
||||||
|
## Example: Sudoku
|
||||||
|
|
||||||
As another example, consider _Sudoku_: It is a popular puzzle
|
As another example, consider _Sudoku_: It is a popular puzzle
|
||||||
over integers that can be easily solved with CLP(ℤ) constraints.
|
over integers that can be easily solved with CLP(ℤ) constraints.
|
||||||
@@ -650,7 +656,8 @@ In this concrete case, the constraint solver is strong enough to find
|
|||||||
the unique solution without any search.
|
the unique solution without any search.
|
||||||
|
|
||||||
|
|
||||||
## Residual goals {#clpz-residual-goals}
|
{#clpz-residual-goals}
|
||||||
|
## Residual goals
|
||||||
|
|
||||||
Here is an example session with a few queries and their answers:
|
Here is an example session with a few queries and their answers:
|
||||||
|
|
||||||
@@ -700,7 +707,8 @@ This library also provides _reflection_ predicates (like `fd_dom/2`,
|
|||||||
domain. These predicates can be useful if you want to implement your
|
domain. These predicates can be useful if you want to implement your
|
||||||
own labeling strategies.
|
own labeling strategies.
|
||||||
|
|
||||||
## Core relations and search {#clpz-search}
|
{#clpz-search}
|
||||||
|
## Core relations and search
|
||||||
|
|
||||||
Using CLP(ℤ) constraints to solve combinatorial tasks typically
|
Using CLP(ℤ) constraints to solve combinatorial tasks typically
|
||||||
consists of two phases:
|
consists of two phases:
|
||||||
@@ -772,7 +780,8 @@ to reduce the domains of remaining variables to singleton sets. In
|
|||||||
general though, it is necessary to label all variables to obtain
|
general though, it is necessary to label all variables to obtain
|
||||||
ground solutions.
|
ground solutions.
|
||||||
|
|
||||||
## Example: Eight queens puzzle {#clpz-n-queens}
|
{#clpz-n-queens}
|
||||||
|
## Example: Eight queens puzzle
|
||||||
|
|
||||||
We illustrate the concepts of the preceding sections by means of the
|
We illustrate the concepts of the preceding sections by means of the
|
||||||
so-called _eight queens puzzle_. The task is to place 8 queens on an
|
so-called _eight queens puzzle_. The task is to place 8 queens on an
|
||||||
@@ -851,7 +860,8 @@ separated the core relation from the actual search.
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Optimisation {#clpz-optimisation}
|
{#clpz-optimisation}
|
||||||
|
## Optimisation
|
||||||
|
|
||||||
We can use `labeling/2` to minimize or maximize the value of a CLP(ℤ)
|
We can use `labeling/2` to minimize or maximize the value of a CLP(ℤ)
|
||||||
expression, and generate solutions in increasing or decreasing order
|
expression, and generate solutions in increasing or decreasing order
|
||||||
@@ -876,7 +886,8 @@ Related to optimisation with CLP(ℤ) constraints are `library(simplex)`
|
|||||||
and CLP(Q) which reason about _linear_ constraints over rational
|
and CLP(Q) which reason about _linear_ constraints over rational
|
||||||
numbers.
|
numbers.
|
||||||
|
|
||||||
## Reification {#clpz-reification}
|
{#clpz-reification}
|
||||||
|
## Reification
|
||||||
|
|
||||||
The constraints `(in)/2`, `(#=)/2`, `(#\=)/2`, `(#<)/2`, `(#>)/2`,
|
The constraints `(in)/2`, `(#=)/2`, `(#\=)/2`, `(#<)/2`, `(#>)/2`,
|
||||||
`(#=<)/2`, and `(#>=)/2` can be _reified_, which means reflecting
|
`(#=<)/2`, and `(#>=)/2` can be _reified_, which means reflecting
|
||||||
@@ -897,7 +908,8 @@ The constraints of this table are reifiable as well.
|
|||||||
When reasoning over Boolean variables, also consider using CLP(B)
|
When reasoning over Boolean variables, also consider using CLP(B)
|
||||||
constraints as provided by `library(clpb)`.
|
constraints as provided by `library(clpb)`.
|
||||||
|
|
||||||
## Enabling monotonic CLP(ℤ) {#clpz-monotonicity}
|
{#clpz-monotonicity}
|
||||||
|
## Enabling monotonic CLP(ℤ)
|
||||||
|
|
||||||
In the default execution mode, CLP(ℤ) constraints still exhibit some
|
In the default execution mode, CLP(ℤ) constraints still exhibit some
|
||||||
non-relational properties. For example, _adding_ constraints can yield
|
non-relational properties. For example, _adding_ constraints can yield
|
||||||
@@ -933,7 +945,8 @@ expressions with the functor `(?)/1` or `(#)/1`. For example:
|
|||||||
The wrapper can be omitted for variables that are already constrained
|
The wrapper can be omitted for variables that are already constrained
|
||||||
to integers.
|
to integers.
|
||||||
|
|
||||||
## Custom constraints {#clpz-custom-constraints}
|
{#clpz-custom-constraints}
|
||||||
|
## Custom constraints
|
||||||
|
|
||||||
We can define custom constraints. The mechanism to do this is not yet
|
We can define custom constraints. The mechanism to do this is not yet
|
||||||
finalised, and we welcome suggestions and descriptions of use cases
|
finalised, and we welcome suggestions and descriptions of use cases
|
||||||
|
|||||||
Reference in New Issue
Block a user