Busy beaver — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 6: Строка 6:
 
<b><tex>BB(n)</tex></b> {{---}} функция от натурального аргумента <tex>n</tex>, равная максимальному числу шагов, которое может совершить программа длиной <tex>n</tex> символов и затем остановиться.
 
<b><tex>BB(n)</tex></b> {{---}} функция от натурального аргумента <tex>n</tex>, равная максимальному числу шагов, которое может совершить программа длиной <tex>n</tex> символов и затем остановиться.
 
}}
 
}}
 +
----
 +
{{Утверждение
 +
|statement=
 +
Функция <tex>BB(n)</tex> не убывает.
 +
|proof=
  
 +
В данной задаче существует функция <tex>\Sigma(n)</tex>, которая в зависимости от числа состояний <tex>n</tex> возвращает максимальное число единиц, которое может быть записано на ленту машиной-чемпионом. Именно машина-чемпион является усердным бобром. Из смысла задачи следует, что функция <tex>\Sigma(n)</tex> не убывает. <br>Теперь покажем, что <tex>\forall n \ BB(n) > \Sigma(n).</tex> Для того, чтобы поместить одну единицу на ленту, требуется совершить хотя бы 1 шаг. Из этого следует, что <tex>BB(n)</tex> растет быстрее, чем <tex>\Sigma(n)</tex>. Сделовательно, <tex>BB(n)</tex> монотонно возрастает.
 +
}}
 +
----
 
{{Утверждение
 
{{Утверждение
 
|statement=
 
|statement=
 
<tex>BB(n)</tex> растет быстрее любой всюду определенной неубывающей [[Вычислимые функции|вычислимой функции]] <tex>f(n) : N \rightarrow N </tex>, то есть для всех <tex>n</tex> кроме конечного числа выполнено <tex>BB(n) > f(n).</tex>
 
<tex>BB(n)</tex> растет быстрее любой всюду определенной неубывающей [[Вычислимые функции|вычислимой функции]] <tex>f(n) : N \rightarrow N </tex>, то есть для всех <tex>n</tex> кроме конечного числа выполнено <tex>BB(n) > f(n).</tex>
 
|proof=
 
|proof=
Для начала покажем, что функция <tex>BB(n)</tex> не убывает. <br>
+
Докажем, что для любой вычислимой функции <tex>f(n)</tex> функция <tex>BB(n)</tex> будет превышать ее значение (за исключением конечного множества значений числа <tex>n</tex>). <br>  
В данной задаче также существует функция <tex>\Sigma(n)</tex>, которая в зависимости от числа состояний <tex>n</tex> возвращает максимальное число единиц на ленте, которое может появиться в результате работы программы. То, что эта функция монотонно возрастает, очевидно. <br>Теперь покажем, что <tex>\forall n \ BB(n) > \Sigma(n).</tex> Для того, чтобы поместить одну единицу на ленту, требуется совершить хотя бы 1 шаг. Из этого следует, что <tex>BB(n)</tex> растет быстрее, чем <tex>\Sigma(n)</tex>. Сделовательно, <tex>BB(n)</tex> монотонно возрастает.
 
 
 
<br>
 
Для доказательства непосредственно утверждения докажем, что для любой вычислимой функции <tex>f(n)</tex> функция <tex>BB(n)</tex> будет превышать ее значение (за исключением конечного множества значений числа <tex>n</tex>). <br>  
 
 
Пусть <tex>f(n)</tex> представлена своим кодом. Для каждого <tex>n</tex> определим программы вида:
 
Пусть <tex>f(n)</tex> представлена своим кодом. Для каждого <tex>n</tex> определим программы вида:
 
   <tex>p_n()</tex>:
 
   <tex>p_n()</tex>:
Строка 26: Строка 30:
 
Длина <tex>p_n</tex> будет равна <tex> \lg n + const </tex>, где <tex>const</tex> {{---}} длина кода без десятичной записи <tex>n</tex>. Пусть <tex>n_0</tex> {{---}} решение уравнения <tex>\lg n + const = n</tex>. Тогда для всех натуральных <tex> n > \left \lceil n_0 \right \rceil </tex> будет выполнено неравенство: <tex> n > len(p_n) \Rightarrow BB(n) \geqslant BB(len(p_n)) > m = f(n) </tex>. Данный переход корректен, так как мы доказали, что <tex>BB(n)</tex> {{---}} монотонно возрастающая функция. Так как <tex>n_0</tex> конечно, то мы всегда можем найти такие значения <tex>n</tex>, при которых будет выполняться полученное неравенство. Отсюда следует, что утверждение доказано.
 
Длина <tex>p_n</tex> будет равна <tex> \lg n + const </tex>, где <tex>const</tex> {{---}} длина кода без десятичной записи <tex>n</tex>. Пусть <tex>n_0</tex> {{---}} решение уравнения <tex>\lg n + const = n</tex>. Тогда для всех натуральных <tex> n > \left \lceil n_0 \right \rceil </tex> будет выполнено неравенство: <tex> n > len(p_n) \Rightarrow BB(n) \geqslant BB(len(p_n)) > m = f(n) </tex>. Данный переход корректен, так как мы доказали, что <tex>BB(n)</tex> {{---}} монотонно возрастающая функция. Так как <tex>n_0</tex> конечно, то мы всегда можем найти такие значения <tex>n</tex>, при которых будет выполняться полученное неравенство. Отсюда следует, что утверждение доказано.
 
}}
 
}}
 
