Опубликован: 26.09.2006 | Доступ: свободный | Студентов: 1772 / 459 | Оценка: 4.25 / 4.12 | Длительность: 17:09:00
ISBN: 978-5-9556-0066-6
Специальности: Программист, Математик
Лекция 12:

Абак, алгорифмы Маркова, равнодоступная адресная машина

< Лекция 11 || Лекция 12: 1234 || Лекция 13 >

Примеры неразрешимости

Функцию p\colon N \to N назовем вычислимой на абаке, если существует программа P, которая, получив в некоторой, заранее обусловленной ячейке x значение аргумента n, а в остальных ячейках — нули, через конечное число шагов остановится, и в ячейке y будет находиться p(n).

Проблема построения невычислимой функции известна как "проблема усердного бобра". Пусть A — абак-программа и y — номер некоторой ячейки. Определим величину f(A, y) следующим образом. Если в начальный момент все ячейки содержат число 0 и программа A через конечное число шагов останавливается, то f(A, y) равно числу [y] в момент остановки. Если же программа работает бесконечно, то считаем f(A, y) = 0. Величину f(A, y) назовем y -продуктивностью программы A.

Обозначим через \wt{A}(n) множество всех абак-программ, состоящих из n команд. Определим функцию p(n) как максимум f(A, y) по всем программам A из \wt{A}(n) и ячейкам y. Очевидно, эта функция определена при всех натуральных значениях аргумента и строго монотонна.

Лемма. Для любого натурального числа n выполняется неравенство

\eq*{
p(n + 17) \ge 2n.
}

Для доказательства достаточно рассмотреть программу, которая сначала запишет 0 в ячейку x, затем прибавит к ней n раз 1, скопирует содержимое ячейки x в ячейку y и добавит к ней содержимое ячейки x. Очевидно, после выполнения такой программы в ячейке y будет число 2n, а подсчет числа команд показывает, что их будет n + 17. Наличие такой программы (рис. 12.1) доказывает требуемое неравенство.


Рис. 12.1.

Предположим теперь, что p(n) вычислима некоторой программой P, состоящей из k команд, которая, получив n в ячейке x, поместит ответ в ячейку y.

Тогда для каждого натурального n можно построить программу, вычисляющую p(p(n + 17)), состоящую из n + 2k +
25 команд. Эта программа сначала запишет 0 в ячейку x, затем прибавит к ней n + 17 раз единицу, затем с помощью программы P в ячейке y вычислит p(n +
17), скопирует y в x и, наконец, опять с помощью программы P вычислит p(p(n + 17)).

Наличие такой программы (рис. 12.2) означало бы, что при любом натуральном n выполняется неравенство

\eq*{
p(n + 2k +25) \ge p(p(n + 17)).
}

Поскольку функция p(n) монотонна, получаем

\eq*{
n + 2k + 25 \ge p(n + 17).
}

Сопоставляя это неравенство с неравенством в утверждении леммы, получим

\eq*{
n + 2k + 25 \ge p(n + 17) \ge 2n,
}

что приводит к противоречию, например, при n = 2k + 26.

Итак, предположение о вычислимости функции p(n) привело к противоречию.


Рис. 12.2.

На рис. 12.2 команда x^+ повторяется n + 17 раз, общее количество команд в программе n + 2k + 25, в ячейке y вычисляется p(p(n + 17)).

Рассмотрим произвольную инъективную нумерацию g программ, то есть нумерацию, ставящую в соответствие каждой программе P ее номер g(P), причем разным программам ставятся в соответствие разные номера. Программу назовем самоприменимой относительно ячейки x, если она, получив в ячейке x свой номер, а в остальных ячейках — нули, через конечное число шагов завершает вычисления.

Рассмотрим функцию p\colon N \to N, определяемую следующим образом:

  • p(n) = 1, если n является номером некоторой самоприменимой относительно ячейки x программы,
  • p(n) = 0, в противном случае.

Докажем, что функция p не вычислима никакой программой. Предположим, что p вычисляется программой P, которая, получив в ячейке x число n, остановится через конечное число шагов и в ячейке y оставит p(n). Рассмотрим программу P', изображенную на рис. 12.3.


Рис. 12.3.

Если P' самоприменима относительно ячейки x, то p(g(P')) = 1, поэтому, когда проработает программа P, в ячейке y будет записана 1 и остальная часть программы P — будет работать без остановки. Следовательно, P — не самоприменима относительно x.

Если же P' не самоприменима относительно ячейки x, то {p(g(P')) = 0}, следовательно, когда проработает программа P, в ячейке y будет записан 0 и тогда остальная часть программы P — сразу же завершит работу. Следовательно, P — самоприменима относительно x.

Итак, предположение о вычислимости функции p(n) в любом случае приводит к противоречию.

< Лекция 11 || Лекция 12: 1234 || Лекция 13 >
Антон Сиротинкин
Антон Сиротинкин

на стр 6, лекции 3, Очевидно "Ck <= модуль(Gk(е))*b(k+1)" (1) - , подскажите что значит "модуль" и почему это очевидно...