Jump to content

функция Аккермана

В теории вычислимости функция Аккермана , названная в честь Вильгельма Аккермана , является одной из простейших. [1] и самые ранние обнаруженные примеры полностью вычислимых функций , которые не являются примитивно-рекурсивными . Все примитивно-рекурсивные функции являются тотальными и вычислимыми, но функция Аккермана показывает, что не все тотально-рекурсивные функции являются примитивно-рекурсивными.

После публикации Аккермана [2] его функции (которая имела три неотрицательных целых аргумента) многие авторы модифицировали ее для различных целей, так что сегодня «функция Аккермана» может относиться к любому из многочисленных вариантов исходной функции. с двумя аргументами, Одной из распространенных версий является функция Аккермана–Петера разработанная Рожа Петер и Рафаэлем Робинсоном . Его стоимость растет очень быстро; например, приводит к , целое число из 19 729 десятичных цифр. [3]

История [ править ]

В конце 1920-х годов математики Габриэль Судан и Вильгельм Аккерман , ученики Давида Гильберта , изучали основы вычислений. Зачислены и Судан, и Аккерманн. [4] с обнаружением полных вычислимых функций (в некоторых источниках называемых просто «рекурсивными»), которые не являются примитивно-рекурсивными . Судан опубликовал менее известную функцию Судана , а вскоре после этого, независимо, в 1928 году, Акерманн опубликовал свою функцию. (от греческого — буква фи ). Функция Аккермана с тремя аргументами, , определяется так, что для , он воспроизводит основные операции сложения , умножения и возведения в степень как

а при p > 2 эти базовые операции расширяются таким образом, что их можно сравнить с гипероперациями :

(Помимо своей исторической роли полностью вычислимой, но не примитивно-рекурсивной функции, исходная функция Аккермана, как считается, расширяет базовые арифметические операции за пределы возведения в степень, хотя и не так гладко, как варианты функции Аккермана, специально разработанные для этой цели — например, Гудштейна последовательность гиперопераций .)

В книге «О бесконечности » [5] Дэвид Гильберт выдвинул гипотезу о том, что функция Аккермана не является примитивно-рекурсивной, но именно Аккерман, личный секретарь и бывший ученик Гильберта, фактически доказал эту гипотезу в своей статье « О построении действительных чисел Гильбертом» . [2] [6]

Питер Розса [7] и Рафаэль Робинсон [8] позже разработал версию функции Аккермана с двумя переменными, которой отдали предпочтение почти все авторы.

Обобщенная последовательность гиперопераций , например , также является версией функции Аккермана. [9]

В 1963 году Р.С. Бак основал интуитивную модель с двумя переменными. [n 1] вариант по последовательности гиперопераций : [10] [11]

По сравнению с большинством других версий, функция Бака не имеет несущественных смещений:

Было исследовано множество других версий функции Аккермана. [12] [13]

Определение [ править ]

Определение: как m-арная функция [ править ]

Оригинальная функция Аккермана с тремя аргументами определяется рекурсивно следующим образом для неотрицательных целых чисел и :

Из различных версий с двумя аргументами одна, разработанная Петером и Робинсоном (большинство авторов называет ее функцией Аккермана), определена для неотрицательных целых чисел. и следующее:

Функция Аккермана также была выражена в отношении последовательности гиперопераций : [14] [15]

или, записанное в обозначении Кнута, направленном вверх (расширенное до целочисленных индексов ):
или, что то же самое, через функцию Бака F: [10]

Определение: как итерированная 1-арная функция [ править ]

Определять как n -я итерация :

Итерация — это процесс составления функции из самой себя определенное количество раз. Композиция функций является ассоциативной операцией, поэтому .

Представляя функцию Аккермана как последовательность унарных функций, можно положить .

Тогда функция становится последовательностью унарного [n 2] функции, определенные из итерации :

Вычисление [ править ]

Рекурсивное определение функции Аккермана естественным образом может быть перенесено в систему переписывания термов (TRS) .

TRS, основанный на 2-арной функции [ править ]

Определение 2-арной функции Аккермана приводит к очевидным правилам редукции [16] [17]

Пример

