[ library(gfd) | Reference Manual | Alphabetic Index ]

gfd_vars_impose_min(+Vars, ++Bound)

Update (if required) the lower bounds of Vars.
Vars
Collection of (domain) variables or integers
Bound
Lower bound (integer)

Description

Primitive for updating the upper bound of Vars so that they are at most Bound. A bound update on a variable in Vars 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_min/2 for updating each variable in Vars, both because this is implementing as one rather than multiple events, and the Gecode rel() constraint for multiple IntVars is used to implement this primitive.