Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

В теории вычислимости , то функция Аккермана , названная в честь Вильгельма Аккермана , является одним из самых простых [1] и ранних обнаруженных примеров полной вычислимой функции , которая не является примитивно рекурсивным . Все примитивно-рекурсивные функции являются тотальными и вычислимыми, но функция Аккермана показывает, что не все итоговые вычислимые функции являются примитивно рекурсивными. После публикации Аккермана [2]его функции (у которой было три неотрицательных целочисленных аргумента) многие авторы модифицировали ее для различных целей, так что сегодня «функция Аккермана» может относиться к любому из многочисленных вариантов исходной функции. Одна из распространенных версий, функция Аккермана – Петера с двумя аргументами , определяется следующим образом для неотрицательных целых чисел m и n :

Его ценность быстро растет даже при небольших затратах. Например, A (4, 2) представляет собой целое число из 19729 десятичных цифр [3] (эквивалент 2 65536 −3 или 2 2 2 2 2 −3).

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

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

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

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

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

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

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

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

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

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

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

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

Может быть не сразу очевидно, что оценка всегда завершается. Однако рекурсия ограничена, потому что в каждом рекурсивном приложении либо уменьшается, либо остается прежним и уменьшается. Каждый раз, когда он достигает нуля, уменьшается, так что в конечном итоге тоже достигает нуля. (Выражаясь более технически, в каждом случае пара уменьшается в лексикографическом порядке по парам, что является хорошим упорядочением , точно так же, как упорядочение отдельных неотрицательных целых чисел; это означает, что нельзя идти вниз в упорядочении бесконечно много раз подряд. .) Однако, когда уменьшается, нет верхней границы того, насколько может увеличиться - и он часто будет значительно увеличиваться.

Функция Петера-Аккермана также может быть выражена по отношению к различным другим версиям функции Аккермана:

  • гипероперация :
  • гипероперация , представленная стрелкой вверх Кнута (расширенная до целочисленных индексов ):
  • гипероперация , представленная в нотации стрелок Конвея :
Следовательно
( и будет соответствовать и , которые можно было бы логически добавить.)

Для малых значений m, таких как 1, 2 или 3, функция Аккермана растет относительно медленно по отношению к n (не более чем экспоненциально ). Для , однако, он растет гораздо быстрее; даже около 2 × 10 19 728 , а также расширение десятичного из A (4, 3) очень велико по любой типичной мере.

Интересным аспектом функции (Петера-) Аккермана является то, что единственная арифметическая операция, которую она когда-либо использует, - это сложение 1. Ее быстрорастущие возможности основаны исключительно на вложенной рекурсии. Это также означает, что время его работы, по крайней мере, пропорционально его производительности, и поэтому оно также чрезвычайно велико. На самом деле, в большинстве случаев время работы намного больше, чем результат; см. ниже.

Версия с одним аргументом, которая увеличивает обе и в то же время затмевает каждую примитивную рекурсивную функцию, включая очень быстрорастущие функции, такие как экспоненциальная функция , факториальная функция, много- и сверхфакторные функции и даже функции, определенные с помощью стрелки Кнута вверх обозначение (кроме случаев, когда используется индексированная стрелка вверх). Можно видеть , что примерно сопоставимо с в быстро растущей иерархии . Этот экстремальный рост может быть использован для демонстрации того, что очевидно вычислимо на машине с бесконечной памятью, такой как машина Тьюринга, и, следовательно, является вычислимой функцией., растет быстрее, чем любая примитивно-рекурсивная функция, и поэтому не является примитивно-рекурсивной.

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

где S ( n ) = n + 1 - обычная функция-последователь, а Iter обозначает функциональный оператор мощности , также определяемый примитивной рекурсией:

Функция , определенная таким образом согласуется с функцией Ackermann , определенной выше: .

Количество рекурсий до возвращения Аккермана (3,3)

Примеры расширений [ править ]

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

Чтобы продемонстрировать, как вычисления выполняются за много шагов и в большом количестве:

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

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

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

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

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

Доказательство того, что функция Аккермана не является примитивно рекурсивной [ править ]

В некотором смысле функция Аккермана растет быстрее, чем любая примитивно рекурсивная функция, и поэтому сама по себе не является примитивно рекурсивной.

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

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

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

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

Обратите внимание, что отсутствие примитивной рекурсии не означает, что ее нельзя вычислить с помощью цикла for. [13]

Обратный [ править ]

Поскольку рассмотренная выше функция 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 установлено на константу, так что обратная функция применяется к конкретной строке. [14]

