### 2.1.5. Describing symmetries between arguments

Given a satisfied ground instance of a global constraint $\mathrm{𝚌𝚘𝚗𝚜𝚝𝚛𝚊𝚒𝚗𝚝}$, it is often the case that the constraint is still satisfied [CohenJeavonsJeffersonPetrieSmith06], [FlenerPearsonSellmannVanHentenryckAgren09] if we permute:

We provide the following moves, where each move is described by (1) an explicit fact (i.e., a meta -data), (2) a textual explanation, and (3) several concrete examples:

• $\mathrm{𝚊𝚛𝚐𝚜}\left(\mathrm{𝙿𝙴𝚁𝙼𝚄𝚃𝙰𝚃𝙸𝙾𝙽}\right)$ denotes the fact that we swap the arguments of a constraint with respect to a given permutation. Arguments which are exchanged must have the same type under the hypothesis that they are ground (i.e., for instance the basic data types $\mathrm{𝚒𝚗𝚝}$ and $\mathrm{𝚍𝚟𝚊𝚛}$, which respectively denote an integer value and a domain variable can be exchanged since a ground domain variable corresponds to an integer value). The permutation $\mathrm{𝙿𝙴𝚁𝙼𝚄𝚃𝙰𝚃𝙸𝙾𝙽}$ is described by using standard notation, that is by providing the different cycles of the permutation.

EXAMPLE 1: As a first example where we can swap two arguments, consider the $\mathrm{𝚎𝚚}_\mathrm{𝚌𝚜𝚝}$$\left(\mathrm{𝚅𝙰𝚁}\mathtt{1},\mathrm{𝚅𝙰𝚁}\mathtt{2},\mathrm{𝙲𝚂𝚃}\mathtt{2}\right)$ constraint which, given two domain variables $\mathrm{𝚅𝙰𝚁}\mathtt{1}$, $\mathrm{𝚅𝙰𝚁}\mathtt{2}$ and an integer value $\mathrm{𝙲𝚂𝚃}\mathtt{2}$, enforces the condition $\mathrm{𝚅𝙰𝚁}\mathtt{1}=\mathrm{𝚅𝙰𝚁}\mathtt{2}+\mathrm{𝙲𝚂𝚃}\mathtt{2}$. Within the electronic catalogue this is represented by the following meta -data, $\mathrm{𝚊𝚛𝚐𝚜}\left(\left[\left[\mathrm{𝚅𝙰𝚁}\mathtt{1}\right],\left[\mathrm{𝚅𝙰𝚁}\mathtt{2},\mathrm{𝙲𝚂𝚃}\mathtt{2}\right]\right]\right)$, to which corresponds the following textual form:

arguments are permutable w.r.t. permutation $\left(\mathrm{𝚅𝙰𝚁}\mathtt{1}\right)$ $\left(\mathrm{𝚅𝙰𝚁}\mathtt{2},\mathrm{𝙲𝚂𝚃}\mathtt{2}\right)$.

Note that, even if arguments $\mathrm{𝚅𝙰𝚁}\mathtt{2}$ and $\mathrm{𝙲𝚂𝚃}\mathtt{2}$ do not have the same type (i.e., $\mathrm{𝚅𝙰𝚁}\mathtt{2}$ is a domain variable, while $\mathrm{𝙲𝚂𝚃}\mathtt{2}$ is an integer value), both arguments can be exchanged since we consider the ground case. For instance, since $\mathrm{𝚎𝚚}_\mathrm{𝚌𝚜𝚝}$$\left(8,\mathbf{2},\mathbf{6}\right)$ is satisfied, $\mathrm{𝚎𝚚}_\mathrm{𝚌𝚜𝚝}$$\left(8,\mathbf{6},\mathbf{2}\right)$ is also satisfied.

EXAMPLE 2: As a second example where we can swap several arguments, consider the $\mathrm{𝚌𝚘𝚖𝚖𝚘𝚗}$$\left(\mathrm{𝙽𝙲𝙾𝙼𝙼𝙾𝙽}\mathtt{1},\mathrm{𝙽𝙲𝙾𝙼𝙼𝙾𝙽}\mathtt{2},\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{1},\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{2}\right)$ constraint which, given two domain variables $\mathrm{𝙽𝙲𝙾𝙼𝙼𝙾𝙽}\mathtt{1}$, $\mathrm{𝙽𝙲𝙾𝙼𝙼𝙾𝙽}\mathtt{2}$ and two collections of domain variables $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{1}$, $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{2}$, enforces the following two conditions:

• $\mathrm{𝙽𝙲𝙾𝙼𝙼𝙾𝙽}\mathtt{1}$ is the number of variables of $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{1}$ assigned a value in $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{2}$.

• $\mathrm{𝙽𝙲𝙾𝙼𝙼𝙾𝙽}\mathtt{2}$ is the number of variables of $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{2}$ assigned a value in $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{1}$.

Within the electronic catalogue this is represented by the following meta -data, $\mathrm{𝚊𝚛𝚐𝚜}\left(\left[\left[\mathrm{𝙽𝙲𝙾𝙼𝙼𝙾𝙽}\mathtt{1},\mathrm{𝙽𝙲𝙾𝙼𝙼𝙾𝙽}\mathtt{2}\right],\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{1},\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{2}\right]\right]\right)$, to which corresponds the following textual form:

arguments are permutable w.r.t. permutation $\left(\mathrm{𝙽𝙲𝙾𝙼𝙼𝙾𝙽}\mathtt{1},\mathrm{𝙽𝙲𝙾𝙼𝙼𝙾𝙽}\mathtt{2}\right)$

$\left(\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{1},\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{2}\right)$.

For instance, since $\mathrm{𝚌𝚘𝚖𝚖𝚘𝚗}$$\left(\mathbf{3},\mathbf{4},〈\mathit{1},\mathit{9},\mathit{1},\mathit{5}〉,〈\mathit{2},\mathit{1},\mathit{9},\mathit{9},\mathit{6},\mathit{9}〉\right)$ is satisfied, $\mathrm{𝚌𝚘𝚖𝚖𝚘𝚗}$$\left(\mathbf{4},\mathbf{3},〈\mathit{2},\mathit{1},\mathit{9},\mathit{9},\mathit{6},\mathit{9}〉,〈\mathit{1},\mathit{9},\mathit{1},\mathit{5}〉\right)$ is also satisfied.

• $\mathrm{𝚒𝚝𝚎𝚖𝚜}\left(\mathrm{𝙲𝙾𝙻𝙻𝙴𝙲𝚃𝙸𝙾𝙽},\mathrm{𝙿𝙴𝚁𝙼𝚄𝚃𝙰𝚃𝙸𝙾𝙽𝚂}\right)$ denotes the fact that we can permute the items of the collection $\mathrm{𝙲𝙾𝙻𝙻𝙴𝙲𝚃𝙸𝙾𝙽}$ with respect to a permutation belonging to a given set of permutations $\mathrm{𝙿𝙴𝚁𝙼𝚄𝚃𝙰𝚃𝙸𝙾𝙽𝚂}$:

• $\mathrm{𝙲𝙾𝙻𝙻𝙴𝙲𝚃𝙸𝙾𝙽}$ stands for one of the following:

1. An argument $\mathrm{𝙰𝚁𝙶}$ of the global constraint that corresponds to a $\mathrm{𝚌𝚘𝚕𝚕𝚎𝚌𝚝𝚒𝚘𝚗}$ of items.

2. A term $\mathrm{𝙰𝚁𝙶}.\mathrm{𝚊𝚝𝚝𝚛}$, where $\mathrm{𝚊𝚝𝚝𝚛}$ is an attribute of a $\mathrm{𝚌𝚘𝚕𝚕𝚎𝚌𝚝𝚒𝚘𝚗}$ of items that is an argument $\mathrm{𝙰𝚁𝙶}$ of the global constraint; in addition, the type of $\mathrm{𝚊𝚝𝚝𝚛}$ is itself a collection. Given a collection $\mathrm{𝙰𝚁𝙶}$ of $m$ items $〈\mathrm{𝙰𝚁𝙶}\left[1\right],\mathrm{𝙰𝚁𝙶}\left[2\right],...,\mathrm{𝙰𝚁𝙶}\left[m\right]〉$, a permutation of $\mathrm{𝙿𝙴𝚁𝙼𝚄𝚃𝙰𝚃𝙸𝙾𝙽𝚂}$, not necessarily the same, is applied on the items of a subset of the set of collections $\left\{\mathrm{𝙰𝚁𝙶}\left[1\right].\mathrm{𝚊𝚝𝚝𝚛},\mathrm{𝙰𝚁𝙶}\left[2\right].\mathrm{𝚊𝚝𝚝𝚛},...,\mathrm{𝙰𝚁𝙶}\left[m\right].\mathrm{𝚊𝚝𝚝𝚛}\right\}$.

• $\mathrm{𝙿𝙴𝚁𝙼𝚄𝚃𝙰𝚃𝙸𝙾𝙽𝚂}$ represents a set of permutations. It can take one of the following values:

1. $\mathrm{𝚊𝚕𝚕}$ stands for all possible permutations. Note that this case is a little artificial since it does not really correspond to a symmetry of the constraint, but rather to the fact that we use a collection for representing a set of variables. But, to our best knowledge in 2010, concrete solvers do also not use sets of variables but rather collections, lists or arrays of variables.

2. $\mathrm{𝚛𝚎𝚟𝚎𝚛𝚜𝚎}$ stands for the set that only contains the permutation that maps the sequence ${e}_{1},{e}_{2},...,{e}_{n}$ to ${e}_{n},{e}_{n-1},...,{e}_{1}$.

3. $\mathrm{𝚜𝚑𝚒𝚏𝚝}$ stands for the set that only contains the permutation that maps the sequence ${e}_{1},{e}_{2},...,{e}_{n}$ to ${e}_{n},{e}_{1},...,{e}_{n-1}$.

EXAMPLE 1: As a first example, consider the $\mathrm{𝚊𝚕𝚕𝚍𝚒𝚏𝚏𝚎𝚛𝚎𝚗𝚝}$$\left(\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\right)$ constraint, which has one single argument corresponding to a collection of variables which must all be assigned distinct values. Within the electronic catalogue this is represented by the following meta -data, $\mathrm{𝚒𝚝𝚎𝚖𝚜}\left(\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂},\mathrm{𝚊𝚕𝚕}\right)$, to which corresponds the following textual form:

items of $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$ are permutable.

For instance, since $\mathrm{𝚊𝚕𝚕𝚍𝚒𝚏𝚏𝚎𝚛𝚎𝚗𝚝}$$\left(〈\mathbf{1},\mathbf{4},\mathbf{9}〉\right)$ is satisfied, all permutations of $〈1,4,9〉$ (i.e., $〈\mathbf{1},\mathbf{4},\mathbf{9}〉$, $〈\mathbf{1},\mathbf{9},\mathbf{4}〉$, $〈\mathbf{4},\mathbf{1},\mathbf{9}〉$, $〈\mathbf{4},\mathbf{9},\mathbf{1}〉$, $〈\mathbf{9},\mathbf{1},\mathbf{4}〉$, $〈\mathbf{9},\mathbf{4},\mathbf{1}〉$) correspond to valid solutions of the $\mathrm{𝚊𝚕𝚕𝚍𝚒𝚏𝚏𝚎𝚛𝚎𝚗𝚝}$ constraint.

EXAMPLE 2: As a second example, consider the $𝚔_\mathrm{𝚜𝚊𝚖𝚎}$$\left(\mathrm{𝚂𝙴𝚃𝚂}\right)$ constraint, which has one single argument corresponding to a collection of sets, where each set is a collection of domain variables that must be assigned the same set of values (i.e., $𝚔_\mathrm{𝚜𝚊𝚖𝚎}$ enforces an equality between multisets). The argument $\mathrm{𝚂𝙴𝚃𝚂}$ is a collection, where each item consists of one single $\mathrm{𝚜𝚎𝚝}$ attribute. The type of a $\mathrm{𝚜𝚎𝚝}$ attribute is a collection of domain variables. Within the electronic catalogue this is represented by the following meta -data, $\mathrm{𝚒𝚝𝚎𝚖𝚜}\left(\mathrm{𝚂𝙴𝚃𝚂}.\mathrm{𝚜𝚎𝚝},\mathrm{𝚊𝚕𝚕}\right)$, to which corresponds the following textual form:

items of $\mathrm{𝚂𝙴𝚃𝚂}.\mathrm{𝚜𝚎𝚝}$ are permutable.

For instance, since $𝚔_\mathrm{𝚜𝚊𝚖𝚎}$$\left(〈\mathrm{𝚜𝚎𝚝}-〈1,4,4〉,\mathrm{𝚜𝚎𝚝}-〈\mathbf{4},\mathbf{4},\mathbf{1}〉,\mathrm{𝚜𝚎𝚝}-〈1,4,4〉〉\right)$ is satisfied, it is also satisfied for all permutations of the elements of its second set $〈4,4,1〉$, i.e.:

• $\mathrm{𝚒𝚝𝚎𝚖𝚜}_\mathrm{𝚜𝚢𝚗𝚌}\left(\mathrm{𝙲𝙾𝙻𝙻𝙴𝙲𝚃𝙸𝙾𝙽𝚂},\mathrm{𝙿𝙴𝚁𝙼𝚄𝚃𝙰𝚃𝙸𝙾𝙽𝚂}\right)$ denotes the fact that we can permute the items of several collections $\mathrm{𝙲𝙾𝙻𝙻𝙴𝙲𝚃𝙸𝙾𝙽𝚂}$ with respect to a permutation belonging to a given set of permutations $\mathrm{𝙿𝙴𝚁𝙼𝚄𝚃𝙰𝚃𝙸𝙾𝙽𝚂}$ in such a way that one and the same permutation is used on all collections (i.e., therefore the keyword $\mathrm{𝚒𝚝𝚎𝚖𝚜}_\mathrm{𝚜𝚢𝚗𝚌}$ which stands for items synchronisation):

• $\mathrm{𝙲𝙾𝙻𝙻𝙴𝙲𝚃𝙸𝙾𝙽𝚂}$ stands for a non -empty list of terms of the form $\mathrm{𝙰𝚁𝙶}$ or $\mathrm{𝙰𝚁𝙶}.\mathrm{𝚊𝚝𝚝𝚛}$, where $\mathrm{𝙰𝚁𝙶}$ is an argument of the global constraint that corresponds to a collection, and $\mathrm{𝚊𝚝𝚝𝚛}$ is an attribute of $\mathrm{𝙰𝚁𝙶}$ such that its type is itself a collection. In addition, we also have the following restrictions:

1. If $\mathrm{𝙲𝙾𝙻𝙻𝙴𝙲𝚃𝙸𝙾𝙽𝚂}$ contains one single element then this element has the form $\mathrm{𝙰𝚁𝙶}.\mathrm{𝚊𝚝𝚝𝚛}$. This stems from the fact that we want to designate more than one single collection.

2. All collections designated by $\mathrm{𝙲𝙾𝙻𝙻𝙴𝙲𝚃𝙸𝙾𝙽𝚂}$ have the same type as well as the same number of items.

The same permutation of $\mathrm{𝙿𝙴𝚁𝙼𝚄𝚃𝙰𝚃𝙸𝙾𝙽𝚂}$ is applied on the items of the different collections referenced by $\mathrm{𝙲𝙾𝙻𝙻𝙴𝙲𝚃𝙸𝙾𝙽𝚂}$.

• As for the symmetry keyword $\mathrm{𝚒𝚝𝚎𝚖𝚜}$, $\mathrm{𝙿𝙴𝚁𝙼𝚄𝚃𝙰𝚃𝙸𝙾𝙽𝚂}$ represents a set of permutations. It can take the same set of values as before, namely:

1. $\mathrm{𝚊𝚕𝚕}$ stands for all possible permutations.

2. $\mathrm{𝚛𝚎𝚟𝚎𝚛𝚜𝚎}$ stands for the set that only contains the permutation that maps the sequence ${e}_{1},{e}_{2},...,{e}_{n}$ to ${e}_{n},{e}_{n-1},...,{e}_{1}$.

3. $\mathrm{𝚜𝚑𝚒𝚏𝚝}$ stands for the set that only contains the permutation that maps the sequence ${e}_{1},{e}_{2},...,{e}_{n}$ to ${e}_{n},{e}_{1},...,{e}_{n-1}$.

EXAMPLE 1: As a first example, consider the $\mathrm{𝚌𝚘𝚗𝚜𝚎𝚌𝚞𝚝𝚒𝚟𝚎}_\mathrm{𝚐𝚛𝚘𝚞𝚙𝚜}_\mathrm{𝚘𝚏}_\mathrm{𝚘𝚗𝚎𝚜}$$\left(\mathrm{𝙶𝚁𝙾𝚄𝙿}_\mathrm{𝚂𝙸𝚉𝙴𝚂},$ $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\right)$ constraint, which has two arguments $\mathrm{𝙶𝚁𝙾𝚄𝙿}_\mathrm{𝚂𝙸𝚉𝙴𝚂}$ and $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$ respectively corresponding to a collection of positive integers and to a collection of 0-1 domain variables. The constraint imposes that the $m$ successive maximum groups of consecutive ones of $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$ have sizes $\mathrm{𝙶𝚁𝙾𝚄𝙿}_\mathrm{𝚂𝙸𝚉𝙴𝚂}\left[1\right].\mathrm{𝚗𝚋}$, $\mathrm{𝙶𝚁𝙾𝚄𝙿}_\mathrm{𝚂𝙸𝚉𝙴𝚂}\left[2\right].\mathrm{𝚗𝚋}$, $...$, $\mathrm{𝙶𝚁𝙾𝚄𝙿}_\mathrm{𝚂𝙸𝚉𝙴𝚂}\left[m\right].\mathrm{𝚗𝚋}$. Note that, if we reverse the items of both $\mathrm{𝙶𝚁𝙾𝚄𝙿}_\mathrm{𝚂𝙸𝚉𝙴𝚂}$ and $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$, we still have a solution. Within the electronic catalogue this is represented by the following meta -data, $\mathrm{𝚒𝚝𝚎𝚖𝚜}_\mathrm{𝚜𝚢𝚗𝚌}\left(\left[\mathrm{𝙶𝚁𝙾𝚄𝙿}_\mathrm{𝚂𝙸𝚉𝙴𝚂},\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\right],\mathrm{𝚛𝚎𝚟𝚎𝚛𝚜𝚎}\right)$, to which corresponds the following textual form:

items of $\mathrm{𝙶𝚁𝙾𝚄𝙿}_\mathrm{𝚂𝙸𝚉𝙴𝚂}$ and $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$ are simultaneously reversable.

For instance, since $\mathrm{𝚌𝚘𝚗𝚜𝚎𝚌𝚞𝚝𝚒𝚟𝚎}_\mathrm{𝚐𝚛𝚘𝚞𝚙𝚜}_\mathrm{𝚘𝚏}_\mathrm{𝚘𝚗𝚎𝚜}$$\left(〈\mathbf{2},\mathbf{1}〉,〈\mathit{1},\mathit{1},\mathit{0},\mathit{0},\mathit{0},\mathit{1},\mathit{0}〉\right)$ is a solution, $\mathrm{𝚌𝚘𝚗𝚜𝚎𝚌𝚞𝚝𝚒𝚟𝚎}_\mathrm{𝚐𝚛𝚘𝚞𝚙𝚜}_\mathrm{𝚘𝚏}_\mathrm{𝚘𝚗𝚎𝚜}$$\left(〈\mathbf{1},\mathbf{2}〉,〈\mathit{0},\mathit{1},\mathit{0},\mathit{0},\mathit{0},\mathit{1},\mathit{1}〉\right)$ is also a valid solution.

EXAMPLE 2: As a second example, consider the $\mathrm{𝚗𝚟𝚎𝚌𝚝𝚘𝚛}$$\left(\mathrm{𝙽𝚅𝙴𝙲},\mathrm{𝚅𝙴𝙲𝚃𝙾𝚁𝚂}\right)$ constraint, which has two arguments $\mathrm{𝙽𝚅𝙴𝙲}$ and $\mathrm{𝚅𝙴𝙲𝚃𝙾𝚁𝚂}$ respectively corresponding to a domain variable and to a collection of collections of domain variables, where all collections have the same number of items. The unique attribute of $\mathrm{𝚅𝙴𝙲𝚃𝙾𝚁𝚂}$ is denoted by $\mathrm{𝚟𝚎𝚌}$ and its type is a collection of domain variables. Each collection is interpreted as a vector and two vectors are distinct if and only if they differ in at least one component. The $\mathrm{𝚗𝚟𝚎𝚌𝚝𝚘𝚛}$ constraint enforces $\mathrm{𝙽𝚅𝙴𝙲}$ to be equal to the number of distinct vectors within $\mathrm{𝚅𝙴𝙲𝚃𝙾𝚁𝚂}$. If we permute the components of all vectors with respect to a same permutation we still have the same number of distinct vectors. Within the electronic catalogue this is represented by the following meta -data, $\mathrm{𝚒𝚝𝚎𝚖𝚜}_\mathrm{𝚜𝚢𝚗𝚌}\left(\left[\mathrm{𝚅𝙴𝙲𝚃𝙾𝚁𝚂}.\mathrm{𝚟𝚎𝚌}\right],\mathrm{𝚊𝚕𝚕}\right)$, to which corresponds the following textual form:

items of $\mathrm{𝚅𝙴𝙲𝚃𝙾𝚁𝚂}.\mathrm{𝚟𝚎𝚌}$ are permutable (same permutation used).

For instance, since $\mathrm{𝚗𝚟𝚎𝚌𝚝𝚘𝚛}$$\left(2,〈\mathrm{𝚟𝚎𝚌}-〈\mathbf{1},\mathbf{1},\mathbf{8}〉,\mathrm{𝚟𝚎𝚌}-〈\mathbf{5},\mathbf{1},\mathbf{6}〉,\mathrm{𝚟𝚎𝚌}-〈\mathbf{1},\mathbf{1},\mathbf{8}〉〉\right)$ is a solution, any permutation applied simultaneously to the three components of each vector leads to a solution, i.e.:

