
gfd_vars_impose_bounds(+Vars, ++Lo, ++Hi)

   Update (if required) the bounds of Vars.

Arguments
   Vars                Collection of (domain) variables or integers
   Lo                  Lower bound (integer)
   Hi                  Upper bound (integer)

Type
   library(gfd)

Description

   Primitive for updating the bounds of Vars so that the Lower bounds
   are at least Lo and the upper bounds are at most Hi.
   A bound update on a variable may fail (when the update empties
   the domain), succeed (possibly updating the variable's bounds), or
   instantiate the variable (in the case where the domain gets restricted to
   a singleton value).

   Note that this predicate is intended for use only in implementing
   co-operation with other solvers and constraint propagators at the
   ECLiPSe level, and should not be called from ordinary user code.
   It differs from the usual constraint in that the propagation is not
   performed immediately. Normally, propagation in gecode is performed by
   a suspended goal that is scheduled and woken after each constraint is
   posted.  However, this predicate does not call the woken goal
   scheduler (wake/0), so the propagation goal may not be executed 
   immediately. (It is possible that under some circumstances the goal 
   will be executed, if wake/0 is called indirectly - one example would be
   by the unify handler if the variable becomes ground - but this should not
   be relied upon.) To ensure that the goals are eventually executed, the 
   caller should arrange for wake/0 to be called at some appropriate point 
   in the subsequent execution.  Please see the "Advanced Control Features" 
   section of the User Manual for more information about woken goal 
   management.

   This predicate is specific to lib(gfd), and is more efficient than
   using multiple impose_max/2 and impose_min/2 for updating each 
   variable in Vars. Also, unlike impose_bounds/2, this primitive does
   not call wake, so it behaviour is consistent with the other gfd_vars
   primitives.



