Кто-нибудь знает алгоритм упрощения логических выражений?
Я помню булевую алгебру и карты Карнота, но это предназначено для цифрового оборудования, где ВСЕ является логическим. Я хотел бы что-то, что учитывает, что некоторые подвыражения не являются логическими.
Например:
a == 1 && a == 3
это можно перевести в чистое логическое выражение:
a1 && a3
но это выражение неприводимо, а при небольшом знании арифметики каждый может определить, что выражение справедливо:
false
Какой-то орган знает какие-то ссылки?
a
объявлено как изменчивая переменная/поле в языках/средах выполнения, которые это допускают, а значение колеблется между 1 и 3 в другом потоке? Я не говорю, что это хороший дизайн, но в программном обеспечении «всегда» и «никогда» обычно являются относительными терминами. - person Lasse V. Karlsen   schedule 15.03.2011a > 0 and b > 0 and n > 2 and a^n + b^n = c^n
всегда ложно, но это не так просто доказать. Это означает, что вы застряли со специальными упрощениями, и на ваш вопрос нет четкого ответа (поскольку это будет зависеть от характера выражений, которые вы, вероятно, увидите). - person   schedule 15.03.2011