+
----
 
'''Вывод:''' доказав предыдущее утверждение, мы проверили, что максимальное число шагов, которое может совершить программа и при этом остановиться, на самом деле растет с большей скоростью, чем любая вычислимая функция. Отсюда следует, что <tex>BB(n)</tex> невычислима.
 
'''Вывод:''' доказав предыдущее утверждение, мы проверили, что максимальное число шагов, которое может совершить программа и при этом остановиться, на самом деле растет с большей скоростью, чем любая вычислимая функция. Отсюда следует, что <tex>BB(n)</tex> невычислима.
  

Версия 23:35, 14 января 2016

Поиск усердных бобров (англ. busy beaver) — известная задача в теории вычислимости. Под усердным бобром в теории вычислимости понимают машину Тьюринга с заданным числом состояний конечного автомата, которая будучи запущенной на пустой ленте, записывает на нее максимальное количество ненулевых символов и останавливается.

В данном конспекте будет рассмотрена функция, которая используется в этой задаче для подсчета числа шагов для завершения программы при определенном числе состояний.

Определение:
[math]BB(n)[/math] — функция от натурального аргумента [math]n[/math], равная максимальному числу шагов, которое может совершить программа длиной [math]n[/math] символов и затем остановиться.

Утверждение:
Функция [math]BB(n)[/math] не убывает.
[math]\triangleright[/math]
В данной задаче существует функция [math]\Sigma(n)[/math], которая в зависимости от числа состояний [math]n[/math] возвращает максимальное число единиц, которое может быть записано на ленту машиной-чемпионом. Именно машина-чемпион является усердным бобром. Из смысла задачи следует, что функция [math]\Sigma(n)[/math] не убывает.
Теперь покажем, что [math]\forall n \ BB(n) \gt \Sigma(n).[/math] Для того, чтобы поместить одну единицу на ленту, требуется совершить хотя бы 1 шаг. Из этого следует, что [math]BB(n)[/math] растет быстрее, чем [math]\Sigma(n)[/math]. Сделовательно, [math]BB(n)[/math] монотонно возрастает.
[math]\triangleleft[/math]

Утверждение:
[math]BB(n)[/math] растет быстрее любой всюду определенной неубывающей вычислимой функции [math]f(n) : N \rightarrow N [/math], то есть для всех [math]n[/math] кроме конечного числа выполнено [math]BB(n) \gt f(n).[/math]
[math]\triangleright[/math]

Докажем, что для любой вычислимой функции [math]f(n)[/math] функция [math]BB(n)[/math] будет превышать ее значение (за исключением конечного множества значений числа [math]n[/math]).
Пусть [math]f(n)[/math] представлена своим кодом. Для каждого [math]n[/math] определим программы вида:

 [math]p_n()[/math]:
   k = десятичная запись числа n
   m = f(k)
   for i = 1 to m + 1 
     шаг программы

Каждая такая программа делает как минимум [math]f(n) + 1[/math] шагов.

Длина [math]p_n[/math] будет равна [math] \lg n + const [/math], где [math]const[/math] — длина кода без десятичной записи [math]n[/math]. Пусть [math]n_0[/math] — решение уравнения [math]\lg n + const = n[/math]. Тогда для всех натуральных [math] n \gt \left \lceil n_0 \right \rceil [/math] будет выполнено неравенство: [math] n \gt len(p_n) \Rightarrow BB(n) \geqslant BB(len(p_n)) \gt m = f(n) [/math]. Данный переход корректен, так как мы доказали, что [math]BB(n)[/math] — монотонно возрастающая функция. Так как [math]n_0[/math] конечно, то мы всегда можем найти такие значения [math]n[/math], при которых будет выполняться полученное неравенство. Отсюда следует, что утверждение доказано.
[math]\triangleleft[/math]

Вывод: доказав предыдущее утверждение, мы проверили, что максимальное число шагов, которое может совершить программа и при этом остановиться, на самом деле растет с большей скоростью, чем любая вычислимая функция. Отсюда следует, что [math]BB(n)[/math] невычислима.

См. также

Источники информации