Однако, каждый из них является исходной информацией для алгоритма, а каждый
алгоритм можно представить машиной Тьюринга. Пусть произвольная NP –полная
задача Z решается недетерминированным алгоритмом с полиномиальной временной
сложностью p(n), детерминированная фаза проверки которого реализуется машиной
Тьюринга T = (K, Σ, δ, p
0
, f, a
0
, a
1
). При решении задачи на вход машины Тьюринга
T подается цепочка исходных данных x. Покажем теперь, что из машины Тьюринга
T и цепочки x можно построить булевскую формулу, которая принимает значение
"истина" тогда и только тогда, когда машина Тьюринга T допускает цепочку x, т.е.
выдает сообщение о достижении алгоритмом Z решения на соответствующих данных
x. Если x является решением задачи Z, то T переходит в заключительное состояние и
записывает на ленту 1. Если x не является решением задачи Z, то T в зависимости от
типа поставленной задачи может либо зациклиться, либо перейти в заключительное
состояние и записать на ленту 0. В этом последнем случае легко дополнить множе-
ство команд T командами чтения результата и зацикливания, если результат равен
0. Таким образом, всегда можем считать, что T останавливается только в том случае,
когда x — решение Z.
По определению временной сложности NP –полной задачи, машина Тьюринга T
достигает решения для исходной цепочки w длины n не более, чем за p(n) шагов,
следовательно, в любой момент работы машины Тьюринга T на ленте занято не
болеее 2 · p(n) + 1 ячеек. Это ограничение на число занятых ячеек следует из того
факта, что головка в начальный момент обозревает первую ячейку исходных данных,
и на каждом шаге сдвигается на одну ячейку вперед или назад. Таким образом, если
первую ячейку исходной цепочки считать имеющией номер 1, то машина Тьюринга
T может использовать ячейки от −p(n) до p(n) + 1.
Примем соглашение, что если машина Тьюринга T закончит вычисления раньше
момента времени p(n), то конфигурация остается неизменной во все моменты време-
ни после остановки, т.е. сохраняется заключительное состояние, положение головки
и запись на ленте. Пронумеруем все состояния от 0 до |K|, алфавит ленты от 0 до
|Σ|, припишем номера ячейкам ленты используемого участка от −p(n) до p(n) + 1.
При нумерации состояний условимся сделать заключительное состояние состоянием
с номером 1, а начальное — с номером 0.
Введем три типа логических переменных, причем каждый тип будет представлен
массивом таких переменных:
1) Q[i][k] — в момент времени i машина Тьюринга T находится в состоянии q
k
;
2) H[i][j] — в момент времени i головка обозревает ячейку с номером j;
3) S[i][j][k] — в момент времени i в ячейке j записан символ с номером k.
Построим теперь шесть групп дизъюнкций, каждая из которых будет налагать
ограничения определенного типа на любой выполняющий набор значений истинно-
сти, а все вместе — соответствовать условию истинности только в том случае, когда
x является решением задачи Z и машина Тьюринга T перейдет в заключительное
состояние с номером 1. Это следующие группы дизъюнкций:
1) G
1
— в любой момент времени i программа находится ровно в одном состоянии;
2) G
2
— в любой момент времени i головка обозревает ровно одну ячейку;
3) G
3
— в любой момент времени i каждая ячейка содержит ровно один символ
алфавита Σ;
4) G
4
— в момент времени 0 головка находится в начале цепочки x, которая
записана на ленте;
5) G
5
— не позднее, чем через p(n) шагов T переходит в состояние с номером 1 и,
следовательно, допускает x;
6) G
6
— в любой момент времени i ( p(n) ≥ i ≥ 0 ) конфигурация в следующий
118