Я думаю, вам нужен небольшой набор простых правил, которые сообщают вам, равны ли два выражения или они совершенно разные.
Давайте начнем с самых простых: b> 3 и b <= 3 </p>
Проверить, равны ли они, легко: b>3
и b>3
равны, b>3
и b<=3
явно не равны.
Чтобы увидеть, являются ли они совершенно разными, нам нужно сравнить b>3
и NOT (b<=3)
. Просто добавив NOT перед ним, мы изменили «отличное» сравнение на «равное».
Ваше программное обеспечение должно теперь иметь логику для преобразования NOT (b<=3)
в (b>3)
. А поскольку они абсолютно равны, то исходные совершенно разные.
Если сравнения сложнее, вам следует начать использовать закон Моргана. Этот закон гласит, что следующие выражения равны:
NOT (A AND B) is equal to NOT A OR NOT B
NOT (A OR B) is equal to NOT A AND NOT B
Теперь объедините оба правила:
- Поставьте NOT перед одним из выражений
- Распределите НЕ по самым элементарным частям выражения, используя закон Моргана.
- Затем сравните все элементы
например. Предположим, мы хотим знать, являются ли следующие выражения совершенно разными:
(a<3) and not (b>=7)
(b>=7) or (a>=3)
Сначала поставьте большое НЕ перед вторым:
NOT ((b>=7) or (a>=3))
Затем распределите НЕ:
(NOT (b>=7)) and (NOT (a>=3))
Теперь удалите NOTS из обоих выражений, используя первое правило:
(a<3) and (b<7)
(b<7) and (a<3)
Затем найдите одинаковые элементы между двумя выражениями. В этом случае все элементы из первого выражения могут быть найдены во втором и наоборот. Это означает, что исходные выражения полностью различны.