• $\mathrm{𝚊𝚝𝚝𝚛𝚜}\left(\mathrm{𝙲𝙾𝙻𝙻𝙴𝙲𝚃𝙸𝙾𝙽},\mathrm{𝙿𝙴𝚁𝙼𝚄𝚃𝙰𝚃𝙸𝙾𝙽}\right)$ denotes the fact that we can permute the attributes of the collection $\mathrm{𝙲𝙾𝙻𝙻𝙴𝙲𝚃𝙸𝙾𝙽}$, not necessarily all items, with respect to a permutation $\mathrm{𝙿𝙴𝚁𝙼𝚄𝚃𝙰𝚃𝙸𝙾𝙽}$. Attributes that are exchanged must have the same type under the hypothesis that they are ground (e.g., an attribute $\mathrm{𝚊𝚝𝚝𝚛}\mathtt{1}$ of type $\mathrm{𝚒𝚗𝚝}$ can be exchanged with an attribute $\mathrm{𝚊𝚝𝚝𝚛}\mathtt{2}$ of type $\mathrm{𝚍𝚟𝚊𝚛}$.

EXAMPLE: As an example, consider the $\mathrm{𝚜𝚌𝚊𝚕𝚊𝚛}_\mathrm{𝚙𝚛𝚘𝚍𝚞𝚌𝚝}$$\left(\mathrm{𝙻𝙸𝙽𝙴𝙰𝚁𝚃𝙴𝚁𝙼},$ $\mathrm{𝙲𝚃𝚁},$ $\mathrm{𝚅𝙰𝙻}\right)$ constraint, which enforces a linear term, represented by a collection with two attributes $\mathrm{𝚌𝚘𝚎𝚏𝚏}$ and $\mathrm{𝚟𝚊𝚛}$, to be equal, different, less, greater than or equal, greater, or less than or equal (i.e., depending on the value of $\mathrm{𝙲𝚃𝚁}$) to $\mathrm{𝚅𝙰𝙻}$. In the ground case we can exchange attributes $\mathrm{𝚌𝚘𝚎𝚏𝚏}$ and $\mathrm{𝚟𝚊𝚛}$ without affecting the fact that the constraint is satisfied. Within the electronic catalogue this is represented by the following meta -data, $\mathrm{𝚊𝚝𝚝𝚛𝚜}\left(\mathrm{𝙻𝙸𝙽𝙴𝙰𝚁𝚃𝙴𝚁𝙼},\left[\left[\mathrm{𝚌𝚘𝚎𝚏𝚏},\mathrm{𝚟𝚊𝚛}\right]\right]\right)$, to which corresponds the following textual form:

attributes of $\mathrm{𝙻𝙸𝙽𝙴𝙰𝚁𝚃𝙴𝚁𝙼}$ are permutable w.r.t. permutation $\left(\mathrm{𝚌𝚘𝚎𝚏𝚏},\mathrm{𝚟𝚊𝚛}\right)$ (permutation not necessarily applied to all items).

For instance, since $\mathrm{𝚜𝚌𝚊𝚕𝚊𝚛}_\mathrm{𝚙𝚛𝚘𝚍𝚞𝚌𝚝}$$\left(〈\mathrm{𝚌𝚘𝚎𝚏𝚏}-1\mathrm{𝚟𝚊𝚛}-1,\mathrm{𝚌𝚘𝚎𝚏𝚏}-\mathbf{3}\mathrm{𝚟𝚊𝚛}-\mathbf{1},\mathrm{𝚌𝚘𝚎𝚏𝚏}-1\mathrm{𝚟𝚊𝚛}-4,〉,=,8\right)$ is a solution, $\mathrm{𝚜𝚌𝚊𝚕𝚊𝚛}_\mathrm{𝚙𝚛𝚘𝚍𝚞𝚌𝚝}$$\left(〈\mathrm{𝚌𝚘𝚎𝚏𝚏}-1\mathrm{𝚟𝚊𝚛}-1,\mathrm{𝚌𝚘𝚎𝚏𝚏}-\mathbf{1}\mathrm{𝚟𝚊𝚛}-\mathbf{3},\mathrm{𝚌𝚘𝚎𝚏𝚏}-1\mathrm{𝚟𝚊𝚛}-4,〉,=,8\right)$ is also a valid solution (i.e., the attributes $\mathrm{𝚌𝚘𝚎𝚏𝚏}$ and $\mathrm{𝚟𝚊𝚛}$ of the second item were permuted).

• $\mathrm{𝚊𝚝𝚝𝚛𝚜}_\mathrm{𝚜𝚢𝚗𝚌}\left(\mathrm{𝙲𝙾𝙻𝙻𝙴𝙲𝚃𝙸𝙾𝙽},\mathrm{𝙿𝙴𝚁𝙼𝚄𝚃𝙰𝚃𝙸𝙾𝙽}\right)$ denotes the fact that we can permute the attributes of the collection $\mathrm{𝙲𝙾𝙻𝙻𝙴𝙲𝚃𝙸𝙾𝙽}$, necessarily all items, with respect to a permutation $\mathrm{𝙿𝙴𝚁𝙼𝚄𝚃𝙰𝚃𝙸𝙾𝙽}$. As before, attributes that are exchanged must have the same type under the hypothesis that they are ground.

EXAMPLE: As an example, consider the $\mathrm{𝚌𝚛𝚘𝚜𝚜𝚒𝚗𝚐}$$\left(\mathrm{𝙽𝙲𝚁𝙾𝚂𝚂},\mathrm{𝚂𝙴𝙶𝙼𝙴𝙽𝚃𝚂}\right)$ constraint, which enforces $\mathrm{𝙽𝙲𝚁𝙾𝚂𝚂}$ to be equal to the number of line -segments intersections between the line -segments defined by the $\mathrm{𝚂𝙴𝙶𝙼𝙴𝙽𝚃𝚂}$ collection. Each line -segment is defined by the coordinates $\left(\mathrm{𝚘𝚡},\mathrm{𝚘𝚢}\right)$ and $\left(\mathrm{𝚎𝚡},\mathrm{𝚎𝚢}\right)$ of its two extremities. Note that we can exchange the role of the $x$ and $y$ axes without affecting the number of line -segments intersections. Within the electronic catalogue this is represented by the following meta -data, $\mathrm{𝚊𝚝𝚝𝚛𝚜}_\mathrm{𝚜𝚢𝚗𝚌}\left(\mathrm{𝚂𝙴𝙶𝙼𝙴𝙽𝚃𝚂},\left[\left[\mathrm{𝚘𝚡},\mathrm{𝚘𝚢}\right],\left[\mathrm{𝚎𝚡},\mathrm{𝚎𝚢}\right]\right]\right)$, to which corresponds the following textual form:

attributes of $\mathrm{𝚂𝙴𝙶𝙼𝙴𝙽𝚃𝚂}$ are permutable w.r.t. permutation $\left(\mathrm{𝚘𝚡},\mathrm{𝚘𝚢}\right)$ $\left(\mathrm{𝚎𝚡},\mathrm{𝚎𝚢}\right)$ (permutation applied to all items).

For instance, since $\mathrm{𝚌𝚛𝚘𝚜𝚜𝚒𝚗𝚐}$$\left(3,〈\mathrm{𝚘𝚡}-\mathbf{1}\mathrm{𝚘𝚢}-\mathbf{4}\mathrm{𝚎𝚡}-\mathit{9}\mathrm{𝚎𝚢}-\mathit{2},\mathrm{𝚘𝚡}-\mathbf{1}\mathrm{𝚘𝚢}-\mathbf{1}\mathrm{𝚎𝚡}-\mathit{3}\mathrm{𝚎𝚢}-\mathit{5},\mathrm{𝚘𝚡}-\mathbf{3}\mathrm{𝚘𝚢}-\mathbf{2}\mathrm{𝚎𝚡}-\mathit{7}\mathrm{𝚎𝚢}-\mathit{4},\mathrm{𝚘𝚡}-\mathbf{9}\mathrm{𝚘𝚢}-\mathbf{1}\mathrm{𝚎𝚡}-\mathit{9}\mathrm{𝚎𝚢}-\mathit{4}〉\right)$ is a solution, $\mathrm{𝚌𝚛𝚘𝚜𝚜𝚒𝚗𝚐}$$\left(3,〈\mathrm{𝚘𝚡}-\mathbf{4}\mathrm{𝚘𝚢}-\mathbf{1}\mathrm{𝚎𝚡}-\mathit{2}\mathrm{𝚎𝚢}-\mathit{9},\mathrm{𝚘𝚡}-\mathbf{1}\mathrm{𝚘𝚢}-\mathbf{1}\mathrm{𝚎𝚡}-\mathit{5}\mathrm{𝚎𝚢}-\mathit{3},\mathrm{𝚘𝚡}-\mathbf{2}\mathrm{𝚘𝚢}-\mathbf{3}\mathrm{𝚎𝚡}-\mathit{4}\mathrm{𝚎𝚢}-\mathit{7},\mathrm{𝚘𝚡}-\mathbf{1}\mathrm{𝚘𝚢}-\mathbf{9}\mathrm{𝚎𝚡}-\mathit{4}\mathrm{𝚎𝚢}-\mathit{9}〉\right)$ is also a valid solution.

• $\mathrm{𝚟𝚊𝚕𝚜}\left(\mathrm{𝙰𝚃𝚃𝚁𝙸𝙱𝚄𝚃𝙴𝚂},\mathrm{𝙿𝙰𝚁𝚃𝙸𝚃𝙸𝙾𝙽},\mathrm{𝙿𝙰𝙸𝚁𝚂},\mathrm{𝚂𝙾𝚄𝚁𝙲𝙴},\mathrm{𝚃𝙰𝚁𝙶𝙴𝚃}\right)$ denotes the fact that we can permute some source value with some distinct target value. The kind of value permutation we can perform is parameterized by five parameters:
• $\mathrm{𝙰𝚃𝚃𝚁𝙸𝙱𝚄𝚃𝙴𝚂}$ is a list of paths of the form $\mathrm{𝙰𝚁𝙶}\mathtt{0}$ or $\mathrm{𝙰𝚁𝙶}\mathtt{1}.\cdots .\mathrm{𝙰𝚁𝙶𝚗}.\mathrm{𝚊𝚝𝚝𝚛}$ $\left(n\ge 1\right)$, where:

• $\mathrm{𝙰𝚁𝙶}\mathtt{0}$ is an argument of the global constraint of type domain variable, integer, or collection of domain variables or integers.

• $\mathrm{𝙰𝚁𝙶}\mathtt{1}.\cdots .\mathrm{𝙰𝚁𝙶𝚗}.\mathrm{𝚊𝚝𝚝𝚛}$ is a path to an integer attribute or to a collection of integers attribute of the global constraint. $\mathrm{𝙰𝚁𝙶}\mathtt{1}$, $\mathrm{𝙰𝚁𝙶}\mathtt{2}$, ..., $\mathrm{𝙰𝚁𝙶𝚗}$ are collections and $\mathrm{𝚊𝚝𝚝𝚛}$ is an attribute of $\mathrm{𝙰𝚁𝙶𝚗}$ of type domain variable, integer, or collection of domain variables or integers. In this last context, all collections have the same number of items since we can only exchange tuples of values that have the same number of components. The path does not necessarily start from a top level collection.

Its purpose is to define the scope where the exchange of values, or tuples of values, will take place. Note that:

• The case corresponding to $\mathrm{𝙰𝚁𝙶}\mathtt{0}$ is motivated by the fact that we sometimes want to express the fact that the value of an integer argument can be changed in such a way that we preserve the fact that we still have a solution.

• The case when $\mathrm{𝙰𝚁𝙶}\mathtt{1}$ is not a top level collection is motivated by the fact that we sometimes want to express the fact that the exchange of value takes place within a nested collection. In this context this implicitly defines several scopes for the exchange of values.

• The case where $\mathrm{𝙰𝚁𝙶}\mathtt{1}.\cdots .\mathrm{𝙰𝚁𝙶𝚗}.\mathrm{𝚊𝚝𝚝𝚛}$ is a path to a collection of variables or integers allows expressing swap between tuples of values (i.e., the exchange of values is generalized to the exchange of tuples of values).

• $\mathrm{𝙿𝙰𝚁𝚃𝙸𝚃𝙸𝙾𝙽}$ usually defines a partition $𝒫$ of integer values. Only when $\mathrm{𝙰𝚁𝙶}\mathtt{1}.\cdots .\mathrm{𝙰𝚁𝙶𝚗}.\mathrm{𝚊𝚝𝚝𝚛}$ is a path to a collection of variables or integers, $\mathrm{𝙿𝙰𝚁𝚃𝙸𝚃𝙸𝙾𝙽}$ defines a partition of tuples of integer values. For the time being we focus on the first case, i.e., a partition of integer values. Its aim is to define classes of values from which the source and target values will be selected. In order to define a partition $𝒫$ we first introduce the notion of set of values generator. Within these definitions, $u$ and $v$ both denote (1) an integer value, or (2) an argument of the constraint of type integer or domain variable, or (3) a term of the form $|\mathrm{𝙰𝚁𝙶}|$ where $\mathrm{𝙰𝚁𝙶}$ is an argument of type collection denoting the number of items of the collection, (4) a sum or difference of elements of the form (1), (2) or (3). We have two kinds of generators, namely:

• A basic set of values generator is defined by one of those:

• $\mathrm{𝙰𝚁𝙶}.\mathrm{𝚊𝚝𝚝𝚛}$, where $\mathrm{𝙰𝚁𝙶}$ is an argument of type collection and $\mathrm{𝚊𝚝𝚝𝚛}$ is an attribute of $\mathrm{𝙰𝚁𝙶}$ of type integer or domain variable, denotes the set of all values assigned to $\mathrm{𝙰𝚁𝙶}.\mathrm{𝚊𝚝𝚝𝚛}$.

• $\mathrm{𝚗𝚘𝚝𝚒𝚗}\left(\mathrm{𝙰𝚁𝙶}.\mathrm{𝚊𝚝𝚝𝚛}\right)$, where $\mathrm{𝙰𝚁𝙶}$ is an argument of type collection and $\mathrm{𝚊𝚝𝚝𝚛}$ is an attribute of $\mathrm{𝙰𝚁𝙶}$ of type integer or domain variable, denotes the set of all elements of $ℤ$ that are not assigned to $\mathrm{𝙰𝚁𝙶}.\mathrm{𝚊𝚝𝚝𝚛}$.

• $\mathrm{𝚍𝚒𝚏𝚏}\left(\mathrm{𝙰𝚁𝙶}\mathtt{1}.\mathrm{𝚊𝚝𝚝𝚛}\mathtt{1},\mathrm{𝙰𝚁𝙶}\mathtt{2}.\mathrm{𝚊𝚝𝚝𝚛}\mathtt{2}\right)$, where $\mathrm{𝙰𝚁𝙶}\mathtt{1}$ (respectively $\mathrm{𝙰𝚁𝙶}\mathtt{2}$) is an argument of type collection and $\mathrm{𝚊𝚝𝚝𝚛}\mathtt{1}$ (respectively $\mathrm{𝚊𝚝𝚝𝚛}\mathtt{2}$) is an attribute of $\mathrm{𝙰𝚁𝙶}\mathtt{1}$ (respectively $\mathrm{𝙰𝚁𝙶}\mathtt{2}$) of type integer or domain variable, denotes the set of all elements of $ℤ$ that are assigned to $\mathrm{𝙰𝚁𝙶}\mathtt{1}.\mathrm{𝚊𝚝𝚝𝚛}\mathtt{1}$ but not to $\mathrm{𝙰𝚁𝙶}\mathtt{2}.\mathrm{𝚊𝚝𝚝𝚛}\mathtt{2}$.

• $u$, denotes the set $\left\{u\right\}$.

• $\mathrm{𝑐𝑚𝑝}\left(𝚞\right)$, $\left(\mathrm{𝑐𝑚𝑝}\in \left\{=,\ne ,<,\ge ,>,\le \right\}\right)$, denotes the set of all integers $e$ such that the comparison $e\mathrm{𝑐𝑚𝑝}u$ holds.

• $\mathrm{𝚒𝚗}\left(u,v\right)$, $\left(u\le v\right)$, denotes the set of all integers located in interval $\left[u,v\right]$.

• $\mathrm{𝚗𝚘𝚝𝚒𝚗}\left(u,v\right)$, $\left(u\le v\right)$, denotes the set of all integers not located in interval $\left[u,v\right]$.

• $\mathrm{𝚖𝚘𝚍}\left(u,v\right)$, $\left(0, denotes all integer values in $ℤ$ that have $v$ as remainder when divided by $u$.remainder$\left(a,n\right)=a-n⌊\frac{a}{n}⌋$.

• Given set of values generators ${𝒮}_{1}$, ${𝒮}_{2}$, $...$, ${𝒮}_{n}$ $\left(n\ge 2\right)$, a compound set of values generator is defined by:

• $\left[{𝒮}_{1},{𝒮}_{2},...,{𝒮}_{n}\right]$ denotes all values that are in at least one of the sets ${𝒮}_{1}$, ${𝒮}_{2}$, $...$, ${𝒮}_{n}$.

• $\mathrm{𝚗𝚘𝚝𝚒𝚗}\left(\left[{𝒮}_{1},{𝒮}_{2},...,{𝒮}_{n}\right]\right)$ denotes all values of $ℤ$ that are not in any set ${𝒮}_{1}$, ${𝒮}_{2}$, $...$, ${𝒮}_{n}$.

We now describe the different partition generators. Within the description, $𝒮$ and $𝒟$ denote set of values generators. Classes of a partition are ordered. Unless explicitly specified, classes are ordered with respect to the smallest element they contain.

• $\mathrm{𝚒𝚗𝚝}$ denotes a partition $𝒫$ where, to each element of $ℤ$ corresponds a specific class of $𝒫$ containing just that element.

• $\mathrm{𝚒𝚗𝚝}\left(𝒮\right)$ denotes a partition $𝒫$ where, to each element of $𝒮$ corresponds a specific class of $𝒫$ containing just that element.

• $\mathrm{𝚊𝚕𝚕}$ denotes a partition $𝒫$ containing one single class of values corresponding to all integer values in $ℤ$.

• $\mathrm{𝚊𝚕𝚕}\left(𝒮\right)$ denotes a partition $𝒫$ containing one single class of values corresponding to the elements of $𝒮$.

• $\mathrm{𝚌𝚘𝚖𝚙}\left(𝒮\right)$ denotes of partition $𝒫$ containing two classes of values: a first class corresponding to the elements of $𝒮$, and a second class consisting of all elements of $ℤ$ that are not in $𝒮$.

• $\mathrm{𝚌𝚘𝚖𝚙}_\mathrm{𝚍𝚒𝚏𝚏}\left(𝒮,𝒟\right)$ denotes of partition $𝒫$ containing two classes of values: a first class corresponding to the elements of $𝒮$ but not in $𝒟$, and a second class consisting of all elements of $ℤ$ that are neither in $𝒮$ nor in $𝒟$.

• $\mathrm{𝚒𝚗𝚝𝚎𝚛𝚟𝚊𝚕𝚜}\left(u\right)$, $\left(u>0\right)$, denotes a partition $𝒫$ containing intervals of the form $\left[k·u,k·u+u-1\right]$, $k\in ℤ$.

• $\mathrm{𝚖𝚘𝚍}\left(u\right)$, $\left(u>0\right)$, denotes a partition $𝒫$ such that each class of $𝒫$ is made up from all integers in $ℤ$ that have the same remainder when divided by $u$.remainder$\left(a,n\right)=a-n⌊\frac{a}{n}⌋$.

• $\mathrm{𝚙𝚊𝚛𝚝}\left(P\right)$, where $P$ is a collection of collections of integers passed as one of the arguments of the constraint, where each integer occurs once, denotes a partition $𝒫$ such that each class corresponds to the elements of one of the collections of $P$. Classes are ordered with respect to their occurrence in $P$.

When $\mathrm{𝙿𝙰𝚁𝚃𝙸𝚃𝙸𝙾𝙽}$ defines a partition of tuples, where each tuple consists of $k$ integers, $\mathrm{𝙿𝙰𝚁𝚃𝙸𝚃𝙸𝙾𝙽}$ can only be set to $\mathrm{𝚒𝚗𝚝}$. In this context $\mathrm{𝚒𝚗𝚝}$ denotes a partition $𝒫$ where, to each element of ${ℤ}^{k}$ corresponds a specific class of $𝒫$ containing just that element.

• $\mathrm{𝙿𝙰𝙸𝚁𝚂}$ is one of the symbols $\ne$, $=$, $<$, $\ge$, $>$, $\le$, or $\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}$. It specifies a set of pairs $\left\{\left({p}_{{i}_{1}},{p}_{{j}_{1}}\right),\left({p}_{{i}_{2}},{p}_{{j}_{2}}\right),...,\left({p}_{{i}_{n}},{p}_{{j}_{n}}\right)\right\}$ of elements of the partition $𝒫$ such that, when $\mathrm{𝙿𝙰𝙸𝚁𝚂}$ is different from $\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}$,When $\mathrm{𝙿𝙰𝙸𝚁𝚂}$ is equal to $\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}$ we just consider all possible pairs. the condition ${i}_{k}\mathrm{𝙿𝙰𝙸𝚁𝚂}{j}_{k}$ holds for all $k\in \left[1,n\right]$. The aim of the $\mathrm{𝙿𝙰𝙸𝚁𝚂}$ parameter is to allow to specify which partitions of $𝒫$ the source value $u$ and the target value $v$ should belong to. In fact there should exist a pair $\left({p}_{{i}_{k}},{p}_{{j}_{k}}\right)$, $\left(k\in \left[1,n\right]\right)$, such that $u\in {p}_{{i}_{k}}$ and $v\in {p}_{{j}_{k}}$.

