Constraint programs over finite domains have usually a very simple and regular structure:
The usage of Grace reflects this program structure. At the beginning of each program section a call to an appropriate Grace predicate is inserted into the program source, so that Grace is notified about the program data and execution. For the labelling phase Grace offers even more: instead of just monitoring the labelling process, it is possible to control the whole labelling process through Grace , making use both of its predefined strategies and manual control.
Grace predicates can remain in the program source even if Grace is not used -- the predicates grace/0 and nograce/0 switch the 'gracing' mode on and off. The overhead of executing Grace predicates in the off mode is minimal.