In the preceding sections we have encountered two optimisation procedures, the finite domain procedure minimize and the MIP procedure optimize. Both optimisation procedures implement an algorithm called branch and bound, which posts a new constraint, each time it finds a solution, that the cost of future solutions must be better than the cost of the current best solution. Eventually the new constraint will be unsatisfiable, and the algorithm will have proved that it has found the optimum.