Вот страница Wikipedia по теме, которая описывает алгоритм полиномиального времени. (Алгоритм грубой силы, состоящий в том, чтобы просто пробовать все различные назначения правды, является экспоненциальным временем.) Может быть, немного дальнейшего объяснения поможет.
Выражение «если P, то Q» ложно, только когда P истинно, а Q ложно. Таким образом, выражение имеет те же значения таблицы истинности, что и "Q or not P". Это также эквивалентно его противозачаточному «если не Q, то не P», а это, в свою очередь, эквивалентно «не P или Q» (так же, как другой).
Таким образом, алгоритм включает замену каждого выражения формы «A или B» двумя выражениями: «если не A, то B» и «если не B, то A». (Другими словами, A и B не могут быть ложными.)
Затем создайте график, представляющий эти значения. Создайте узлы для каждого «A» и «не A» и добавьте ссылки для каждого из последствий, полученных выше.
Последний шаг - убедиться, что ни одна из переменных не эквивалентна своему отрицанию. То есть для каждой переменной A (или не A) перейдите по ссылкам, чтобы обнаружить все узлы, к которым можно получить доступ из нее, стараясь обнаружить петли.
Если одна из переменных, A, может достигать «не A», а «не A» также может достигать A, то исходное выражение не выполнимо. (Это парадокс.) Если ни одна из переменных не делает этого, то она выполнима.
(Это нормально, если А подразумевает «не А», но не наоборот. Это просто означает, что А должен быть отрицан, чтобы удовлетворить выражению.)