На этом шаге мы рассмотрим теорему о полиномиальной сводимости задачи ВЫПОЛНИМОСТЬ
к задаче 3-ВЫПОЛНИМОСТЬ.
КНФ выполнима, если существует набор α1, α2, ..., αn значений переменных x1, x2, ..., xn такой, что каждый дизъюнкт обращается в единицу. Рассмотрим произвольный дизъюнкт (z1∨ z2 ∨ ...∨ zk), k > 3, из исходной КНФ. Здесь zi - литералы, т. е. переменные xj или их отрицания.
Сначала обсудим частный случай, k=4, дизъюнкт D = (z1∨ z2 ∨ z3∨ z4). Введем дополнительную переменную y и построим конъюнкцию двух дизъюнктов D1& D2 = (z1∨ z2 ∨ y)&(¬y ∨ z3 ∨ z4). Обратим внимание на то, что дизъюнкт D является резольвентой вновь введенных дизъюнктов D1 и D2 , т. е. является их следствием. Если исходная формула (конъюнкция дизъюнктов) выполнима, то при подстановке констант в D = (z1∨ z2 ∨ z3∨ z4) хотя бы один из литералов принимает значение 1. Пусть это литерал z1. Тогда найдется такая константа γ, что подставив ее вместо y, обеспечим равенство 1 обоих дизъюнктов, D1 и D2. В данном случае γ = 0.
Пусть какой-то набор из 5 констант а1, а2, а3, а4, γ доставляет значение 1 дизъюнктам D1 и D2. Невозможно, чтобы в этом наборе только константа γ была равна единице (иначе какой-то из двух дизъюнктов будет равен 0). Следовательно, как минимум одна из констант а1, а2, а3, а4, должна быть равна единице и дизъюнкт D при этой подстановке равен единице.
Теперь перейдем к общему случаю. Дизъюнкту (z1∨ z2 ∨ z3∨ z4) длины k из КНФ общего вида поставим в соответствие логическое произведение дизъюнктов длины 3:
Здесь введены новые (вспомогательные) переменные у1,y2, ..., yk-3.
Предположим, что КНФ выполнима. Тогда существует такой набор констант, подставляемых вместо переменных x1, x2, ..., xn что все дизъюнкты КНФ, в том числе и дизъюнкт (z1∨ z2 ∨ z3∨ z4) равны единице. Это значит, что хотя бы один из литералов zi равен единице при такой подстановке. Нам нужно теперь показать, что мы всегда можем назначить вспомогательным переменным такие значения, что записанное выше логическое произведение дизъюнктов длины 3 примет значение единицы.
Действительно, пусть ненулевой литерал имеет номер i. Положим yj = 1 при j <= i-2 и уj=0 при j <= i-1. Получаем (z1 ∨ z2 ∨ 1)& (z3 ∨ 0 ∨ 1)& (z4 ∨ 0 ∨ 1)& ... &(zi ∨ 0 ∨ 0)& (zi+1 ∨ 1 ∨ 0)& ... &(zk-2 ∨ 1 ∨ 0)& (zk-1 ∨ zk ∨ 1) = 1. Отсюда следует выполнимость КНФ3.
Обратно, предположим, что КНФ3 выполнима. Тогда существует такой набор констант, подставляемых вместо переменных x1, x2, ..., xn, y1, y2, ..., yk-3, ..., что все дизъюнкты КНФ3, в том числе и дизъюнкты (z1 ∨ z2 ∨ у1), (z3 ∨ ¬y1 ∨ у2), (z4 ∨ ¬y2 ∨ у3), ..., (zk-2 ∨ ¬yk-4 ∨ уk-3), (zk-1 ∨ zk ∨ ¬уk-3) равны единице. Этот набор непременно должен быть таким, чтобы хотя бы один из литералов zi был равен единице. В самом деле, если все zi равны 0, то из (z1 ∨ z2 ∨ у1), (z3 ∨ ¬y1 ∨ у2), (z4 ∨ ¬y2 ∨ у3), ..., (zk-2 ∨ ¬yk-4 ∨ уk-3), (zk-1 ∨ zk ∨ ¬уk-3) получаем (у1) & (¬y1 ∨ у2) & (¬y2 ∨ у3) & ... & (¬yk-4 ∨ уk-3) & (¬yk-3) и, последовательно раскрывая скобки слева направо и исключая нулевые произведения вида y1 & ¬y1, y1 & ¬y2 & ¬y2, y1 & ¬y2 & ... & y3 & ... & yk-3 & ¬yk-3 получим в результате 0, что противоречит условию равенства значения КНФ3 на выбранном наборе.
Поскольку хотя бы один из литералов zi равен единице, то значение дизъюнкта (z1 ∨ z2 ∨ ... ∨ zk) равно единице. Так как речь шла о произвольном дизъюнкте из КНФ, то для выполнимой КНФ3 найдется такой набор констант, подставляемых вместо основных и вспомогательных переменных, что все дизъюнкты КНФ получат значение единицы, т.е. КНФ является выполнимой.
Хотя длина построенной КНФ3 превышает длину КНФ, это превышение ограничивается постоянным множителем и, следовательно, задача ВЫПОЛНИМОСТЬ полиномиально сводима к задаче 3-ВЫПОЛНИМОСТЬ.
Доказательство завершено.
Схема доказательства будет следующей. Поскольку нам нужно показать, что любая задача из класса NP полиномиально сводима к задаче ВЫПОЛНИМОСТЬ, то нужно:
И, наконец, самое главное:
Тем самым поставим в соответствие произвольной задаче из NP задачу ВЫПОЛНИМОСТЬ для КНФ, порожденной этой задачей, и теорема будет доказана.
Введем необходимые конструкции.
Описание индивидуальной задачи. Исходные данные индивидуальной задачи описываются некоторым словом X в алфавите недетерминированной машины Тьюринга. Это слово строится по некоторым, специфическим для данной индивидуальной задачи правилам. Сложность исходных данных естественно определить как длину |X| слова X.
Недетерминированная машина Тьюринга (НДМТ). Дополним обычную одноленточную машину Тьюринга блоком угадывания, имеющим головку (только для записи на ленту). Работа такой машины состоит из двух этапов:
Первый этап - совершенно неалгоритмический и не будем обсуждать какие-либо его детали, кроме одной. Поскольку интересуемся задачами класса NP, то можно сказать, что длина слова c(X) должна быть ограничена полиномом относительно длины |Х| слова X. В противном случае не только проверка, а даже само чтение этого слова требовало бы экспоненциального времени.
Второй этап - работа обычной (детерминированной) машины Тьюринга. Ее входом является слово Х$c(X), записанное на ленте, работает она по программе, переходя из состояния в состояние, читая символы с ленты и записывая символы на ленту.
Рассмотрим некоторый алгоритм α, решающий задачу R на недетерминированной машине Тьюринга, и опишем условия его исполнения машиной.
Входом алгоритма α является строка X$c(Х), ее длина равна полиному p(|Х|).
Введем булевы (логические) переменные для описания процесса работы машины Тьюринга:
statek(t) - в момент времени машина находится в состоянии qk. Эта группа переменных отслеживает изменение состояний машины. Если в начальный (нулевой) момент времени машина находится в состоянии qx, то state1(0)=1; все остальные переменные этой группы, связанные с моментом t = 0, равны нулю: state2(0)=0, state3(0)=0, ... . Поскольку R ∈ NP, то индекс t изменяется от нуля до величины, ограниченной полиномом от сложности исходных данных, 0<=t<=p(n). Индекс k ограничен константой r, так как программа машины Тьюринга имеет конечное число состояний.
cellj(t) - в момент времени t читающая и пишущая головка машины просматривает ячейку ленты с номером j. Индекс ограничен тем же полиномом p(n), точнее: p(n) <= j <= p(n) +1. Это ограничение определяется тем, что за единицу времени головка может сдвинуться не более, чем на одну ячейку вправо или влево, а общее время ограничено полиномом p(n).
symbolj(t) - в момент времени t в ячейке с номером y записан символ алфавита, имеющий номер l. Индекс l ограничен константой ν, так как алфавит конечен.
С помощью введенных переменных необходимо сформулировать следующие шесть условий:
Поскольку все перечисленные условия должны выполняться, то общее условие можно записать в виде:
F(X) = G1(X) & G2(X) & G3(X) & G4(X) & G5(X) & G6(X),
где Gi(X) - формулы, задающие перечисленные выше условия. Выпишем теперь формулы Gi(X).
В каком-нибудь состоянии машина должна находиться в любой момент времени:
stale1(t) ∨ state2(t) ∨ state3(t) ∨ ... ∨ stater(t), 0 <= t <= p(n),
но не в двух сразу:
¬(statei(t) & statej(t)) = ¬statei(t) ∨ ¬statej(t), 0 <= t <= p(n), 1 <= i < j <= r.
Таким образом,
G1 = (&t ∨k statek(t)) & (&t,i,j (¬statei(t) ∨ ¬statej(t)).
Здесь &t - конъюнкция по всем возможным значениям t, ∨k - дизъюнкция по всем возможным значениям k. Аналогично получаются выражения для G2 и G3.
G2(X):
G2 = (&t ∨k cellk(t)) & (&t,i,j (¬celli(t) ∨ ¬cellj(t)).
G3(X):
G3 = (&t,j ∨t symbolj,k(t)) & (&t,j,i,m (¬symbolj,t(t) ∨ ¬cellj,m(t)).
G4(X):
В момент времени 0 машина находится в состоянии q1: state1(0); в этот же момент времени головка читает ячейку ленты с номером 1: сеll1(0); в ячейках ленты с номерами 1, 2, 3, ... записано слово X$c(X), состоящее из символов sl1, sl2, sl3, ..., slm, где l1,l2, l3, ..., lm - номера символов в алфавите, m - длина слова: symbol1l1(0) & symbol1l2(0) & symbol1l3(0) & ... & symbolmlm(0). Общая формула:
G4(0)= state1(0) & cell1(0) & symbol1,l1(0) & symbol2,l2(0) & symbol3,l3(0) & ... & symbolm,lm(0).
G5(X):
Если считать, что qyes имеет номер 2, qyes= q2, то
G5 = state2(p(n)).
G6(X):
В любой момент времени t ячейка ленты с номером j не изменяется, если она не находится напротив головки:
¬symbolj,l(t) ∨ cellj(t) ∨ symbolj,l(t+l).
Изменение конфигурации машины Тьюринга происходит по команде sl, qk, sl, qk, D. Соответствующие условия для всех моментов времени, всех состояний, всех читаемых символов и всех номеров ячеек ленты может быть выражено в виде:
(¬symbolk(t) ∨
¬cellj(t) ∨
¬symbolj,l(t) ∨
cellj+D(t+1)) & (¬symbolk(t)
∨ ¬cellj(t)
∨ ¬symbolj,l(t)
∨
cellk(t+1)) &
(¬symbolk(t) ∨
¬cellj(t)
∨ ¬symbolj,l(t)
∨ cellj,l(t+1))
где D = ±1 или 0 (R, L или S - в традиционных для машин Тьюринга обозначениях) - величина шага перемещения по ленте.
Таким образом:
G6 = &t,j,l(¬symbolj,l(t) ∨ ¬cellj(t) ∨ ¬symbolj,l(t) ∨ cellj,l(t+1)) &t,j,l,k (¬statek(t) ∨ ¬cellj(t) ∨ ¬symbolj,l(t) ∨ cellj+D(t+1)) & (¬statek(t) ∨ ¬cellj(t) ∨ ¬symbolj,l(t) ∨ statek(t+1)) & (¬statek(t) ∨ ¬cellj(t) ∨ ¬symbolj,l(t) ∨ symbolj,l(t+1)).
Таким образом, показано, как построить КНФ, соответствующую программе недетерминированной машины Тьюринга для любой задачи R ∈ NP. Заметим, что по построению длина формулы ограничена полиномом от n - длины входного слова, следовательно, R сводится к задаче ВЫПОЛНИМОСТЬ за полиномиальное время. Это приводит нас к утверждению теоремы: ВЫПОЛНИМОСТЬ является NP-полной задачей.
На следующем шаге мы рассмотрим классы сложности NPI, NPC.