Добро пожаловать! Войти Зарегистрироваться

Расширенный

Почему Busy Beaver является невычислимой функцией?

Написал Павел Клюкин 
Почему Busy Beaver является невычислимой функцией?
23 December 2023 23:11
Здравствуйте!
Недавно наткнулся на функцию Busy Beaver и узнал, что она является невычислимой. Зная, что невычислимой является та функция, для которой не существует машины Тьюринга, которая могла бы ее вычислить, я задался вопросом, почему для такой простой функции не сущетсвует алгоритма. Насколько я понял из статьи [2], вся проблема в том, что не для всех возможных вариантов МТ, которые перебираются в данной функции, можно понять, остановится текущая МТ или нет. Но разве это нельзя никак отсмотреть, например, попадание в цикл и т. д.? Да, я знаю про проблему остановки, и, что проблема остановки неразрешима на МТ, но почему именно для машин Тьюринга этой функции нельзя сказать, остановится каждая из них или нет?
Заранее спасибо

[en.wikipedia.org]
[habr.com]
Re: Почему Busy Beaver является невычислимой функцией?
05 February 2024 14:02
В статье математика Tibor Radó приводится доказательство невычислимости данной функции. Сама статья на английском, поэтому я приведу краткую сводку данной статьи. Оригинал стаьи есть в прикреплённых файлах.

В игре Busy Beaver используются "карточки", которые являются аналогом пятерок МТ; бесконечная в обе стороны лента Тьюринга, изначально заполненная нулями; алфавит - {0, 1}. Каждая карточка пронумерована (некоторое число - исходное состояние МТ), в ней описано, что делать, если в текущей ячейке 0 или 1, что поставить (0 или 1), куда перейти (0 - влево, 1 - вправо) и в какое следующее состояние перейти (0 - остановка, любое другое число - номер соответствующей карточки).
Например:

карточка 1
0 102
1 111

карточка 2
0 111
1 100

Суть игры в том, чтобы МТ, описываемая n карточками, остановилась и количество подряд идущих единиц было наибольшим среди всех МТ, которые возможно описать n карточками.
Введём функцию Busy Beaver и будем записывать её как S(n). Значение S(n) - наибольшее количество подряд идущих единиц, которые получились у остановившейся МТ, которая описывается n карточками.
Теперь перейдём к теореме.

Будем писать
f(x) > (g(x))*,
если f(x) > g(x), начиная с какого-то x_0.

Сама теорема звучит следующим образом.
S(n) > (f(n))* для любой вычислимой функции f(n). Следовательно, S(n) невычислима.

Обозначим вспомогательную функцию F(x) = (Сумма от i = 0 до x (f(i) + i^2)).
Отсюда:
F(x) >= f(x)
F(x) >= x^2
F(x + 1) > F(x)

Так как F(x) - вычислима, то можно создать МТ (назовём её M_F), которая вычисляет F(x), при этом вся МТ записана в C карточках.
Объявим МТ M_x, которая печатает x единиц подряд и останавливается; при этом для самой M_x используется x карточек. Например, для x = 3:
карточка 1
0 112
1 110;
карточка 2
0 113
1 ---;
карточка 3
0 101
1 ---;

Теперь объявим МТ MF_x, которая является последовательным применением: M_x -> M_F -> M_F. Такая МТ, используя x + 2C карточек, будет последовательно записывать x, F(x), F(F(x)) единиц. Таким образом, получится x + F(x) + F(F(x)) единиц подряд, при чём MF_x является одной из вариантов МТ для S(x + 2C). Отсюда получаем:
S(x + 2C) >= x + F(x) + F(F(x)).

Так как
x^2 > (x + 2C)* и F(x) >= x^2, то

F(x) > (x + 2C)*.

Так как F(x) - монотонна, то
F(F(x)) > (F(x + 2C))*.

Так как S(x + 2C) >= x + F(x) + F(F(x)), то:
S(x + 2C) > (F(x + 2C))*

Поскольку F(x) >= f(x), то:
S(x + 2C) > (f(x + 2С))*

Теперь обозначим x + 2C как n:
S(n) > (f(n))*.
Вложения:
открыть | скачать - rado-on_non-computable_functions-rotated.pdf (1.64 MB)
К сожалению, только зарегистрированные пользователи могут писать в этом форуме.

Авторизоваться на форуме