Вычислить

Последовательность сокращения [n 3]

Крайняя левая-крайняя (одношаговая) стратегия :              Самая левая-внутренняя (одношаговая) стратегия :
         
         
         
         
         
         

Чтобы вычислить можно использовать стек , который изначально содержит элементы .

Затем повторно два верхних элемента заменяются по правилам. [n 4]

Схематически, начиная с :

WHILE stackLength <> 1
{
   POP 2 elements;
   PUSH 1 or 2 or 3 elements, applying the rules r1, r2, r3
}

Псевдокод опубликован в Grossman & Zeitman (1988) .

Например, на входе ,

конфигурации стека      отражают сокращение [n 5]
         
         
         
         
         
         
         
         
         
         
         
         
         
         

Примечания

  • Самая левая-внутренняя стратегия реализована на 225 компьютерных языках в Rosetta Code .
  • Для всех вычисление занимает не более шаги. [18]
  • Гроссман и Зейтман (1988) отметили, что при вычислении максимальная длина стека равна , пока .
Их собственный алгоритм, по своей сути итеративный, вычисляет в пределах время и внутри космос.

TRS, основанный на итерированной 1-арной функции [ править ]

Определение итерированных 1-арных функций Аккермана приводит к различным правилам сведения.

Поскольку композиция функций ассоциативна, вместо правила r6 можно определить

Как и в предыдущем разделе, вычисление может быть реализовано с помощью стека.

Первоначально стек содержит три элемента .

Затем повторно три верхних элемента заменяются по правилам. [n 4]

Схематически, начиная с :

WHILE stackLength <> 1
{
   POP 3 elements;
   PUSH 1 or 3 or 5 elements, applying the rules r4, r5, r6;
}

Пример

На входе последовательные конфигурации стека

Соответствующие равенства имеют вид

При использовании правила сокращения r7 вместо правила r6 замены в стеке будут следовать

Последовательные конфигурации стека будут тогда

Соответствующие равенства имеют вид

Примечания

  • На любых входных данных представленные до сих пор TRS сходятся за одинаковое количество шагов. Они также используют одни и те же правила редукции (в этом сравнении правила r1, r2, r3 считаются «такими же, как» правила r4, r5, r6/r7 соответственно). Например, сокращение сходится за 14 шагов: 6×r1, 3×r2, 5×r3. Сокращение сходится за те же 14 шагов: 6×r4, 3×r5, 5×r6/r7. ИВВ различаются порядком применения правил сокращения.
  • Когда вычисляется по правилам {r4, r5, r6}, максимальная длина стека остается ниже . Когда вместо правила r6 используется правило сокращения r7, максимальная длина стека составляет всего . Длина стека отражает глубину рекурсии. Поскольку приведение по правилам {r4, r5, r7} предполагает меньшую максимальную глубину рекурсии, [№ 6] в этом отношении такое вычисление более эффективно.

TRS на основе гипероператоров [ править ]

Как ясно показали Сундблад (1971) или Порто и Матос (1980) , функцию Аккермана можно выразить через последовательность гиперопераций :

или, после удаления константы 2 из списка параметров, через функцию Бака

Функция Бака , [10] вариант функции Аккермана сам по себе можно вычислить с помощью следующих правил сведения:

Вместо правила b6 можно определить правило

Для вычисления функции Аккермана достаточно добавить три правила приведения

Эти правила учитывают базовый случай A(0,n), выравнивание (n+3) и выдумку (-3).

Пример

Вычислить

используя правило сокращения : [n 5]      используя правило сокращения : [n 5]
         
         
         
         
         
         
                   
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         

Соответствующие равенства:

  • когда ИВВ с правилом сокращения применяется:
  • когда ИВВ с правилом сокращения применяется:

