The finite domain constraint solver of SWI-Prolog
An Overview of the SWI-Prolog Programming Environment