В теории вычислимости , то функция Аккермана , названная в честь Вильгельма Аккермана , является одним из самых простых [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 , определенной выше: .
Примеры расширений [ править ]
Чтобы увидеть, как функция Аккермана так быстро растет, полезно расширить некоторые простые выражения, используя правила из исходного определения. Например, полностью оценить можно так:
Чтобы продемонстрировать, как вычисления выполняются за много шагов и в большом количестве:
Таблица значений [ править ]
Вычисление функции Аккермана можно переформулировать в терминах бесконечной таблицы. Сначала разместите натуральные числа в верхнем ряду. Чтобы определить число в таблице, возьмите число сразу слева. Затем используйте это число, чтобы найти необходимое число в столбце, заданном этим числом, и на одну строку вверх. Если слева от него нет числа, просто посмотрите на столбец с заголовком «1» в предыдущей строке. Вот небольшая верхняя левая часть таблицы:
п м | 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 | ||||||
м |
Числа здесь, которые выражаются только с помощью рекурсивного возведения в степень или стрелок Кнута , очень большие и занимают слишком много места для записи в виде простых десятичных цифр.
Несмотря на большие значения, встречающиеся в этом раннем разделе таблицы, были определены некоторые даже большие числа, такие как число Грэма , которое нельзя записать с помощью небольшого количества стрелок Кнута. Это число строится с помощью техники, аналогичной рекурсивному применению функции Аккермана к самому себе.
Это повторение приведенной выше таблицы, но значения заменены соответствующим выражением из определения функции, чтобы четко показать шаблон:
п м | 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, п - 1)) |
3 | А (2, 1) | А (2, А (3, 0)) = А (2, 5) | А (2, А (3, 1)) = А (2, 13) | А (2, А (3, 2)) = А (2, 29) | А (2, А (3, 3)) = А (2, 61) | A (2, A (3, n −1)) |
4 | А (3, 1) | А (3, А (4, 0)) = А (3, 13) | А (3, А (4, 1)) = А (3, 65533) | А (3, А (4, 2)) | А (3, А (4, 3)) | A (3, A (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, n −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].
См. Также [ править ]
- Теория вычислимости
- Двойная рекурсия
- Быстрорастущая иерархия
- Функция Гудштейна
- Примитивная рекурсивная функция
- Рекурсия (информатика)
Ссылки [ править ]
- ^ Монино & Hinchey 2003 , стр. 61.
- ^ Б Ackermann 1928 .
- ^ "Десятичное разложение A (4,2)" . kosara.net . 27 августа, 2000. Архивировано из оригинала на 20 января 2010 года.
- ^ Calude, Marcus & Tevy 1979 .
- ^ Гильберт 1926 , стр. 185.
- ^ Хейенорта 1967 .
- ^ Петер 1935 .
- ^ Робинсон 1948 .
- Перейти ↑ Ritchie 1965 , p. 1028.
- ^ с обратным порядком параметров
- ^ Бак 1963 .
- ↑ Ву, Чи (17 декабря 2009 г.). «Функция Аккермана не является примитивно рекурсивной | planetmath.org» . planetmath.org . Архивировано из оригинала на 2013-05-09.
- ^ "Цикл Купа (функция Аккермана в цикле For) | timkoop" . timkoop.com . 2021-04-27 . Проверено 27 апреля 2021 .
- ^ Pettie 2002 .
- Перейти ↑ Matos 2014 .
- Перейти ↑ Vaida 1970 .
- ^ Sundblad 1971 .
- Перейти ↑ Wichmann, 1976 .
- ↑ Wichmann 1977 .
- Перейти ↑ 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 г.) - Некоторое исследование и программирование Гарри Дж. Смита.