Примечания

  • Вычисление по правилам {b1 - b5, b6, r8 - r10} является глубоко рекурсивным. Максимальная глубина вложенности это . Виновником является порядок выполнения итерации: . Первый исчезает только после того, как вся последовательность развернута.
  • Вычисление по правилам {b1 - b5, b7, r8 - r10} в этом отношении более эффективно. Итерация имитирует повторяющийся цикл по блоку кода. [n 7] Вложение ограничивается , один уровень рекурсии на каждую повторяемую функцию. Мейер и Ричи (1967) показали это соответствие.
  • Эти соображения касаются только глубины рекурсии. Любой способ итерации приводит к одинаковому количеству шагов сокращения с использованием одних и тех же правил (когда правила b6 и b7 считаются «одинаковыми»). Сокращение например, сходится за 35 шагов: 12 × b1, 4 × b2, 1 × b3, 4 × b5, 12 × b6/b7, 1 × r9, 1 × r10. Modus iterandi влияет только на порядок применения правил сокращения.
  • Реального выигрыша во времени выполнения можно добиться, только не пересчитывая промежуточные результаты снова и снова. Мемоизация — это метод оптимизации, при котором результаты вызовов функций кэшируются и возвращаются, когда те же входные данные повторяются. См., например, Ward (1993) . Гроссман и Зейтман (1988) опубликовали хитрый алгоритм, который вычисляет в пределах время и внутри космос.

Огромные цифры [ править ]

Чтобы продемонстрировать, как вычисление результаты во многих шагах и в большом количестве: [n 5]

Таблица значений [ править ]

Вычисление функции Аккермана можно переформулировать в терминах бесконечной таблицы. Сначала поместите натуральные числа в верхний ряд. Чтобы определить число в таблице, возьмите число сразу слева. Затем используйте это число, чтобы найти необходимое число в столбце, заданном этим числом, и на одну строку вверх. Если слева от него нет числа, просто посмотрите на столбец с заголовком «1» в предыдущей строке. Вот небольшая верхняя левая часть таблицы:

Значения A ( m , n )
н
м
0 1 2 3 4 н
0 1 2 3 4 5
1 2 3 4 5 6
2 3 5 7 9 11
3 5 13 29 61 125
4 13 65533 2 65536  − 3





5 65533

6
м

Числа здесь, которые выражаются только с помощью рекурсивного возведения в степень или стрелок Кнута, очень велики и заняли бы слишком много места для записи простыми десятичными цифрами.

Несмотря на большие значения, встречающиеся в этом раннем разделе таблицы, были определены некоторые еще большие числа, такие как число Грэма , которое невозможно записать с помощью любого небольшого количества стрелок Кнута. Это число строится с помощью метода, аналогичного рекурсивному применению функции Аккермана к самой себе.

Это повторение приведенной выше таблицы, но значения заменены соответствующим выражением из определения функции, чтобы четко показать закономерность:

Значения A ( m , n )
н
м
0 1 2 3 4 н
0 0+1 1+1 2+1 3+1 4+1 п + 1
1 А (0, 1) А (0, А (1, 0))
= А (0, 2)
А (0, А (1, 1))
= А (0, 3)
А (0, А (1, 2))
= А (0, 4)
А (0, А (1, 3))
= А (0, 5)
А (0, А (1, n −1))
2 А (1, 1) А (1, А (2, 0))
= А (1, 3)
А (1, А (2, 1))
= А (1, 5)
А (1, А (2, 2))
= А (1, 7)
А (1, А (2, 3))
= А (1, 9)
А (1, А (2, n −1))
3 А (2, 1) А (2, А (3, 0))
= А (2, 5)
А (2, А (3, 1))
= А (2, 13)
А (2, А (3, 2))
= А (2, 29)
А (2, А (3, 3))
= А (2, 61)
А (2, А (3, n −1))
4 А (3, 1) А (3, А (4, 0))
= А (3, 13)
А (3, А (4, 1))
= А (3, 65533)
А (3, А (4, 2)) А (3, А (4, 3)) А (3, А (4, n −1))
5 А (4, 1) А (4, А (5, 0)) А (4, А (5, 1)) А (4, А (5, 2)) А (4, А (5, 3)) А (4, А (5, n −1))
6 А (5, 1) А (5, А (6, 0)) А (5, А (6, 1)) А (5, А (6, 2)) А (5, А (6, 3)) А (5, А (6, п -1))

Свойства [ править ]