• $\mathrm{𝚂𝙾𝚄𝚁𝙲𝙴}$ is one of the options $\mathrm{𝚊𝚕𝚕}$ or $\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}$:

• When set to $\mathrm{𝚊𝚕𝚕}$ it indicates that all occurrences of the source value should be replaced by the target value. All occurrences of the target value, if it is used, should also be replaced by the source value.

• When set to $\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}$ it tells that not necessarily all occurrences of the source value should be replaced. The target value is left unchanged.

• $\mathrm{𝚃𝙰𝚁𝙶𝙴𝚃}$ is one of the options $\mathrm{𝚒𝚗}$ or $\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}$:

• When set to $\mathrm{𝚒𝚗}$ it indicates that the target value should correspond to an already existing value of $\mathrm{𝙰𝚁𝙶}.\mathrm{𝚊𝚝𝚝𝚛}$.

• When set to $\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}$ it tells that the target value can either correspond to an already existing value of $\mathrm{𝙰𝚁𝙶}.\mathrm{𝚊𝚝𝚝𝚛}$, or designate a new value.

We now define the set of conditions we must have in order to exchange a source and a target values. Given,

1. a ground instance of a global constraint $C$,

2. a path $\mathrm{𝙿𝙰𝚃𝙷}$ that designates either an argument of type integer, or an integer attribute of a collection that occurs, possibly in a nested way, as one of the arguments of $C$,

3. the sets of values ${𝒱}_{1},{𝒱}_{2},...,{𝒱}_{h}$ that are assigned to $\mathrm{𝙿𝙰𝚃𝙷}$ in the ground instance of $C$,We may have more than one set when the path does not start from a top level collection.

4. a partition of integer values $𝒫$ derived from $\mathrm{𝙿𝙰𝚁𝚃𝙸𝚃𝙸𝙾𝙽}$,

5. a set of pairs $\left\{\left({p}_{{i}_{1}},{p}_{{j}_{1}}\right),\left({p}_{{i}_{2}},{p}_{{j}_{2}}\right),...,\left({p}_{{i}_{n}},{p}_{{j}_{n}}\right)\right\}$ of elements of the partition $𝒫$ such that the condition $\mathrm{𝙿𝙰𝙸𝚁𝚂}=\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}\vee {i}_{k}\mathrm{𝙿𝙰𝙸𝚁𝚂}{j}_{k}$ holds for all $k\in \left[1,n\right]$,

6. a $\mathrm{𝚃𝙰𝚁𝙶𝙴𝚃}$ option,

given one of the sets of values ${𝒱}_{\alpha }$, $\left(1\le \alpha \le h\right)$, a source value $u$ can be permuted with a target value $v$ if and only if the following conditions are all satisfied:

1. $u\ne v$ (source and target values should be distinct),

2. $u\in {𝒱}_{\alpha }$ (source value, i.e., value that is replaced, should be part of the solution),

3. $\exists k|u\in {p}_{{i}_{k}}\wedge v\in {p}_{{j}_{k}}$ (source and target values should be located in the appropriate partition classes),

4. $\mathrm{𝚃𝙰𝚁𝙶𝙴𝚃}=\mathrm{𝚒𝚗}⇒v\in {𝒱}_{\alpha }$ (if $\mathrm{𝚃𝙰𝚁𝙶𝙴𝚃}=\mathrm{𝚒𝚗}$ then the target value should also be part of the solution).

If $\mathrm{𝚂𝙾𝚄𝚁𝙲𝙴}$ is equal to $\mathrm{𝚊𝚕𝚕}$ we replace each occurrence of $u$ by $v$, and conversely each occurrence of $v$ by $u$. Otherwise we replace at least one occurrence of $u$ by $v$.

Without loss of generality, when $\mathrm{𝙿𝙰𝚃𝙷}$ designates a collection of integer values or domain variables, the exchange of tuples of values is defined in a similar way.

We now provide a number of examples of value symmetry and illustrate how to encode them with the five parameters we just introduced. We start from the most common value symmetry, namely exchanging all occurrences of two distinct values or replacing all occurrences of a value by an unused value.

EXAMPLE 1: As a first example, consider the $\mathrm{𝚊𝚕𝚕𝚍𝚒𝚏𝚏𝚎𝚛𝚎𝚗𝚝}$$\left(\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\right)$ constraint, which enforces all variables of the collection $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$ to take distinct values. Note that we can exchange two assigned values of $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$, or replace an assigned value of $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$ by a new value, i.e., a value that is not yet assigned to any variable of $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$. Within the electronic catalogue this is represented by the following meta -data, $\mathrm{𝚟𝚊𝚕𝚜}\left(\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}\right],\mathrm{𝚒𝚗𝚝},\ne ,\mathrm{𝚊𝚕𝚕},\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}\right)$, to which corresponds the following textual form:

Two distinct values of $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}$ can be swapped; a value of $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}$ can be renamed to any unused value.

For instance, since $\mathrm{𝚊𝚕𝚕𝚍𝚒𝚏𝚏𝚎𝚛𝚎𝚗𝚝}$$\left(〈5,1,\mathbf{9},3〉\right)$ is a solution, we can replace value 9 by a not yet assigned value, 0 for instance, and get another valid solution $\mathrm{𝚊𝚕𝚕𝚍𝚒𝚏𝚏𝚎𝚛𝚎𝚗𝚝}$$\left(〈5,1,\mathbf{0},3〉\right)$.

The five parameters of $\mathrm{𝚟𝚊𝚕𝚜}\left(\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}\right],\mathrm{𝚒𝚗𝚝},\ne ,\mathrm{𝚊𝚕𝚕},\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}\right)$ have the following meaning:

• $\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}\right]$ indicates that the modification takes place within the values assigned to the $\mathrm{𝚟𝚊𝚛}$ attribute of the $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$ collection.

• $\mathrm{𝚒𝚗𝚝}$ defines the partition of values $𝒫=...,\left\{-1\right\},\left\{0\right\},\left\{1\right\},...$ .

• $\ne$ indicates that the exchange of values takes place between two distinct elements of $𝒫$.

• $\mathrm{𝚊𝚕𝚕}$ specifies that all occurrences of the source value have to be exchanged with all occurrences of the target value.

• $\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}$ tells that the source value can be replaced by an already existing value or by a new value, i.e., a value not already used in $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}$.

EXAMPLE 2: As a second example, consider the $\mathrm{𝚗𝚟𝚊𝚕𝚞𝚎}$$\left(\mathrm{𝙽𝚅𝙰𝙻},\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\right)$ constraint, which enforces $\mathrm{𝙽𝚅𝙰𝙻}$ to be equal to the number of distinct values assigned to the variables of the collection $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$. Note that we can exchange all occurrences of two distinct values of $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$, or replace all occurrences of an assigned value of $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$ by a new value, i.e., a value that is not yet assigned to any variable of $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$. Within the electronic catalogue this is represented by the following meta -data, $\mathrm{𝚟𝚊𝚕𝚜}\left(\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}\right],\mathrm{𝚒𝚗𝚝},\ne ,\mathrm{𝚊𝚕𝚕},\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}\right)$, to which corresponds the following textual form:

All occurrences of two distinct values of $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}$ can be swapped; all occurrences of a value of $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}$ can be renamed to any unused value.

For instance, since $\mathrm{𝚗𝚟𝚊𝚕𝚞𝚎}$$\left(4,〈3,\mathbf{1},7,\mathbf{1},6〉\right)$ is a solution, we can replace all occurrences of value 1 by a not yet assigned value, 8 for instance, and get another valid solution $\mathrm{𝚗𝚟𝚊𝚕𝚞𝚎}$$\left(4,〈3,\mathbf{8},7,\mathbf{8},6〉\right)$. We can also swap all occurrences of value 1 and value 3, and get another valid solution $\mathrm{𝚗𝚟𝚊𝚕𝚞𝚎}$$\left(4,〈\mathbf{1},\mathbf{3},7,\mathbf{3},6〉\right)$.

The five parameters of $\mathrm{𝚟𝚊𝚕𝚜}\left(\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}\right],\mathrm{𝚒𝚗𝚝},\ne ,\mathrm{𝚊𝚕𝚕},\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}\right)$ have the following meaning:

• $\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}\right]$ indicates that the modification takes place within the values assigned to the $\mathrm{𝚟𝚊𝚛}$ attribute of the $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$ collection.

• $\mathrm{𝚒𝚗𝚝}$ defines the partition of values $𝒫=...,\left\{-1\right\},\left\{0\right\},\left\{1\right\},...$ .

• $\ne$ indicates that the exchange of values takes place between two distinct elements of $𝒫$.

• $\mathrm{𝚊𝚕𝚕}$ specifies that all occurrences of the source value have to be exchanged with all occurrences of the target value.

