Предположим теперь, что существует машина Тьюринга, которая может взять программу любой другой машины Тьюринга, например t23, и любое множество данных, и решить, остановится или нет эта комбинация, чтобы напечатать ответ. Мы назовем эту особую машину Тьюринга th (h здесь от английского глагола «halt» — останавливаться). Если th получает остановку для частной комбинации программы и данных, например t23 и 3, она напечатает 1 и остановится; если она определяет, что комбинация не приводит к остановке, например t22 и 17, th напечатает 0 и остановится. Успех Тьюринга выразился в доказательстве того, что th не включена в список всех возможных машин Тьюринга и поэтому не существует. Чтобы проделать это, он использовал аргументы, очень похожие на «диагональные» аргументы, которыми пользовался Кантор для доказательства того, что иррациональные числа несчетны. Вы можете свободно перейти к следующему подразделу, если хотите пропустить вывод этого результата.
Эти аргументы таковы. Предположим, что мы задаем входные данные 0, 1, 2, … и машины Тьюринга t0, t1, t2, … и составляем таблицу, верхним левым фрагментом которой является следующая:
Вход | 0 | 1 | 2 | 3 |
Номер матрицы | 0 | □ | □ | □ | □ |
1 | 3 | □ | 4 | 1 |
2 | 1 | 1 | 1 | 1 |
3 | 0 | 1 | □ | 2 |
Когда вычисления не останавливаются, мы записываем символ □. Таблица содержит все возможные вычислимые числа (числа, которые могут быть вычислены машиной Тьюринга до произвольного числа разрядов), поскольку она содержит в своих последовательных рядах все возможные машины Тьюринга, а в последовательных колонках все возможные входы.
Теперь мы делаем второй шаг. На этот раз мы рассортируем результаты с помощью машины th, которая настроена так, что выдает 0, если решает, что соответствующие вычисления не остановятся, и не выдает никаких данных, если решает, что вычисления остановятся. Она также делает себе пометку, чтобы запомнить, где она заменила □ на 0, так как не хочет, чтобы машина, программа которой имитируется, была снова втянута в бесконечные вычисления. Например, когда мы загружаем в машину th число 4, а затем число 2, она, в соответствии с программой t4 и данными 2, инспектирует ленту, производит некоторого рода вычисления, решает, что вычисление t4(2) не остановится, если мы будем его выполнять, и поэтому ставит 0 в соответствующую ячейку таблицы и делает себе пометку, что данное вычисление не остановится. В конце этого этапа вычислений верхний левый фрагмент таблицы выглядит так:
Вход | 0 | 1 | 2 | 3 |
Номер матрицы | 0 | 0 | 0 | 0 | 0 |
1 | | 0 | | |
2 | | | | |