Общие замечания [ править ]

  • Может быть не сразу очевидно, что оценка всегда завершается. Однако рекурсия ограничена, поскольку в каждом рекурсивном приложении либо уменьшается, или остается прежним и уменьшается. Каждый раз, когда достигает нуля, уменьшается, поэтому в конечном итоге также достигает нуля. (Выражаясь более технически, в каждом случае пара уменьшается в лексикографическом порядке по парам, что является хорошим упорядочением , как и упорядочение одиночных неотрицательных целых чисел; это означает, что нельзя спускаться вниз по порядку бесконечно много раз подряд.) Однако, когда уменьшается, нет верхней границы того, насколько может увеличиться — и зачастую оно будет значительно увеличиваться.
  • Для небольших значений m, таких как 1, 2 или 3, функция Аккермана растет относительно медленно по отношению к n (не более чем экспоненциально ). Для , однако, он растет гораздо быстрее; даже составляет около 2,00353 × 10 19 728 и десятичное разложение очень велик по любым типичным меркам, около 2,12004 × 10. 6.03123 × 10 19 727 .
  • Интересный аспект заключается в том, что единственная арифметическая операция, которую он когда-либо использовал, — это сложение 1. Его быстрорастущая мощь основана исключительно на вложенной рекурсии. Это также означает, что время его работы по крайней мере пропорционально его производительности и поэтому также чрезвычайно велико. На самом деле, в большинстве случаев время работы намного больше, чем результат; см. выше.
  • Версия с одним аргументом это увеличивает оба и в то же время затмевает любую примитивно-рекурсивную функцию, включая очень быстрорастущие функции, такие как экспоненциальная функция , факториальная функция, мульти- и суперфакториальные функции и даже функции, определенные с использованием нотации Кнута со стрелкой вверх (за исключением случаев, когда индексированная стрелка вверх используется). Видно, что примерно сопоставимо с в быстрорастущей иерархии . Этот экстремальный рост можно использовать, чтобы показать, что которая, очевидно, вычислима на машине с бесконечной памятью, такой как машина Тьюринга , и поэтому является вычислимой функцией , растет быстрее, чем любая примитивно-рекурсивная функция, и поэтому не является примитивно-рекурсивной.

Не примитивно рекурсивно [ править ]

Функция Аккермана растет быстрее, чем любая примитивно-рекурсивная функция , и поэтому сама по себе не является примитивно-рекурсивной. Схема доказательства такова: примитивно-рекурсивная функция, определенная с использованием до k рекурсий, должна расти медленнее, чем , (k+1)-я функция в быстрорастущей иерархии, но функция Аккермана растет по крайней мере так же быстро, как .

В частности, показано, что для каждой примитивно-рекурсивной функции существует неотрицательное целое число такая, что для всех неотрицательных целых чисел ,

Если это установлено, то из этого следует, что сам по себе не является примитивно-рекурсивным, поскольку в противном случае приведет к противоречию

Доказательство проводится следующим образом: определим класс всех функций, которые растут медленнее, чем функция Аккермана

и покажи это содержит все примитивно-рекурсивные функции. Последнее достигается, если показать, что содержит постоянные функции, функцию-преемник, функции проецирования и что он замкнут при операциях композиции функций и примитивной рекурсии.

в вычислительной сложности Использование

Функция Аккермана появляется во временной сложности некоторых алгоритмов , [19] такие как системы сложения векторов [20] и достижимость сети Петри , [21] тем самым показывая, что они вычислительно неосуществимы для больших экземпляров. Обратная функция Акермана появляется в некоторых результатах по временной сложности.

Инверсия [ править ]

Поскольку рассмотренная выше функция   f ( n ) = A ( n , n ) ее обратная функция очень быстро растет , f −1 , растет очень медленно. Эта обратная функция Аккермана f −1 обычно обозначается α . Фактически, α ( n ) меньше 5 для любого практического размера входных данных n , поскольку A (4, 4) имеет порядок .

Это обратное проявляется во временной сложности некоторых алгоритмов, таких как структура данных с непересекающимся набором и алгоритм Шазеля для минимальных остовных деревьев . Иногда в этих условиях используются исходная функция Аккермана или другие ее варианты, но все они растут с одинаково высокими темпами. В частности, некоторые модифицированные функции упрощают выражение, исключая −3 и подобные члены.