• $\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}$ tells that the source value can be replaced by an already existing value or by a new value, i.e., a value not already used in $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}$.

We now introduce a third and a fourth example where the meta -data used for describing value symmetry, $\mathrm{𝚟𝚊𝚕𝚜}\left(\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}\right],\mathrm{𝚒𝚗𝚝},\ne ,\mathrm{𝚊𝚕𝚕},\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}\right)$, is replaced by $\mathrm{𝚟𝚊𝚕𝚜}\left(\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}\right],\mathrm{𝚒𝚗𝚝},\ne ,\mathrm{𝚊𝚕𝚕},\mathrm{𝚒𝚗}\right)$, i.e., we are not allowed to introduce an unused value.

EXAMPLE 3: As a third example, consider the $\mathrm{𝚊𝚕𝚕}_\mathrm{𝚖𝚒𝚗}_\mathrm{𝚍𝚒𝚜𝚝}$$\left(\mathrm{𝙼𝙸𝙽𝙳𝙸𝚂𝚃},$ $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\right)$ constraint, which enforces for each pair $\left({\mathrm{𝚟𝚊𝚛}}_{i},{\mathrm{𝚟𝚊𝚛}}_{j}\right)$ of distinct variables of the collection $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$ that $|{\mathrm{𝚟𝚊𝚛}}_{i}-{\mathrm{𝚟𝚊𝚛}}_{j}|\ge \mathrm{𝙼𝙸𝙽𝙳𝙸𝚂𝚃}$. Note that we can exchange two occurrences of distinct values of $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$, but we cannot replace an existing value $u$ by a new value $v$ (since the new value $v$ may be too close from another existing value $w$, i.e., $|v-w|<\mathrm{𝙼𝙸𝙽𝙳𝙸𝚂𝚃}$). Within the electronic catalogue this is represented by the following meta -data, $\mathrm{𝚟𝚊𝚕𝚜}\left(\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}\right],\mathrm{𝚒𝚗𝚝},\ne ,\mathrm{𝚊𝚕𝚕},\mathrm{𝚒𝚗}\right)$, to which corresponds the following textual form:

Two distinct values of $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}$ can be swapped.

For instance, since $\mathrm{𝚊𝚕𝚕}_\mathrm{𝚖𝚒𝚗}_\mathrm{𝚍𝚒𝚜𝚝}$$\left(2,〈\mathbf{5},1,\mathbf{9},3〉\right)$ is a solution, we can swap values 5 and 9, and get another valid solution $\mathrm{𝚊𝚕𝚕}_\mathrm{𝚖𝚒𝚗}_\mathrm{𝚍𝚒𝚜𝚝}$$\left(2,〈\mathbf{9},1,\mathbf{5},3〉\right)$.

The five parameters of $\mathrm{𝚟𝚊𝚕𝚜}\left(\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}\right],\mathrm{𝚒𝚗𝚝},\ne ,\mathrm{𝚊𝚕𝚕},\mathrm{𝚒𝚗}\right)$ have the following meaning:

• $\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}\right]$ indicates that the modification takes place within the values assigned to the $\mathrm{𝚟𝚊𝚛}$ attribute of the $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$ collection.

• $\mathrm{𝚒𝚗𝚝}$ defines the partition of values $𝒫=...,\left\{-1\right\},\left\{0\right\},\left\{1\right\},...$ .

• $\ne$ indicates that the exchange of values takes place between two distinct elements of $𝒫$.

• $\mathrm{𝚊𝚕𝚕}$ specifies that all occurrences of the source value have to be exchanged with all occurrences of the target value.

• $\mathrm{𝚒𝚗}$ tells that the source value has to be replaced by an already existing value in $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}$.

EXAMPLE 4: As a fourth example, consider the $\mathrm{𝚖𝚒𝚗𝚒𝚖𝚞𝚖}$$\left(\mathrm{𝙼𝙸𝙽},$ $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\right)$ constraint, which enforces $\mathrm{𝙼𝙸𝙽}$ to be equal to the minimum value of the collection $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$. Note that we can exchange all occurrences of two distinct values of $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$, but we cannot replace an existing value $u$ by a new value $v$ (since the new value $v$ may be smaller than $\mathrm{𝙼𝙸𝙽}$). Within the electronic catalogue this is represented by the following meta -data, $\mathrm{𝚟𝚊𝚕𝚜}\left(\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}\right],\mathrm{𝚒𝚗𝚝},\ne ,\mathrm{𝚊𝚕𝚕},\mathrm{𝚒𝚗}\right)$, to which corresponds the following textual form:

All occurrences of two distinct values of $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}$ can be swapped.

For instance, since $\mathrm{𝚖𝚒𝚗𝚒𝚖𝚞𝚖}$$\left(2,〈3,2,7,2,6〉\right)$ is a solution, we can swap values 2 and 6, and get another valid solution $\mathrm{𝚖𝚒𝚗𝚒𝚖𝚞𝚖}$$\left(2,〈3,6,7,6,2〉\right)$.

The five parameters of $\mathrm{𝚟𝚊𝚕𝚜}\left(\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}\right],\mathrm{𝚒𝚗𝚝},\ne ,\mathrm{𝚊𝚕𝚕},\mathrm{𝚒𝚗}\right)$ have the following meaning:

• $\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}\right]$ indicates that the modification takes place within the values assigned to the $\mathrm{𝚟𝚊𝚛}$ attribute of the $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$ collection.

• $\mathrm{𝚒𝚗𝚝}$ defines the partition of values $𝒫=...,\left\{-1\right\},\left\{0\right\},\left\{1\right\},...$ .

• $\ne$ indicates that the exchange of values takes place between two distinct elements of $𝒫$.

• $\mathrm{𝚊𝚕𝚕}$ specifies that all occurrences of the source value have to be exchanged with all occurrences of the target value.

• $\mathrm{𝚒𝚗}$ tells that the source value has to be replaced by an already existing value in $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}$.

We now present three examples where, using the partition generator $\mathrm{𝚌𝚘𝚖𝚙}\left(𝒮\right)$, we consider two classes of values: a first class consisting of elements of $𝒮$ and a second class of elements of $ℤ$ not in $𝒮$. The first example corresponds to a value symmetry where values from the same class are exchanged, while the two other examples consider permutation of values between distinct classes with respect to a given class ordering.

EXAMPLE 5: As a fifth example, consider the $\mathrm{𝚊𝚖𝚘𝚗𝚐}$$\left(\mathrm{𝙽𝚅𝙰𝚁},\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂},\mathrm{𝚅𝙰𝙻𝚄𝙴𝚂}\right)$ constraint, which enforces $\mathrm{𝙽𝚅𝙰𝚁}$ to be equal to the number of variables of the collection $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$ that are assigned a value in $\mathrm{𝚅𝙰𝙻𝚄𝙴𝚂}$. We focus on exchanges of values that take place within $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$. Note that, given a value that both occurs in $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$ and in $\mathrm{𝚅𝙰𝙻𝚄𝙴𝚂}$, we can replace it by any value in $\mathrm{𝚅𝙰𝙻𝚄𝙴𝚂}$. But we can also replace a value that occurs in $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$, but not in $\mathrm{𝚅𝙰𝙻𝚄𝙴𝚂}$, by any value not in $\mathrm{𝚅𝙰𝙻𝚄𝙴𝚂}$. Within the electronic catalogue this is represented by the following meta -data, $\mathrm{𝚟𝚊𝚕𝚜}\left(\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}\right],\mathrm{𝚌𝚘𝚖𝚙}\left(\mathrm{𝚅𝙰𝙻𝚄𝙴𝚂}.\mathrm{𝚟𝚊𝚕}\right),=,\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎},\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}\right)$, to which corresponds the following textual form:

An occurrence of a value of $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}$ that belongs to $\mathrm{𝚅𝙰𝙻𝚄𝙴𝚂}.\mathrm{𝚟𝚊𝚕}$ (resp. does not belong to $\mathrm{𝚅𝙰𝙻𝚄𝙴𝚂}.\mathrm{𝚟𝚊𝚕}$) can be replaced by any other value in $\mathrm{𝚅𝙰𝙻𝚄𝙴𝚂}.\mathrm{𝚟𝚊𝚕}$ (resp. not in $\mathrm{𝚅𝙰𝙻𝚄𝙴𝚂}.\mathrm{𝚟𝚊𝚕}$).

For instance, since $\mathrm{𝚊𝚖𝚘𝚗𝚐}$$\left(3,〈4,\mathbf{5},5,\mathbf{4},1〉,〈1,5,8〉\right)$ is a solution, we can swap the first occurrence of value 5 with the second occurrence of value 4 in $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}$, and get another valid solution $\mathrm{𝚊𝚖𝚘𝚗𝚐}$$\left(3,〈4,\mathbf{4},5,\mathbf{5},1〉,〈1,5,8〉\right)$.

The five parameters of $\mathrm{𝚟𝚊𝚕𝚜}\left(\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}\right],\mathrm{𝚌𝚘𝚖𝚙}\left(\mathrm{𝚅𝙰𝙻𝚄𝙴𝚂}.\mathrm{𝚟𝚊𝚕}\right),=,\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎},$ $\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}\right)$ have the following meaning:

• $\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}\right]$ indicates that the modification takes place within the values assigned to the $\mathrm{𝚟𝚊𝚛}$ attribute of the $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$ collection.

• $\mathrm{𝚌𝚘𝚖𝚙}\left(\mathrm{𝚅𝙰𝙻𝚄𝙴𝚂}.\mathrm{𝚟𝚊𝚕}\right)$ defines two set of values, a first set ${𝒮}_{1}$ corresponding to all values in $\mathrm{𝚅𝙰𝙻𝚄𝙴𝚂}.\mathrm{𝚟𝚊𝚕}$, and a second set ${𝒮}_{2}$ corresponding to all values not in $\mathrm{𝚅𝙰𝙻𝚄𝙴𝚂}.\mathrm{𝚟𝚊𝚕}$.

• $=$ indicates that the exchange of values takes place within the same set, i.e., within ${𝒮}_{1}$ or within ${𝒮}_{2}$.

• $\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}$ specifies that one occurrence of the source value has to be replaced by the target value.

• $\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}$ tells that the source value can be replaced by an already existing value or by a new value, i.e., a value not already used in $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}$.

EXAMPLE 6: As a sixth example, consider the $\mathrm{𝚊𝚝𝚕𝚎𝚊𝚜𝚝}$$\left(𝙽,\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂},\mathrm{𝚅𝙰𝙻𝚄𝙴}\right)$ constraint, which enforces at least $𝙽$ variables of the collection $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$ to be assigned value $\mathrm{𝚅𝙰𝙻𝚄𝙴}$. Note that, given an occurrence of value that belongs to $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$ that is different from $\mathrm{𝚅𝙰𝙻𝚄𝙴}$, we can replace it by any other value that is also different from $\mathrm{𝚅𝙰𝙻𝚄𝙴}$.Within the collection $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$, this swap does not change the number of variables that are assigned value $\mathrm{𝚅𝙰𝙻𝚄𝙴}$. But we can also replace it by value $\mathrm{𝚅𝙰𝙻𝚄𝙴}$ since this does not decrease the number of variables that are assigned value $\mathrm{𝚅𝙰𝙻𝚄𝙴}$. Within the electronic catalogue this is represented by the following meta -data, $\mathrm{𝚟𝚊𝚕𝚜}\left(\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}\right],\mathrm{𝚌𝚘𝚖𝚙}\left(\mathrm{𝚅𝙰𝙻𝚄𝙴}\right),\ge ,\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎},\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}\right)$, to which corresponds the following textual form:

An occurrence of a value of $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}$ that is different from $\mathrm{𝚅𝙰𝙻𝚄𝙴}$ can be replaced by any other value.

For instance, since $\mathrm{𝚊𝚝𝚕𝚎𝚊𝚜𝚝}$$\left(2,〈4,2,4,5,\mathbf{2}〉,4\right)$ is a solution, we can replace the second occurrence of value 2 with a value that is different from value 4, e.g., value 8, and get another valid solution $\mathrm{𝚊𝚝𝚕𝚎𝚊𝚜𝚝}$$\left(2,〈4,2,4,5,\mathbf{8}〉,4\right)$. We can also replace the second occurrence of value 2 with value 4 and get another valid solution $\mathrm{𝚊𝚝𝚕𝚎𝚊𝚜𝚝}$$\left(2,〈4,2,4,5,\mathbf{4}〉,4\right)$.

The five parameters of $\mathrm{𝚟𝚊𝚕𝚜}\left(\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}\right],\mathrm{𝚌𝚘𝚖𝚙}\left(\mathrm{𝚅𝙰𝙻𝚄𝙴}\right),\ge ,\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎},$ $\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}\right)$ have the following meaning:

• $\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}\right]$ indicates that the modification takes place within the values assigned to the $\mathrm{𝚟𝚊𝚛}$ attribute of the $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$ collection.

• $\mathrm{𝚌𝚘𝚖𝚙}\left(\mathrm{𝚅𝙰𝙻𝚄𝙴}\right)$ defines two set of values, a first set ${𝒮}_{1}$ containing only value $\mathrm{𝚅𝙰𝙻𝚄𝙴}$, and a second set ${𝒮}_{2}$ corresponding to all values different from $\mathrm{𝚅𝙰𝙻𝚄𝙴}$.

