Reducing логическое выражение

У меня есть выражение, предположим,

a = 1 && (b = 1 || b != 0 ) && (c >= 35 || d != 5) && (c >= 38 || d = 6)

Я ожидаю, что оно будет сокращено до,

a = 1 && b != 0 && (c >= 38 || d = 6)

Действительно ли у кого-нибудь есть предложения? Указатели на какой-либо алгоритм?

Nota Bene: Карно Карно или Куайн-МакКласки, я полагаю, здесь не вариант. Поскольку эти методы не обрабатывают серые случаи. Я имею в виду, что выражение может быть уменьшено только в том случае, если вещи похожи на «А» или «А» или ничего, или, скажем, на черный, или белый, или на отсутствие цвета. Но здесь у меня серые оттенки, как вы видите.

Решение: Я написал для этого программу на Clojure. Я использовал карту карты, содержащую функцию в качестве значения. Это оказалось очень кстати, всего несколько правил для нескольких комбинаций, и все готово. Спасибо за полезные ответы.

6
задан Adeel Ansari 20 March 2012 в 09:51
поделиться