Введение

Булева выполнимость является NP-полной задачей, и поэтому существуют NP-полные проблемы. В теории вычислительной сложности теорема Кука — Левина, также известная как теорема Кука, утверждает, что проблема булевой выполнимости является NP-полной. То есть, она принадлежит классу NP, и любая задача из NP может быть сведена в полиномиальное время детерминированной машиной Тьюринга к проблеме булевой выполнимости. Теорема названа в честь Стивена Кука и Леонида Левина. Доказательство было предложено Ричардом Карпом, основанное на более раннем доказательстве (использующем иное понятие сведения) Стивена Кука, представленном в материалах недавно основанного симпозиума ACM по теории вычислений. В последующей статье Ричарда Карпа «Сводимость среди комбинаторных задач»…

Теоретический интерес к NP-полноте также был усилен работами Теодора П. Бейкера, Джона Гилла и Роберта Соловая, которые в 1975 году показали, что решение NP-задач в определенных моделях оракульных машин требует экспоненциального времени. То есть, существует оракул A, такой, что для всех субекспоненциальных классов детерминированной временной сложности T, релятивизированный класс сложности NPA не является подмножеством TA. В частности, для этого оракула PA ≠ NPA. В СССР результат, эквивалентный результатам Бейкера, Гилла и Соловая, был опубликован в 1969 году М. Дехтиаром. Позже статья Леонида Левина «Универсальные задачи поиска» была опубликована в 1973 году, хотя о ней упоминалось в докладах и она была представлена для публикации за несколько лет до этого. Подход Левина несколько отличался от подхода Кука и Карпа тем, что он рассматривал задачи поиска, требующие нахождения решений, а не просто определения их существования. Он представил шесть таких NP-полных задач поиска, или универсальных задач. Кроме того, он нашёл для каждой из этих задач алгоритм, решающий её за оптимальное время (в частности, эти алгоритмы работают за полиномиальное время тогда и только тогда, когда P = NP).

Определения

Задача принятия решения находится в классе NP, если она может быть решена недетерминированной машиной Тьюринга за полиномиальное время. Экземпляр задачи булевой выполнимости – это булево выражение, составленное из булевых переменных с помощью булевых операторов. Такое выражение является выполнимым, если существует такая подстановка значений истинности переменным, при которой всё выражение становится истинным.

Идея

Для любой задачи принятия решений из класса NP постройте недетерминированную машину, которая решает её за полиномиальное время. Затем, для каждого входа этой машины, постройте булево выражение, которое определяет, правильно ли машина работает с этим конкретным входом, останавливается ли она и выдаёт ли ответ "да". Это выражение выполнимо тогда и только тогда, когда существует способ, при котором машина работает правильно и выдаёт ответ "да". Следовательно, выполнимость построенного выражения эквивалентна вопросу о том, выдаст ли машина ответ "да".

Сложность

В то время как описанный выше метод кодирует недетерминированную машину Тьюринга с точки зрения сложности, в литературе описаны более сложные подходы к изучению сложности. Квазилинейный результат впервые был получен через семь лет после оригинальной публикации Кука. Применение SAT для доказательства существования NP-полной задачи можно расширить на другие вычислительные задачи в логике, а также на полноту для других классов сложности. Задача о квантованных булевых формулах (QBF) включает булевы формулы, расширенные вложенными универсальными и экзистенциальными кванторами для своих переменных. Задача QBF может быть использована для кодирования вычислений с помощью машины Тьюринга, ограниченной полиномиальной сложностью по пространству, что доказывает существование задачи (распознавания истинных квантованных булевых формул), являющейся PSPACE-полной. Аналогично, формулы с квантованными зависимостями кодируют вычисления с помощью машины Тьюринга, ограниченной логарифмической сложностью по пространству, доказывая существование задачи, являющейся NL-полной.

Последствия

Доказательство показывает, что каждая задача из NP может быть сведена в полиномиальное время (фактически, достаточно логарифмического пространства) к экземпляру задачи булевой выполнимости. Это означает, что если бы задачу булевой выполнимости можно было решить за полиномиальное время детерминированной машиной Тьюринга, то все задачи из NP можно было бы решить за полиномиальное время, и, следовательно, класс сложности NP был бы равен классу сложности P.

Значение NP-полноты стало очевидным после публикации в 1972 году основополагающей работы Ричарда Карпа «Сводимость между комбинаторными задачами», в которой он показал, что 21 разнообразная комбинаторная и теоретико-графовая задача, каждая из которых печально известна своей вычислительной сложностью, является NP-полной. Карп доказал NP-полноту каждой из этих задач, сводя к ней другую задачу (уже доказанную NP-полной). Например, он показал, что задача 3SAT (задача булевой выполнимости для выражений в конъюнктивной нормальной форме (КНФ) с ровно тремя переменными или отрицаниями переменных в каждом дизъюнкте) является NP-полной, показав, как свести (за полиномиальное время) любой экземпляр SAT к эквивалентному экземпляру 3SAT. Грей и Джонсон представили более 300 NP-полных задач в своей книге «Компьютеры и неразрешимость: руководство по теории NP-полноты», и новые задачи продолжают обнаруживаться, принадлежащие к этому классу сложности. Хотя многие практические экземпляры SAT могут быть решены эвристическими методами, вопрос о существовании детерминированного полиномиального алгоритма для SAT (и, следовательно, для всех остальных NP-полных задач) остается известной нерешенной проблемой, несмотря на десятилетия интенсивных усилий специалистов по вычислительной сложности, математических логиков и других исследователей. Более подробную информацию можно найти в статье «Проблема P против NP».