Если в качестве примера мы возьмем n =11 и m =6, то на ленте, вводимой в мащину U, мы будем иметь последовательность
000101111111011010000..
Она образована из следующих составляющих:
… 0000 (пустое начало ленты)
1011 (двоичное представление одиннадцати)
111110 (обозначает окончание числа n )
110 (двоичное представление шести)
10000… (остаток ленты)
То, что машина Тьюринга U должна была бы делать на каждом очередном шагу процедуры, выполняемой Tn над m - это исследовать структуру последовательности цифр в выражении n с тем, чтобы можно было произвести соответствующие изменения цифр числа m (т. е. "ленты" машины Tn ). В принципе, реализация такой машины не вызывает существенных затруднений (хотя и довольно громоздка на практике). Список ее собственных команд должен был бы просто содержать правила для чтения подходящей команды из "списка", закодированного в числе n, на каждом этапе выполнения действий над цифрами, считанными с "ленты", как они фигурируют в числе m. Можно предположить, что при этом совершалось бы значительное количество прыжков взад-вперед по ленте между цифрами, составляющими n и m, и выполнение процедуры было бы чрезвычайно медленным. Тем не менее, список команд подобной машины, несомненно, можно составить, и такая машина называется нами универсальной машиной Тьюринга. Обозначая ее действие на пару чисел (n, m ) через U(n, m ), мы получаем:
U(n, m ) = Тn(m )
при любых (n, m ), для которых Tn - корректно определенная машина Тьюринга. Машина U, в которую первым вводится число n, в точности имитирует n-ю машину Тьюринга!
Поскольку U - машина Тьюринга, то она сама будет иметь номер. То есть, для некоторого числа u имеем
U = Tu.
Сколь велико u ? В сущности, мы можем положить, что uвточности равно следующему числу:
u =7244855335339317577
198395039615711237
952360672556559631
108144796606505059
404241090310483613
632359365644443458
382226883278767626
556144692814117715
017842551707554085
657689753346356942
478488597046934725
739988582283827795
294683460521061169
835945938791885546
326440925525505820
555989451890716537
414896033096753020
431553625034984529
832320651583047664
142130708819329717
234151056980262734
686429921838172157
333482823073453713
421475059740345184
372359593090640024
321077342178851492
760797597634415123
079586396354492269
159479654614711345
700145048167337562
172573464522731054
482980784965126988
788964569760906634
204477989021914437
932830019493570963
921703904833270882
596201301773727202
718625919914428275
437422351355675134
084222299889374410
534305471044368695
876405178128019437
530813870639942772
823156425289237514
565443899052780793
241144826142357286
193118332610656122
755531810207511085
337633806031082361
675045635852164214
869542347187426437
544428790062485827
091240422076538754
264454133451748566
291574299909502623
009733738137724162
172747723610206786
854002893566085696
822620141982486216
989026091309402985
706001743006700868
967590344734174127
874255812015493663
938996905817738591
654055356704092821
332221631410978710
814599786695997045
096818419062994436
560151454904880922
084480034822492077
304030431884298993
931352668823496621
019471619107014619
685231928474820344
958977095535611070
275817487333272966
789987984732840981
907648512726310017
401667873634776058
572450369644348979
920344899974556624
029374876688397514
044516657077500605
138839916688140725
455446652220507242
623923792115253181
625125363050931728
631422004064571305
275802307665183351
995689139748137504
926429605010013651
980186945639498
(или какому-нибудь другому подходящему, не менее внушительному по величине числу). Это число, без сомнения, выглядит устрашающе большим! Оно, действительно, чрезвычайно велико, но я не вижу способа, как его можно было бы сделать меньше. Процедуры кодирования и определения, использованные мною для машин Тьюринга, вполне разумны и достаточно просты, и все же с неизбежностью приводят к подобным несуразно большим числам для реальной универсальной машины Тьюринга.
Я уже говорил, что все современные общеупотребительные компьютеры, по сути, являются универсальными машинами Тьюринга. Я ни в коем случае не подразумеваю под этим, что их логическая структура должна в точности походить на предложенную мной выше структуру универсальной машины Тьюринга. Однако суть дела состоит в том, что если сперва ввести в произвольную универсальную машину Тьюринга соответствующую программу (начало подаваемой на вход ленты), то потом она сможет копировать поведение любой машины Тьюринга! В предыдущем примере программа просто принимает форму одного числа (числа n ), но этим разнообразие возможных процедур и вариантов исходной схемы Тьюринга отнюдь не исчерпывается. В действительности я сам, описывая машину, несколько отклонился от того, что исходно было предложено Тьюрингом. Но ни одно из этих отклонений не имеет сейчас для нас существенного значения.
Неразрешимость проблемы Гильберта
Мы теперь вплотную подходим к той цели, ради которой Тьюринг с самого начала разрабатывал свою теорию - получить ответ на вопрос, заключенный в общей проблеме алгоритмической разрешимости, поставленной Гильбертом, а именно: существует ли некая механическая процедура для решения всех математических задач, принадлежащих к некоторому широкому, но вполне определенному классу? Тьюринг обнаружил, что он мог бы перефразировать этот вопрос следующим образом: остановится ли в действительности n-я машина Тьюринга, если на ее вход поступит число m Эта задача получила название проблемы остановки. Не так сложно составить список команд, для которых машина никогда не остановится при любомm (как, например, в случаях n = 1 или 2, рассмотренных в предыдущем разделе, а также во всех случаях, когда вообще отсутствует команда STOP ). Точно так же существует множество списков команд, для которых машина будет останавливаться всегда, независимо от вводимого числа m (например, T11 ). Кроме того, некоторые машины при работе с одними числами останавливались бы, а с другими - нет. Совершенно очевидно, что алгоритм, который никогда не прекращает работу, бесполезен. Это, собственно, и не алгоритм вовсе. Поэтому важно уметь ответить на вопрос, приведет ли когда-нибудь работа машины Tn над данным числом m к какому-то ответу или нет! Если нет (т. е. процесс вычисления никогда не прекращается), то я буду выражать это следующей записью:
Tn(m ) = .
(Сюда же включены машины, которые в ходе работы попадают в ситуацию, когда нет команды, определяющей их дальнейшее поведение, как это было в случае рассмотренных выше фиктивных машин T4 и T1. К сожалению, наша на первый взгляд работоспособная машина T3 должна теперь также считаться фиктивной, т. е.
T3(m ) = , поскольку результатом ее действия всегда будет просто пустая лента, тогда как нам, чтобы приписать номер полученному ответу, нужна хотя бы одна единица на выходе! Машина T11, однако, совершенно полноправна, поскольку она производит единственную 1. Результатом ее работы будет лента с номером 0, так что T11(m ) = 0 для любого m.)
В математике весьма важно иметь возможность установить момент, когда машина Тьюринга остановится. Рассмотрим для примера уравнение
(х + 1) + (у + 1) = (z + 1).
(Не пугайтесь, даже если Вы не любите вникать в детали математических вычислений. Это уравнение используется здесь только в качестве примера, и от вас не требуется его глубокого понимания.) Это конкретное уравнение относится к известной (возможно, самой известной) и пока нерешенной математической проблеме. Проблема формулируется следующим образом: существует ли какой-либо набор х, у, z, ω, для которого это равенство выполняется. Знаменитое утверждение, записанное на полях "Арифметики" Диофанта великим французским математиком семнадцатого столетия Пьером де Ферма (1601–1665) и известное как "последняя теорема Ферма", гласит, что это равенство никогда не выполняется. Будучи адвокатом по профессии, Ферма тем не менее был искуснейшим математиком своего времени. (Ферма был современником Декарта.) В своей записи он утверждал, что знает "воистину прекрасное доказательство" своей теоремы, но поля книги слишком малы, чтобы его привести. До сегодняшнего дня никому так и не удалось ни воспроизвести это доказательство, ни найти опровергающий это утверждение пример!
Очевидно, что для заданной четверки чисел (x, у, z, ω ) выяснить, выполняется это равенство или нет, можно простым вычислением. Значит, мы можем представить себе вычислительный алгоритм, который последовательно перебирает все возможные четверки чисел одну за другой и останавливается только тогда, когда равенство удовлетворяется. (Мы уже знаем, что для конечных наборов чисел существуют способы их кодирования на ленте вычислимым способом, а именно, в виде одного числа. Таким образом, перебор всех четверок можно провести, просто следуя естественному порядку соответствующих им одиночных чисел.) Если бы мы могли установить, что этот алгоритм никогда не останавливается, то это стало бы доказательством утверждения Ферма.
Сходным образом в терминах проблемы остановки машины Тьюринга можно перефразировать многие другие нерешенные математические проблемы. Примером такого рода проблем может служить так называемое предположение Гольдбаха: любое четное число, большее двух, может быть представлено в виде суммы двух простых чисел). Процесс, с помощью которого можно установить, относится некоторое натуральное число к простым или нет, является алгоритмическим, поскольку достаточно проверить делимость данного числа на все числа, меньшие его, а это достигается с помощью конечного числа вычислительных операций. Мы можем придумать машину Тьюринга, которая перебирает четные числа 6, 8, 10, 12, 14…, пробуя все возможные способы разбиения их на пары нечетных чисел
6 = 3 + 3, 8 = 3 + 5, 10 = 3 + 7 = 5 +5,
12 = 5 + 7, 14 = 3 + 11=7 + 7…
и убеждаясь, что для каждого четного числа какое-то из разбиений образовано двумя простыми числами. (Очевидно, нам не надо проверять пары четных слагаемых, кроме 2 + 2, поскольку все простые числа за исключением 2 - нечетные.) Наша машина должна остановиться только в том случае, если она находит четное число, для которого ни одно из разбиений не является парой простых чисел. В этом случае мы получили бы контрпример к предположению Гольдбаха, т. е. нашли бы четное число, большее 2, которое не является суммой двух простых чисел. Следовательно, если бы мы могли установить, останавливается машина Тьюринга когда-нибудь или нет, то тем самым мы выяснили бы, справедливо предположение Гольдбаха или нет.
Возникает естественный вопрос: каким образом следует определять, остановится какая-то определенная машина Тьюринга (в которую введены конкретные начальные данные) или нет? Для многих машин Тьюринга ответить на этот вопрос нетрудно, но, как мы видели выше, иногда для ответа может потребоваться решение какой-нибудь до сих пор не решенной математической задачи. Так существует ли некая алгоритмическая процедура для решения общей проблемы - проблемы остановки - полностью механическим путем? Тьюринг показал, что такой процедуры на самом деле нет.
В сущности, его доказательство сводилось к следующему. Предположим, наоборот, что указанный алгоритм существует. Тогда существует и некая машина Тьюринга Н, которая "решает", остановится ли в конце концов n-я машина Тьюринга, действуя на число m. Условимся, что результатом действия машины Н будет лента с номером 0, если n-я машина не останавливается, и с номером 1 в противоположном случае:
Здесь мы могли бы воспользоваться способом кодирования пары (n, m ), использованным ранее для универсальной машины Тьюринга U. Однако это привело бы к проблеме технического характера, поскольку при некоторых n (например, n = 7) Tn будет определена некорректно, и маркер 111101 будет непригоден для отделения на ленте n от m. Чтобы избежать этой проблемы, будем полагать, что n представлено не в двоичной, а в расширенной двоичной форме, тогда как для m будет по-прежнему использоваться обычная двоичная запись. В этом случае комбинации 110 будет достаточно для разделения n и m. Использование точки с запятой в обозначении Н(n ; m ) в отличие от запятой в обозначении универсальной машины U(n, m ) указывает на это различие в кодировании.
Представим себе теперь бесконечную таблицу, в которую включены окончательные результаты действий всех возможных машин Тьюринга на все возможные (различные) входные данные. В этой таблице N-й ряд представляет собой результаты вычислений n-й машины Тьюринга, полученные при ее работе последовательно с m = 0, 1, 2, 3, 4…: