“…To this end, many techniques have been proposed, in order to modify (or reformulate) the given constraint problem into an equivalent one, with the goal of reducing the solving time. Good examples are the addition of new constraints, e.g., symmetry-breaking (cf., e.g., [28,8,12,22]), or implied constraints (cf., e.g., [30]), in order to, respectively, reduce the size of the search space, and to be able to perform better On the other hand, current systems for CP exhibit a neat separation between problem specifications and instances, usually adopting a two-level architecture for finding solutions: the specification is instantiated (or grounded) against the instance, and then an appropriate solver is invoked (cf. Figure 1).…”