OCaml library for constraint programming
FaCiLe is a constraint programming library on integer and integer set finite domains written in OCaml. It offers all usual facilities to create and manipulate finite domain variables, arithmetic expressions and constraints (possibly non-linear), built-in global constraints (difference, cardinality, sorting etc.) and search and optimization goals. FaCiLe allows as well to build easily user-defined constraints and goals (including recursive ones), making pervasive use of OCaml higher-order functionals to provide a simple and flexible interface for the user. As FaCiLe is an OCaml library and not "yet another language", the user benefits from type inference and strong typing discipline, high level of abstraction, modules and objects system, as well as native code compilation efficiency, garbage collection and replay debugger, all features of OCaml (among many others) that allow to prototype and experiment quickly: modeling, data processing and interface are implemented with the same powerful and efficient language.