• $\ge$ indicates that the the source and target values should respectively belong to sets ${𝒮}_{i}$ and ${𝒮}_{j}$ where $i\ge j$:

1. If the source value is different from $\mathrm{𝚅𝙰𝙻𝚄𝙴}$ (i.e., the source value belongs to ${𝒮}_{2}$), then the target value can indifferently be equal or not equal to $\mathrm{𝚅𝙰𝙻𝚄𝙴}$ (i.e., the target value belongs to ${𝒮}_{1}$ or ${𝒮}_{2}$).

2. If the source value is equal to $\mathrm{𝚅𝙰𝙻𝚄𝙴}$ (i.e., the source value belongs to ${𝒮}_{1}$), then the target value is equal to $\mathrm{𝚅𝙰𝙻𝚄𝙴}$ (i.e., the target value also belongs to ${𝒮}_{1}$). But in this case no exchange can take place since the source and target values are identical.

• $\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}$ specifies that one occurrence of the source value has to be replaced by the target value.

• $\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}$ tells that the source value can be replaced by an already existing value or by a new value, i.e., a value not already used in $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}$.

EXAMPLE 7: As a seventh example, consider the $\mathrm{𝚊𝚝𝚖𝚘𝚜𝚝}$$\left(𝙽,\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂},\mathrm{𝚅𝙰𝙻𝚄𝙴}\right)$ constraint, which enforces at most $𝙽$ variables of the collection $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$ to be assigned value $\mathrm{𝚅𝙰𝙻𝚄𝙴}$. Note that, given an occurrence of value that belongs to $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$, and that is different from $\mathrm{𝚅𝙰𝙻𝚄𝙴}$, we can replace it by any other value that is also different from $\mathrm{𝚅𝙰𝙻𝚄𝙴}$.Within the collection $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$, this swap does not change the number of variables that are assigned value $\mathrm{𝚅𝙰𝙻𝚄𝙴}$. But we can also replace an occurrence of value $\mathrm{𝚅𝙰𝙻𝚄𝙴}$ by a value that is different from $\mathrm{𝚅𝙰𝙻𝚄𝙴}$, since this does not increase the number of variables that are assigned value $\mathrm{𝚅𝙰𝙻𝚄𝙴}$. Within the electronic catalogue this is represented by the following meta -data, $\mathrm{𝚟𝚊𝚕𝚜}\left(\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}\right],\mathrm{𝚌𝚘𝚖𝚙}\left(\mathrm{𝚅𝙰𝙻𝚄𝙴}\right),\le ,\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎},\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}\right)$, to which corresponds the following textual form:

An occurrence of a value of $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}$ can be replaced by any other value that is different from $\mathrm{𝚅𝙰𝙻𝚄𝙴}$.

For instance, since $\mathrm{𝚊𝚝𝚖𝚘𝚜𝚝}$$\left(1,〈4,2,\mathbf{4},5〉,2\right)$ is a solution, we can replace the second occurrence of value 4 with a value that is different from value 2, e.g., value 8, and get another valid solution $\mathrm{𝚊𝚝𝚖𝚘𝚜𝚝}$$\left(1,〈4,2,\mathbf{8},5〉,2\right)$. But, within $\mathrm{𝚊𝚝𝚖𝚘𝚜𝚝}$$\left(1,〈4,\mathbf{2},4,5〉,2\right)$, we can also replace value 2 with any other value, e.g. value 4 and get another valid solution $\mathrm{𝚊𝚝𝚖𝚘𝚜𝚝}$$\left(1,〈4,\mathbf{4},4,5〉,2\right)$.

The five parameters of $\mathrm{𝚟𝚊𝚕𝚜}\left(\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}\right],\mathrm{𝚌𝚘𝚖𝚙}\left(\mathrm{𝚅𝙰𝙻𝚄𝙴}\right),\le ,\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎},$ $\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}\right)$ have the following meaning:

• $\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}\right]$ indicates that the modification takes place within the values assigned to the $\mathrm{𝚟𝚊𝚛}$ attribute of the $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$ collection.

• $\mathrm{𝚌𝚘𝚖𝚙}\left(\mathrm{𝚅𝙰𝙻𝚄𝙴}\right)$ defines two set of values, a first set ${𝒮}_{1}$ containing only value $\mathrm{𝚅𝙰𝙻𝚄𝙴}$, and a second set ${𝒮}_{2}$ corresponding to all values different from $\mathrm{𝚅𝙰𝙻𝚄𝙴}$.

• $\le$ indicates that the the source and target values should respectively belong to sets ${𝒮}_{i}$ and ${𝒮}_{j}$ where $i\le j$:

1. If the source value is different from $\mathrm{𝚅𝙰𝙻𝚄𝙴}$ (i.e., the source value belongs to ${𝒮}_{2}$), then the target value is also different from $\mathrm{𝚅𝙰𝙻𝚄𝙴}$ (i.e., the target value belongs to ${𝒮}_{2}$). This supports the fact that we do not want to increase the number of occurrences of value $\mathrm{𝚅𝙰𝙻𝚄𝙴}$.

2. If the source value is equal to $\mathrm{𝚅𝙰𝙻𝚄𝙴}$ (i.e., the source value belongs to ${𝒮}_{1}$), then there is no restriction on the target value (i.e., the target value belongs to ${𝒮}_{1}$ or to ${𝒮}_{2}$). But the set ${𝒮}_{1}$ is not relevant since the target value would also be fixed to $\mathrm{𝚅𝙰𝙻𝚄𝙴}$, and, in this context, no exchange can take place.

• $\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}$ specifies that one occurrence of the source value has to be replaced by the target value.

• $\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}$ tells that the source value can be replaced by an already existing value or by a new value, i.e., a value not already used in $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}$.

We now illustrate the fact that the scope of value symmetry can sometimes be extended to several collections of variables. For this purpose we consider the $\mathrm{𝚌𝚘𝚖𝚖𝚘𝚗}$ constraint.

EXAMPLE 8: Consider the $\mathrm{𝚌𝚘𝚖𝚖𝚘𝚗}$$\left(\mathrm{𝙽𝙲𝙾𝙼𝙼𝙾𝙽}\mathtt{1},\mathrm{𝙽𝙲𝙾𝙼𝙼𝙾𝙽}\mathtt{2},\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{1},$ $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{2}\right)$ constraint, which enforces the two following conditions:

• $\mathrm{𝙽𝙲𝙾𝙼𝙼𝙾𝙽}\mathtt{1}$ is the number of variables of the collection $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{1}$ taking a value in $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{2}$.

• $\mathrm{𝙽𝙲𝙾𝙼𝙼𝙾𝙽}\mathtt{2}$ is the number of variables of the collection $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{2}$ taking a value in $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{1}$.

Note that we can exchange all occurrences of two distinct values of $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{1}$ or $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{2}$, or replace all occurrences of an assigned value of $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{1}$ or $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{2}$ by a new value, i.e., a value that is not yet assigned to any variable of $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{1}$ and $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{2}$. Within the electronic catalogue this is represented by the following meta -data, $\mathrm{𝚟𝚊𝚕𝚜}\left(\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{1}.\mathrm{𝚟𝚊𝚛},\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{2}.\mathrm{𝚟𝚊𝚛}\right],\mathrm{𝚒𝚗𝚝},\ne ,\mathrm{𝚊𝚕𝚕},\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}\right)$, to which corresponds the following textual form:

All occurrences of two distinct values in $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{1}.\mathrm{𝚟𝚊𝚛}$ or $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{2}.\mathrm{𝚟𝚊𝚛}$ can be swapped; all occurrences of a value in $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{1}.\mathrm{𝚟𝚊𝚛}$ or $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{2}.\mathrm{𝚟𝚊𝚛}$ can be renamed to any unused value.

For instance, since $\mathrm{𝚌𝚘𝚖𝚖𝚘𝚗}$$\left(3,4,〈\mathbf{1},9,\mathbf{1},5〉,〈2,\mathbf{1},9,9,6,9〉\right)$ is a solution, we can replace all occurrences of value 1 by a not yet assigned value, 7 for instance, and get another valid solution $\mathrm{𝚌𝚘𝚖𝚖𝚘𝚗}$$\left(3,4,〈\mathbf{7},9,\mathbf{7},5〉,〈2,\mathbf{7},9,9,6,9〉\right)$.

The five parameters of $\mathrm{𝚟𝚊𝚕𝚜}\left(\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{1}.\mathrm{𝚟𝚊𝚛},\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{2}.\mathrm{𝚟𝚊𝚛}\right],\mathrm{𝚒𝚗𝚝},\ne ,\mathrm{𝚊𝚕𝚕},$ $\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}\right)$ have the following meaning:

• $\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{1}.\mathrm{𝚟𝚊𝚛},\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{2}.\mathrm{𝚟𝚊𝚛}\right]$ indicates that the modification takes place within the values assigned to the $\mathrm{𝚟𝚊𝚛}$ attribute of the $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{1}$ and $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{2}$ collections.

• $\mathrm{𝚒𝚗𝚝}$ defines the partition of values $𝒫=...,\left\{-1\right\},\left\{0\right\},\left\{1\right\},...$ .

• $\ne$ indicates that the exchange of values takes place between two distinct elements of $𝒫$.

• $\mathrm{𝚊𝚕𝚕}$ specifies that all occurrences of the source value have to be exchanged with all occurrences of the target value.

• $\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}$ tells that the source value can be replaced by an already existing value or by a new value, i.e., a value not already used in $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{1}$ or $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\mathtt{2}$.

We now present an example that illustrates the fact that value symmetry can also occur between two arguments that both correspond to a domain variable, i.e., not just between the variables of a collection of variables. For this purpose we consider the $\mathrm{𝚕𝚎𝚚}$ constraint.

EXAMPLE 9: Consider the $\mathrm{𝚕𝚎𝚚}$$\left(\mathrm{𝚅𝙰𝚁}\mathtt{1},\mathrm{𝚅𝙰𝚁}\mathtt{2}\right)$ constraint, which enforces $\mathrm{𝚅𝙰𝚁}\mathtt{1}$ to be less than or equal to $\mathrm{𝚅𝙰𝚁}\mathtt{2}$. Note that $\mathrm{𝚅𝙰𝚁}\mathtt{1}$ can be decreased to any value, and that $\mathrm{𝚅𝙰𝚁}\mathtt{1}$ can be increased up to $\mathrm{𝚅𝙰𝚁}\mathtt{2}$. Similarly, $\mathrm{𝚅𝙰𝚁}\mathtt{2}$ can be increased to any value, and $\mathrm{𝚅𝙰𝚁}\mathtt{2}$ can be decreased down to $\mathrm{𝚅𝙰𝚁}\mathtt{1}$. Within the electronic catalogue this is respectively represented by the following meta -data, $\mathrm{𝚟𝚊𝚕𝚜}\left(\left[\mathrm{𝚅𝙰𝚁}\mathtt{1}\right],\mathrm{𝚒𝚗𝚝}\left(\le \left(\mathrm{𝚅𝙰𝚁}\mathtt{2}\right)\right),\ne ,\mathrm{𝚊𝚕𝚕},\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}\right)$ and $\mathrm{𝚟𝚊𝚕𝚜}\left(\left[\mathrm{𝚅𝙰𝚁}\mathtt{2}\right],\mathrm{𝚒𝚗𝚝}\left(\ge \left(\mathrm{𝚅𝙰𝚁}\mathtt{1}\right)\right),\ne ,\mathrm{𝚊𝚕𝚕},\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}\right)$, to which corresponds the following textual form:

$\mathrm{𝚅𝙰𝚁}\mathtt{1}$ can be replaced by any value $\le$ $\mathrm{𝚅𝙰𝚁}\mathtt{2}$;

$\mathrm{𝚅𝙰𝚁}\mathtt{2}$ can be replaced by any value $\ge$ $\mathrm{𝚅𝙰𝚁}\mathtt{1}$.

For instance, since $\mathrm{𝚕𝚎𝚚}$$\left(\mathbf{2},9\right)$ is a solution, we can replace value 2 by any value less than or equal to 9, e.g. value 5 and get another valid solution $\mathrm{𝚕𝚎𝚚}$$\left(\mathbf{5},9\right)$. But, within $\mathrm{𝚕𝚎𝚚}$$\left(2,\mathbf{9}\right)$, we can also replace value 9 with any other value greater than or equal to 2, e.g. value 4 and get another valid solution $\mathrm{𝚕𝚎𝚚}$$\left(2,\mathbf{4}\right)$.

The five parameters of $\mathrm{𝚟𝚊𝚕𝚜}\left(\left[\mathrm{𝚅𝙰𝚁}\mathtt{1}\right],\mathrm{𝚒𝚗𝚝}\left(\le \left(\mathrm{𝚅𝙰𝚁}\mathtt{2}\right)\right),\ne ,\mathrm{𝚊𝚕𝚕},\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}\right)$ have the following meaning:

• $\left[\mathrm{𝚅𝙰𝚁}\mathtt{1}\right]$ indicates that the modification takes place within the value assigned to the argument $\mathrm{𝚅𝙰𝚁}\mathtt{1}$ of the constraint $\mathrm{𝚕𝚎𝚚}$.