Двухпараметрическую вариацию обратной функции Аккермана можно определить следующим образом, где это функция пола :

Эта функция возникает при более точном анализе упомянутых выше алгоритмов и дает более точную оценку времени. В структуре данных с непересекающимся набором m представляет количество операций, а n представляет количество элементов; в алгоритме минимального остовного дерева m представляет количество ребер, а n представляет количество вершин. несколько несколько разных определений α ( m , n ) Существует ; например, log 2 n иногда заменяется на n , а функция пола иногда заменяется на потолок .

В других исследованиях может быть определена обратная функция, в которой m установлено в константу, так что обратная функция применяется к конкретной строке. [22]

Обратная функция Аккермана является примитивно-рекурсивной. [23]

Использовать в качестве эталона [ править ]

Функция Аккермана, благодаря ее определению в терминах чрезвычайно глубокой рекурсии, может использоваться в качестве эталона способности компилятора оптимизировать рекурсию. Первое опубликованное использование функции Аккермана таким образом было сделано в 1970 году Драгошем Вайдой. [24] и почти одновременно, в 1971 году, Ингве Сундблад. [14]

Основополагающая статья Сундблада была подхвачена Брайаном Вичманном (соавтором теста Whetstone ) в трилогии статей, написанных между 1975 и 1982 годами. [25] [26] [27]

См. также [ править ]

Примечания [ править ]

  1. ^ с обратным порядком параметров
  2. ^ ' карри '
  3. ^ На каждом этапе подчеркнутый редекс перезаписывается.
  4. ^ Jump up to: Перейти обратно: а б здесь: самая левая-внутренняя стратегия!
  5. ^ Jump up to: Перейти обратно: а б с д Для лучшей читаемости
    S(0) обозначается как 1,
    S(S(0)) обозначается как 2,
    S(S(S(0))) обозначается цифрой 3,
    и т. д...
  6. ^ Максимальная глубина рекурсии относится к количеству уровней активации процедуры, которые существуют во время самого глубокого вызова процедуры. Корнелиус и Кирби (1975)
  7. ^ ЦИКЛ n+1 РАЗ DO F

Ссылки [ править ]

  1. ^ Монин и Хинчи 2003 , с. 61.
  2. ^ Jump up to: Перейти обратно: а б Аккерманн 1928 г.
  3. ^ «Десятичное разложение A(4,2)» . kosara.net . 27 августа 2000 г. Архивировано из оригинала 20 января 2010 г.
  4. ^ Калуд, Маркус и Теви 1979 .
  5. ^ Гильберт 1926 , с. 185.
  6. ^ ван Хейеноорт 1977 .
  7. ^ Питер 1935 .
  8. ^ Робинсон 1948 .
  9. ^ Ричи 1965 , с. 1028.
  10. ^ Jump up to: Перейти обратно: а б с Бак 1963 года .
  11. ^ Меуссен и Зантема 1992 , с. 6.
  12. ^ Мунафо 1999a .
  13. ^ Ричи 1965 .
  14. ^ Jump up to: Перейти обратно: а б Сундблад 1971 г.
  15. ^ Порту и Матос 1980 .
  16. ^ Гроссман и Зейтман 1988 .
  17. ^ Полсон 2021 .
  18. ^ Коэн 1987 , с. 56, предложение 3.16 (см. доказательство).
  19. ^ Брубейкер 2023 .
  20. ^ Червинский и Орликовский 2022 .
  21. ^ Леру 2022 .
  22. ^ Петти 2002 .
  23. ^ Матос 2014 .
  24. ^ Играть 1970 год .
  25. ^ Вихманн 1976 .
  26. ^ Вихманн 1977 .
  27. ^ Вихманн 1982 .

Библиография [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: ad1cfac1476b2eb8c731c2835b1d25da__1714031700
URL1:https://arc.ask3.ru/arc/aa/ad/da/ad1cfac1476b2eb8c731c2835b1d25da.html
Заголовок, (Title) документа по адресу, URL1:
Ackermann function - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)