Search is, of course, much more general than just labelling.
Certainly, for combinatorial problems, it involves making guesses that
may later turn out to have been bad.
However a guess need not involve guessing a value for a variable, as
is done in labelling.
For example if a variable X has range [0..100], instead of
guessing a precise value for X, it may be useful to perform a binary
chop, first guessing that , and then, if the guess turns
out to be bad, guessing that X < 50.
A guess in the most general sense is the posting of a new
(non-redundant) constraint which narrows the search space.
However there is no guarantee that such a guess does not rule out
solutions to the problem, therefore the system must also explore the
remainder of the search space on backtracking.
Typically this is done by imposing the negation of the constraint.
However the negation of an inequality
is a strict inequality
<, which can't be handled by linear programming.
However in case X is an integer variable, and N an integer, the
negation of
is
which can be handled.