• $\mathrm{𝚒𝚗𝚝}\left(\le \left(\mathrm{𝚅𝙰𝚁}\mathtt{2}\right)\right)$ defines the partition of values $𝒫=...,\left\{\mathrm{𝚅𝙰𝚁}\mathtt{2}-2\right\},\left\{\mathrm{𝚅𝙰𝚁}\mathtt{2}-1\right\},\left\{\mathrm{𝚅𝙰𝚁}\mathtt{2}\right\}$ (i.e., we only consider values that are less than or equal to $\mathrm{𝚅𝙰𝚁}\mathtt{2}$).

• $\ne$ indicates that the exchange of values takes place between two distinct elements of $𝒫$.

• $\mathrm{𝚊𝚕𝚕}$ specifies that all occurrences of the source value have to be replaced by the target value. Note that, since the scope of the change is reduced to one single variable, we have one occurrence of the source value and no occurrence of the target value.

• $\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}$ tells that the source value will be replaced by a new value.

The meta -data $\mathrm{𝚟𝚊𝚕𝚜}\left(\left[\mathrm{𝚅𝙰𝚁}\mathtt{2}\right],\mathrm{𝚒𝚗𝚝}\left(\ge \left(\mathrm{𝚅𝙰𝚁}\mathtt{1}\right)\right),\ne ,\mathrm{𝚊𝚕𝚕},\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}\right)$ has a similar explanation.

We now present two examples related to the $𝚔_\mathrm{𝚍𝚒𝚜𝚓𝚘𝚒𝚗𝚝}$ constraint. The first example illustrates the fact that the path specifying the scope of the exchange can contain more than one collection. The second example exemplifies the fact that the path specifying the scope of the exchange does not necessarily start with a top level collection.

EXAMPLE 10: Consider the $𝚔_\mathrm{𝚍𝚒𝚜𝚓𝚘𝚒𝚗𝚝}$$\left(\mathrm{𝚂𝙴𝚃𝚂}\right)$ constraint which, given $|\mathrm{𝚂𝙴𝚃𝚂}|$ sets of domain variables, enforces that no value is assigned to more than one set. Note that we can swap all the occurrences of two values, or replace all occurrences of a value by a value that is not yet used. Within the electronic catalogue this is represented by the following meta -data, $\mathrm{𝚟𝚊𝚕𝚜}\left(\left[\mathrm{𝚂𝙴𝚃𝚂}.\mathrm{𝚜𝚎𝚝}.\mathrm{𝚟𝚊𝚛}\right],\mathrm{𝚒𝚗𝚝},\ne ,\mathrm{𝚊𝚕𝚕},\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}\right)$, to which corresponds the following textual form:

All occurrences of two distinct values of $\mathrm{𝚂𝙴𝚃𝚂}.\mathrm{𝚜𝚎𝚝}.\mathrm{𝚟𝚊𝚛}$ can be swapped; all occurrences of a value of $\mathrm{𝚂𝙴𝚃𝚂}.\mathrm{𝚜𝚎𝚝}.\mathrm{𝚟𝚊𝚛}$ can be renamed to any unused value.

For instance, since $𝚔_\mathrm{𝚍𝚒𝚜𝚓𝚘𝚒𝚗𝚝}$$\left(〈\mathrm{𝚜𝚎𝚝}-〈\mathbf{1},9,\mathbf{1},5〉,\mathrm{𝚜𝚎𝚝}-〈7,2,7〉〉\right)$ is a solution, we can replace value 1 by any value that is different from the already used values 2, 5, 7, and 9, e.g. value 3, and get another valid solution $𝚔_\mathrm{𝚍𝚒𝚜𝚓𝚘𝚒𝚗𝚝}$$\left(〈\mathrm{𝚜𝚎𝚝}-〈\mathbf{3},9,\mathbf{3},5〉,\mathrm{𝚜𝚎𝚝}-〈7,2,7〉〉\right)$. From the solution $𝚔_\mathrm{𝚍𝚒𝚜𝚓𝚘𝚒𝚗𝚝}$$\left(〈\mathrm{𝚜𝚎𝚝}-〈\mathbf{1},9,\mathbf{1},5〉,\mathrm{𝚜𝚎𝚝}-〈7,\mathbf{2},7〉〉\right)$, we can also swap all occurrences of two values, e.g. values 1 and 2, and get another valid solution $𝚔_\mathrm{𝚍𝚒𝚜𝚓𝚘𝚒𝚗𝚝}$$\left(〈\mathrm{𝚜𝚎𝚝}-〈\mathbf{2},9,\mathbf{2},5〉,\mathrm{𝚜𝚎𝚝}-〈7,\mathbf{1},7〉〉\right)$.

The five parameters of $\mathrm{𝚟𝚊𝚕𝚜}\left(\left[\mathrm{𝚂𝙴𝚃𝚂}.\mathrm{𝚜𝚎𝚝}.\mathrm{𝚟𝚊𝚛}\right],\mathrm{𝚒𝚗𝚝},\ne ,\mathrm{𝚊𝚕𝚕},\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}\right)$ have the following meaning:

• $\left[\mathrm{𝚂𝙴𝚃𝚂}.\mathrm{𝚜𝚎𝚝}.\mathrm{𝚟𝚊𝚛}\right]$ indicates that the modification takes place within the values assigned to the $\mathrm{𝚟𝚊𝚛}$ attribute of the $\mathrm{𝚂𝙴𝚃𝚂}.\mathrm{𝚜𝚎𝚝}$ collections.

• $\mathrm{𝚒𝚗𝚝}$ defines the partition of values $𝒫=...,\left\{-1\right\},\left\{0\right\},\left\{1\right\},...$ .

• $\ne$ indicates that the exchange of values takes place between two distinct elements of $𝒫$.

• $\mathrm{𝚊𝚕𝚕}$ specifies that all occurrences of the source value have to be exchanged with all occurrences of the target value.

• $\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}$ tells that the source value can be replaced by an already existing value or by a new value, i.e., a value not already used in $\mathrm{𝚂𝙴𝚃𝚂}.\mathrm{𝚜𝚎𝚝}.\mathrm{𝚟𝚊𝚛}$.

EXAMPLE 11: Consider the $𝚔_\mathrm{𝚍𝚒𝚜𝚓𝚘𝚒𝚗𝚝}$$\left(\mathrm{𝚂𝙴𝚃𝚂}\right)$ constraint which, given $|\mathrm{𝚂𝙴𝚃𝚂}|$ sets of domain variables, enforces that no value is assigned to more than one set. Note that, within any set, we can replace any occurrence of a value by another value that is already used in the same set. Within the electronic catalogue this is represented by the following meta -data, $\mathrm{𝚟𝚊𝚕𝚜}\left(\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}\right],\mathrm{𝚒𝚗𝚝},\ne ,\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎},\mathrm{𝚒𝚗}\right)$, to which corresponds the following textual form:

An occurrence of a value of $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}$ can be replaced by any value of $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}$.

For instance, since $𝚔_\mathrm{𝚍𝚒𝚜𝚓𝚘𝚒𝚗𝚝}$$\left(〈\mathrm{𝚜𝚎𝚝}-〈\mathbf{1},9,1,5〉,\mathrm{𝚜𝚎𝚝}-〈7,2,7〉〉\right)$ is a solution, we can replace within the first set the first occurrence of value 1 by the already used value 5, and get another valid solution $𝚔_\mathrm{𝚍𝚒𝚜𝚓𝚘𝚒𝚗𝚝}$$\left(〈\mathrm{𝚜𝚎𝚝}-〈\mathbf{5},9,1,5〉,\mathrm{𝚜𝚎𝚝}-〈7,2,7〉〉\right)$.

The five parameters of $\mathrm{𝚟𝚊𝚕𝚜}\left(\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}\right],\mathrm{𝚒𝚗𝚝},\ne ,\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎},\mathrm{𝚒𝚗}\right)$ have the following meaning:

• $\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}\right]$ indicates that the modification takes place within the values assigned to the $\mathrm{𝚟𝚊𝚛}$ attribute of the $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}$ collections. Note that since the corresponding path does not start from a top level collection (i.e., $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$ does not correspond to an argument of the $𝚔_\mathrm{𝚍𝚒𝚜𝚓𝚘𝚒𝚗𝚝}$ constraint), this represents one set of values for each set: the scope of value symmetry is located within one single set.

• $\mathrm{𝚒𝚗𝚝}$ defines the partition of values $𝒫=...,\left\{-1\right\},\left\{0\right\},\left\{1\right\},...$ .

• $\ne$ indicates that the exchange of values takes place between two distinct elements of $𝒫$.

• $\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}$ specifies that one occurrence of the source value has to be replaced by the target value.

• $\mathrm{𝚒𝚗}$ tells that the source value has to be replaced by an already existing value in $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}$.

We present a last example where the path specifying the scope of the exchange does not end with an attribute but rather with a collection. This can be seen as a generalisation of value symmetry where, instead of exchanging values, we exchange tuples of values. This kind of value symmetry occurs in constraints like $\mathrm{𝚌𝚘𝚗𝚍}_\mathrm{𝚕𝚎𝚡}_\mathrm{𝚌𝚘𝚜𝚝}$, $\mathrm{𝚒𝚗}_\mathrm{𝚛𝚎𝚕𝚊𝚝𝚒𝚘𝚗}$, $\mathrm{𝚗𝚙𝚊𝚒𝚛}$, $\mathrm{𝚗𝚟𝚎𝚌𝚝𝚘𝚛}$, $\mathrm{𝚗𝚟𝚎𝚌𝚝𝚘𝚛𝚜}$, or $\mathrm{𝚙𝚊𝚝𝚝𝚎𝚛𝚗}$.

EXAMPLE 12: Consider the $\mathrm{𝚗𝚟𝚎𝚌𝚝𝚘𝚛}$$\left(\mathrm{𝙽𝚅𝙴𝙲},\mathrm{𝚅𝙴𝙲𝚃𝙾𝚁𝚂}\right)$ constraint which enforces an equality between $\mathrm{𝙽𝚅𝙴𝙲}$ and the number of distinct tuples of values taken by the vectors of the collection $\mathrm{𝚅𝙴𝙲𝚃𝙾𝚁𝚂}$. Note that we can swap all the occurrences of two tuples of values, or replace all occurrences of a tuple of values by a tuple of values that is not yet used. Within the electronic catalogue this is represented by the following meta -data, $\mathrm{𝚟𝚊𝚕𝚜}\left(\left[\mathrm{𝚅𝙴𝙲𝚃𝙾𝚁𝚂}.\mathrm{𝚟𝚎𝚌}\right],\mathrm{𝚒𝚗𝚝},\ne ,\mathrm{𝚊𝚕𝚕},\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}\right)$, to which corresponds the following textual form:

All occurrences of two distinct tuples of values of $\mathrm{𝚅𝙴𝙲𝚃𝙾𝚁𝚂}.\mathrm{𝚟𝚎𝚌}$ can be swapped; all occurrences of a tuple of values of $\mathrm{𝚅𝙴𝙲𝚃𝙾𝚁𝚂}.\mathrm{𝚟𝚎𝚌}$ can be renamed to any unused tuple of values.

For instance, since $\mathrm{𝚗𝚟𝚎𝚌𝚝𝚘𝚛}$$\left(2,〈\mathrm{𝚟𝚎𝚌}-〈\mathbf{5},\mathbf{6}〉,\mathrm{𝚟𝚎𝚌}-〈9,2〉,\mathrm{𝚟𝚎𝚌}-〈\mathbf{5},\mathbf{6}〉〉\right)$ is a solution, we can replace all the occurrences of the tuple of values $〈5,6〉$ by any unused tuple of values, e.g. the tuple of values $〈1,2〉$, and get another valid solution $\mathrm{𝚗𝚟𝚎𝚌𝚝𝚘𝚛}$$\left(2,〈\mathrm{𝚟𝚎𝚌}-〈\mathbf{1},\mathbf{2}〉,\mathrm{𝚟𝚎𝚌}-〈9,2〉,\mathrm{𝚟𝚎𝚌}-〈\mathbf{1},\mathbf{2}〉〉\right)$.

The five parameters of $\mathrm{𝚟𝚊𝚕𝚜}\left(\left[\mathrm{𝚅𝙴𝙲𝚃𝙾𝚁𝚂}.\mathrm{𝚟𝚎𝚌}\right],\mathrm{𝚒𝚗𝚝},\ne ,\mathrm{𝚊𝚕𝚕},\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}\right)$ have the following meaning:

• $\left[\mathrm{𝚅𝙴𝙲𝚃𝙾𝚁𝚂}.\mathrm{𝚟𝚎𝚌}\right]$ indicates that the modification takes place within the tuples of values assigned to the $\mathrm{𝚟𝚎𝚌}$ attribute of the $\mathrm{𝚅𝙴𝙲𝚃𝙾𝚁𝚂}$ collections.

• $\mathrm{𝚒𝚗𝚝}$ defines the partition of values $𝒫={ℤ}^{|\mathrm{𝚅𝙴𝙲𝚃𝙾𝚁𝚂}|}$.

• $\ne$ indicates that the exchange of tuple of values takes place between two distinct elements of $𝒫$.

