У меня есть выражение, предположим,
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. Я использовал карту карты, содержащую функцию в качестве значения. Это оказалось очень кстати, всего несколько правил для нескольких комбинаций, и все готово. Спасибо за полезные ответы.