Пытаясь свести одну задачу к целочисленному линейному программированию, столкнулся с такой проблемой: у меня есть целочисленная переменная, принимающая 3 значения:

. А нужна булевская,

, которая бы принимала значение

, когда

, и

в остальных случаях. Методом тыка довольно легко нашел, что проблема решается добавлением неравенств

.
Однако применение того же метода к случаю

, которая бы принимала значение

, когда

, как-то не пошло, получалось, что это (написать такое неравенство) невозможно. Нарисовав картинку на плоскости

, понял, почему: я пытался "вырезать" выпуклый многоугольник, в котором целых точек было бы

,

,

и

. Однако на отрезке с концами

и

лежит "лишняя" точка

, от которой, таким образом, нельзя избавиться.
Пришлось пойти длинным путем: ввести признак равенства двум (

, которая принимает значение

, когда

), тогда проблемы лишней точки нет,

задается неравенством

, а уж признак равенства единице

задаем через

и

:

, по MIP-вски, соответственно,

.
Вопрос, собс-но, нет ли какой-то общей технологии решения такого сорта задач? скажем, для переменной с 4 значениями все еще усложняется, не хочется изобретать велосипеды.
Может быть, есть какая-то книжка (типа "Математическая логика и целочисленное программирование")?