• $\mathrm{𝚊𝚕𝚕}$ specifies that all occurrences of the source tuple of values have to be exchanged with all occurrences of the target tuple of values.

• $\mathrm{𝚍𝚘𝚗𝚝𝚌𝚊𝚛𝚎}$ tells that the source tuple of values can be replaced by an already existing tuple of values or by a new tuple of values, i.e., a tuple of values not already used in $\mathrm{𝚅𝙴𝙲𝚃𝙾𝚁𝚂}.\mathrm{𝚟𝚎𝚌}$.

• $\mathrm{𝚝𝚛𝚊𝚗𝚜𝚕𝚊𝚝𝚎}\left(\mathrm{𝙰𝚃𝚃𝚁𝙸𝙱𝚄𝚃𝙴𝚂}\right)$ denotes the fact that we add a constant to some collection attributes (i.e., we express the fact that solutions are preserved under some specific translation). $\mathrm{𝙰𝚃𝚃𝚁𝙸𝙱𝚄𝚃𝙴𝚂}$ is a list of terms of the form $\mathrm{𝙰𝚁𝙶}\mathtt{1}$, or $\mathrm{𝙰𝚁𝙶}\mathtt{2}.\mathrm{𝚊𝚝𝚝𝚛}$, or $\mathrm{𝙰𝚁𝙶}\mathtt{3}.{\mathrm{𝚊𝚝𝚝𝚛}}_{𝚒}.{\mathrm{𝚊𝚝𝚝𝚛}}_{𝚓}$, where:

• $\mathrm{𝙰𝚁𝙶}\mathtt{1}$ is an argument of the global constraint of type domain variable or integer.

• $\mathrm{𝙰𝚁𝙶}\mathtt{2}$ is an argument of the global constraint that corresponds to a collection, and $\mathrm{𝚊𝚝𝚝𝚛}$ is an attribute of $\mathrm{𝙰𝚁𝙶}\mathtt{2}$ of type domain variable or integer.

• $\mathrm{𝙰𝚁𝙶}\mathtt{3}$ is an argument of the global constraint that corresponds to a collection, and ${\mathrm{𝚊𝚝𝚝𝚛}}_{𝚒}$ is an attribute of $\mathrm{𝙰𝚁𝙶}\mathtt{3}$ of type collection, and ${\mathrm{𝚊𝚝𝚝𝚛}}_{𝚓}$ is an attribute of $\mathrm{𝙰𝚁𝙶}\mathtt{3}.{\mathrm{𝚊𝚝𝚝𝚛}}_{𝚒}$ of type domain variable or integer.

Its purpose is to define all the elements that have to be simultaneously incremented by one and the same constant.

• The case corresponding to $\mathrm{𝙰𝚁𝙶}\mathtt{1}$ is motivated by the fact that we sometimes want to increment an argument that is a domain variable or an integer.

• The case corresponding to $\mathrm{𝙰𝚁𝙶}\mathtt{2}.\mathrm{𝚊𝚝𝚝𝚛}$ is the standard case where we want to express that we increment attribute $\mathrm{𝚊𝚝𝚝𝚛}$ of all items of a collection that is passed as an argument of the global constraint.

• Finally, the last case $\mathrm{𝙰𝚁𝙶}\mathtt{3}.{\mathrm{𝚊𝚝𝚝𝚛}}_{𝚒}.{\mathrm{𝚊𝚝𝚝𝚛}}_{𝚓}$ corresponds to the fact that we want to increment attribute ${\mathrm{𝚊𝚝𝚝𝚛}}_{𝚓}$ of all items corresponding to $\mathrm{𝙰𝚁𝙶}\mathtt{3}.{\mathrm{𝚊𝚝𝚝𝚛}}_{𝚒}$.

We now provide two examples, where the translation is respectively applied on one single attribute and on two attributes of a collection.

EXAMPLE 1: Consider the $\mathrm{𝚊𝚕𝚕}_\mathrm{𝚖𝚒𝚗}_\mathrm{𝚍𝚒𝚜𝚝}$$\left(\mathrm{𝙼𝙸𝙽𝙳𝙸𝚂𝚃},\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}\right)$ constraint which enforces for each pair $\left({\mathrm{𝚟𝚊𝚛}}_{i},{\mathrm{𝚟𝚊𝚛}}_{j}\right)$ of distinct variables of the collection $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$ that $|{\mathrm{𝚟𝚊𝚛}}_{i}-{\mathrm{𝚟𝚊𝚛}}_{j}|\ge \mathrm{𝙼𝙸𝙽𝙳𝙸𝚂𝚃}$. Note that we can add one and the same constant to all variables of the collection $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$ since this does not change the difference between any pair of variables. Within the electronic catalogue this is represented by the following meta -data, $\mathrm{𝚝𝚛𝚊𝚗𝚜𝚕𝚊𝚝𝚎}\left(\left[\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}.\mathrm{𝚟𝚊𝚛}\right]\right)$, to which corresponds the following textual form:

One and the same constant can be added to the $\mathrm{𝚟𝚊𝚛}$ attribute of all items of $\mathrm{𝚅𝙰𝚁𝙸𝙰𝙱𝙻𝙴𝚂}$.

For instance, since $\mathrm{𝚊𝚕𝚕}_\mathrm{𝚖𝚒𝚗}_\mathrm{𝚍𝚒𝚜𝚝}$$\left(2,〈\mathbf{5},\mathbf{1},\mathbf{9},\mathbf{3}〉\right)$ is a solution, we can add the constant 6 to all items of the collection $〈5,1,9,3〉$, and get another valid solution $\mathrm{𝚊𝚕𝚕}_\mathrm{𝚖𝚒𝚗}_\mathrm{𝚍𝚒𝚜𝚝}$$\left(2,〈\mathbf{11},\mathbf{7},\mathbf{15},\mathbf{9}〉\right)$.

EXAMPLE 2: Consider the $\mathrm{𝚌𝚞𝚖𝚞𝚕𝚊𝚝𝚒𝚟𝚎}$$\left(\mathrm{𝚃𝙰𝚂𝙺𝚂},\mathrm{𝙻𝙸𝙼𝙸𝚃}\right)$ constraint which enforces that at each point in time, the cumulated height of the set of tasks that overlap that point, does not exceed a given limit. Note that we can add one and the same constant to all $\mathrm{𝚘𝚛𝚒𝚐𝚒𝚗}$ and $\mathrm{𝚎𝚗𝚍}$ attributes of the different tasks of the $\mathrm{𝚃𝙰𝚂𝙺𝚂}$ collection. This operation simply shifts the overall schedule by a given constant without affecting the maximum resource consumption. Within the electronic catalogue this is represented by the following meta -data, $\mathrm{𝚝𝚛𝚊𝚗𝚜𝚕𝚊𝚝𝚎}\left(\left[\mathrm{𝚃𝙰𝚂𝙺𝚂}.\mathrm{𝚘𝚛𝚒𝚐𝚒𝚗},\mathrm{𝚃𝙰𝚂𝙺𝚂}.\mathrm{𝚎𝚗𝚍}\right]\right)$, to which corresponds the following textual form:

One and the same constant can be added to the $\mathrm{𝚘𝚛𝚒𝚐𝚒𝚗}$ and $\mathrm{𝚎𝚗𝚍}$ attributes of all items of $\mathrm{𝚃𝙰𝚂𝙺𝚂}$.

For instance, since

$\left(\begin{array}{c}〈\begin{array}{cccc}\mathrm{𝚘𝚛𝚒𝚐𝚒𝚗}-\mathbf{1}\hfill & \mathrm{𝚍𝚞𝚛𝚊𝚝𝚒𝚘𝚗}-3\hfill & \mathrm{𝚎𝚗𝚍}-\mathbf{4}\hfill & \mathrm{𝚑𝚎𝚒𝚐𝚑𝚝}-1,\hfill \\ \mathrm{𝚘𝚛𝚒𝚐𝚒𝚗}-\mathbf{2}\hfill & \mathrm{𝚍𝚞𝚛𝚊𝚝𝚒𝚘𝚗}-9\hfill & \mathrm{𝚎𝚗𝚍}-\mathbf{11}\hfill & \mathrm{𝚑𝚎𝚒𝚐𝚑𝚝}-2,\hfill \\ \mathrm{𝚘𝚛𝚒𝚐𝚒𝚗}-\mathbf{3}\hfill & \mathrm{𝚍𝚞𝚛𝚊𝚝𝚒𝚘𝚗}-10\hfill & \mathrm{𝚎𝚗𝚍}-\mathbf{13}\hfill & \mathrm{𝚑𝚎𝚒𝚐𝚑𝚝}-1,\hfill \\ \mathrm{𝚘𝚛𝚒𝚐𝚒𝚗}-\mathbf{6}\hfill & \mathrm{𝚍𝚞𝚛𝚊𝚝𝚒𝚘𝚗}-6\hfill & \mathrm{𝚎𝚗𝚍}-\mathbf{12}\hfill & \mathrm{𝚑𝚎𝚒𝚐𝚑𝚝}-1,\hfill \\ \mathrm{𝚘𝚛𝚒𝚐𝚒𝚗}-\mathbf{7}\hfill & \mathrm{𝚍𝚞𝚛𝚊𝚝𝚒𝚘𝚗}-2\hfill & \mathrm{𝚎𝚗𝚍}-\mathbf{9}\hfill & \mathrm{𝚑𝚎𝚒𝚐𝚑𝚝}-3\hfill \end{array}〉,8\hfill \end{array}\right)$

is a solution, we can add the constant 2 to all $\mathrm{𝚘𝚛𝚒𝚐𝚒𝚗}$ and $\mathrm{𝚎𝚗𝚍}$ attributes, and get another valid solution

$\left(\begin{array}{c}〈\begin{array}{cccc}\mathrm{𝚘𝚛𝚒𝚐𝚒𝚗}-\mathbf{3}\hfill & \mathrm{𝚍𝚞𝚛𝚊𝚝𝚒𝚘𝚗}-3\hfill & \mathrm{𝚎𝚗𝚍}-\mathbf{6}\hfill & \mathrm{𝚑𝚎𝚒𝚐𝚑𝚝}-1,\hfill \\ \mathrm{𝚘𝚛𝚒𝚐𝚒𝚗}-\mathbf{4}\hfill & \mathrm{𝚍𝚞𝚛𝚊𝚝𝚒𝚘𝚗}-9\hfill & \mathrm{𝚎𝚗𝚍}-\mathbf{13}\hfill & \mathrm{𝚑𝚎𝚒𝚐𝚑𝚝}-2,\hfill \\ \mathrm{𝚘𝚛𝚒𝚐𝚒𝚗}-\mathbf{5}\hfill & \mathrm{𝚍𝚞𝚛𝚊𝚝𝚒𝚘𝚗}-10\hfill & \mathrm{𝚎𝚗𝚍}-\mathbf{15}\hfill & \mathrm{𝚑𝚎𝚒𝚐𝚑𝚝}-1,\hfill \\ \mathrm{𝚘𝚛𝚒𝚐𝚒𝚗}-\mathbf{8}\hfill & \mathrm{𝚍𝚞𝚛𝚊𝚝𝚒𝚘𝚗}-6\hfill & \mathrm{𝚎𝚗𝚍}-\mathbf{14}\hfill & \mathrm{𝚑𝚎𝚒𝚐𝚑𝚝}-1,\hfill \\ \mathrm{𝚘𝚛𝚒𝚐𝚒𝚗}-\mathbf{9}\hfill & \mathrm{𝚍𝚞𝚛𝚊𝚝𝚒𝚘𝚗}-2\hfill & \mathrm{𝚎𝚗𝚍}-\mathbf{11}\hfill & \mathrm{𝚑𝚎𝚒𝚐𝚑𝚝}-3\hfill \end{array}〉,8\hfill \end{array}\right).$

We conclude by listing other types of symmetries that we may also consider in the future, namely:

• In the context of graph constraints we can usually relabel the vertices of the corresponding graph. This is for instance the case of the $\mathrm{𝚌𝚒𝚛𝚌𝚞𝚒𝚝}$ constraint where the $\mathrm{𝚒𝚗𝚍𝚎𝚡}$ attribute corresponds to the name of a vertex.

• In the context of constraints on a matrix we can have symmetries on both the rows and the columns of the matrix. On the one hand, since a row corresponds to a collection this can be currently expressed. On the other hand, since a column corresponds to all the ${i}^{th}$ items of the collections corresponding to the rows, this currently cannot be expressed.

• Given a collection of items, we want to express a symmetry on different subsets of items: more precisely, on all items for which a given attribute is assigned the same value. As an illustrative example consider the $\mathrm{𝚌𝚞𝚖𝚞𝚕𝚊𝚝𝚒𝚟𝚎𝚜}$ constraint. We would like to express the fact that we can translate the origin of all tasks that are assigned the same machine.

• Given a collection of items we can sometimes multiply by $-1$ all occurrences of one of its attributes. This usually corresponds to a mirror symmetry. This is for instance the case for the $\mathrm{𝚘𝚛𝚒𝚐𝚒𝚗}$ attribute of the $\mathrm{𝚌𝚞𝚖𝚞𝚕𝚊𝚝𝚒𝚟𝚎}$ constraint.