Функция, обратная функции Аккермана, является примитивно рекурсивной. [15]

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

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

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

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

  • Теория вычислимости
  • Двойная рекурсия
  • Быстрорастущая иерархия
  • Функция Гудштейна
  • Примитивная рекурсивная функция
  • Рекурсия (информатика)

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

  1. ^ Монино & Hinchey 2003 , стр. 61.
  2. ^ Б Ackermann 1928 .
  3. ^ "Десятичное разложение A (4,2)" . kosara.net . 27 августа, 2000. Архивировано из оригинала на 20 января 2010 года.
  4. ^ Calude, Marcus & Tevy 1979 .
  5. ^ Гильберт 1926 , стр. 185.
  6. ^ Хейенорта 1967 .
  7. ^ Петер 1935 .
  8. ^ Робинсон 1948 .
  9. Перейти ↑ Ritchie 1965 , p. 1028.
  10. ^ с обратным порядком параметров
  11. ^ Бак 1963 .
  12. Ву, Чи (17 декабря 2009 г.). «Функция Аккермана не является примитивно рекурсивной | planetmath.org» . planetmath.org . Архивировано из оригинала на 2013-05-09.
  13. ^ "Цикл Купа (функция Аккермана в цикле For) | timkoop" . timkoop.com . 2021-04-27 . Проверено 27 апреля 2021 .
  14. ^ Pettie 2002 .
  15. Перейти ↑ Matos 2014 .
  16. Перейти ↑ Vaida 1970 .
  17. ^ Sundblad 1971 .
  18. Перейти ↑ Wichmann, 1976 .
  19. Wichmann 1977 .
  20. Перейти ↑ Wichmann 1982 .

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

  • Акерманн, Вильгельм (1928). "Zum Hilbertschen Aufbau der reellen Zahlen" . Mathematische Annalen . 99 : 118–133. DOI : 10.1007 / BF01459088 . S2CID  123431274 .
  • Бак, Р.С. (1963). «Математическая индукция и рекурсивные определения» . Американский математический ежемесячник . 70 (2): 128–135. DOI : 10.2307 / 2312881 . JSTOR  2312881 .
  • Калуд, Кристиан; Маркус, Соломон ; Теви, Ионел (ноябрь 1979 г.). «Первый пример рекурсивной функции, которая не является примитивно рекурсивной» . Historia Math . 6 (4): 380–84. DOI : 10.1016 / 0315-0860 (79) 90024-7 .
  • ван Хейеноорт, Жан (1967). От Фреге до Гёделя: Справочник по математической логике, 1879–1931 . Издательство Гарвардского университета.
  • Гильберт, Дэвид (1926). "Über das Unendliche". Mathematische Annalen . 95 : 161–190. DOI : 10.1007 / BF01206605 . S2CID  121888793 .
  • Матос, Армандо Б. (7 мая 2014 г.). «Обратная функция Аккермана примитивно рекурсивна» (PDF) .
  • Куп, Тим (25 апреля 2021 г.). «Функция Аккермана реализована с помощью цикла for» .
  • Монен, Жан-Франсуа; Хинчи, MG (2003). Понимание формальных методов . Springer. п. 61. ISBN 9781852332471.
  • Петер, Рожа (1935). "Конструкция ничтрекурсивер Функционен". Mathematische Annalen . 111 : 42–60. DOI : 10.1007 / BF01472200 . S2CID  121107217 .
  • Петти, С. (2002). «Нижняя граница в стиле обратного Аккермана для онлайн-задачи проверки минимального остовного дерева». 43-й ежегодный симпозиум IEEE по основам информатики, 2002 г. Материалы : 155–163. DOI : 10.1109 / SFCS.2002.1181892 . ISBN 0-7695-1822-2. S2CID  8636108 .
  • Ричи, Роберт Уэллс (ноябрь 1965 г.). «Классы рекурсивных функций на основе функции Аккермана» . Тихоокеанский математический журнал . 15 (3): 1027–1044. DOI : 10,2140 / pjm.1965.15.1027 .
  • Робинсон, Рафаэль М. (1948). «Рекурсия и двойная рекурсия» . Бюллетень Американского математического общества . 54 (10): 987–93. DOI : 10.1090 / S0002-9904-1948-09121-2 .
  • Сундблад, Ингве (март 1971 г.). «Функция Аккермана. Теоретические, вычислительные и манипулятивные исследования формул». BIT Численная математика . 11 (1): 107–119. DOI : 10.1007 / BF01935330 . S2CID  123416408 .
  • Вайда, Драгонь (1970). «Проверка компилятора для языка, подобного Алголу». Бюллетень Mathématique de la Société des Sciences Mathématiques de la République Socialiste de Roumanie . Nouvelle série. 14 (62) (4): 487–502. JSTOR  43679758 .
  • Вичманн, Брайан А. (март 1976 г.). «Функция Аккермана: исследование эффективности вызывающих процедур». BIT Численная математика . 16 : 103–110. DOI : 10.1007 / BF01940783 . S2CID  16993343 .
  • Вичманн, Брайан А. (июль 1977 г.). «Как вызывать процедуры, или размышления о функции Аккермана». BIT Численная математика . 16 (3): 103–110. DOI : 10.1002 / spe.4380070303 . S2CID  206507320 .
  • Вичманн, Брайан А. (июль 1982 г.). «Последние результаты теста вызова процедуры, функция Аккермана» (PDF) .

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

  • «Функция Аккермана» . Энциклопедия математики . EMS Press . 2001 [1994].
  • Вайсштейн, Эрик В. «Функция Аккермана» . MathWorld .
  •  Эта статья включает материалы, являющиеся общественным достоянием  из  документа NIST :  Блэк, Пол Э. «Функция Аккермана» . Словарь алгоритмов и структур данных .
  • Анимированный калькулятор функции Аккермана
  • Функция Акермана, реализованная с помощью цикла for
  • Скотт Ааронсон , кто может назвать самое большое число? (1999)
  • Функции Аккермана . Включает таблицу некоторых значений.
  • Гипероперации: функция Аккермана и новая арифметическая операция
  • Большие номера Роберта Munafo в описывает несколько вариаций на определение A .
  • Габриэль Ниваш, Обратный Аккерман без боли об обратной функции Аккермана.
  • Раймунд Зайдель, Понимание обратной функции Аккермана (презентация в формате PDF).
  • Функция Аккермана, написанная на разных языках программирования (на Rosetta Code )
  • Функция Аккермана ( Архивировано 24 октября 2009 г.) - Некоторое исследование и программирование Гарри Дж. Смита.