Вовсе нет. Предполагается, что наше рассуждение применимо лишь к тому пониманию, которое позволяет заключить, что вычисление не
завершается, но никак не к тому пониманию, благодаря которому мы приходим к противоположному выводу. Гипотетический алгоритм A вовсе не обязан достигать «успешного завершения», обнаружив что то или иное вычисление завершается. Не в этом заключается его смысл.Если вас такое положение дел не устраивает, попробуйте представить алгоритм A
следующим образом: пусть A объединяет в себе оба вида понимания, но в том случае, когда выясняется, что вычисление Cq(n) действительно завершается, алгоритм A искусственно зацикливается (т.е. выполняет какую-то операцию снова и снова, бесконечное количество раз). Разумеется, на самом деле математики работают иначе, однако дело не в этом. Наше рассуждение построено как reductio ad absurdum[12], т.е. начав с допущения, что для установления математической истины используются заведомо обоснованные алгоритмы, мы в итоге приходим к противоположному выводу. Такое доказательство не требует, чтобы гипотетическим алгоритмом непременно оказался какой-то конкретный алгоритм A, мы вполне можем заменить его на другой алгоритм, построенный на основе A, — как, например, в только что упомянутом случае.Этот комментарий применим и к любому другому возражению вида: «А что если алгоритм A
завершится по какой-либо совершенно посторонней причине и не даст нам доказательства того, что вычисление Cq(n) не завершается?». Если нам вдруг придется иметь дело с алгоритмом «A», который ведет себя подобным образом, то мы просто применим представленное в §2.5 обоснование к немного другому A — к такому, который зацикливается всякий раз, когда исходный «A» завершается по любой из упомянутых посторонних причин.Q4
. Судя по всему, каждое вычисление Cq в предложенной мною последовательности C0, C1, C2, … является вполне определенным, тогда как при любом прямом переборе (численном или алфавитном) компьютерных программ ситуация, конечно же, была бы иной?В самом деле, было бы весьма затруднительно однозначно гарантировать, что каждому натуральному числу q
в нашей последовательности действительно соответствует некое рабочее вычисление Cq. Например, описанная в НРК последовательность машин Тьюринга Tq этому условию, конечно же, не удовлетворяет; см. НРК, с. 54. При определенных значениях q машину Тьюринга Tq можно назвать «фиктивной» по одной из четырех причин: ее работа никогда не завершается; она оказывается «некорректно определенной», поскольку представление числа n в виде двоичной последовательности содержит слишком много (пять или более) единиц подряд и, как следствие, не имеет интерпретации в данной схеме; она получает команду, которая вводит ее в нигде не описанное внутреннее состояние; или же по завершении работы она оставляет ленту пустой, т.е. не дает никакого численно интерпретируемого результата. (См. также Приложение А.) Для приведенного в §2.5 доказательства Гёделя—Тьюринга вполне достаточно объединить все эти причины в одну категорию под названием «вычисление не завершается». В частности, когда я говорю, что вычислительная процедура A «завершается» (см. также примечание [9]), я подразумеваю, что она «завершается» как раз в вышеупомянутом смысле (а потому не содержит неинтерпретируемых последовательностей и не оставляет ленту пустой), — иными словами, «завершиться» может только действительно корректно определенное рабочее вычисление. Аналогично, фраза «вычисление Cq(n) завершается» означает, что данное вычисление корректно завершается именно в этом смысле. При такой интерпретации соображение Q4 не имеет совершенно никакого отношения к представленному мною доказательству.Q5
. Не является ли мое рассуждение лишь демонстрацией неприменимости некоей частной алгоритмической процедуры (A) к выполнению вычисления Cq(n)? И каким образом оно показывает, что я справлюсь с задачей лучше, чем какая бы то ни было процедура A?