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

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

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

, когда 

, и 

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

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

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

, когда 

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

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

, 

, 

 и 

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

 и 

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

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

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

, когда 

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

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

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

 задаем через 

 и 

: 

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

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