Стрелочные обозначения Кнута

Материал из testwiki
Перейти к навигации Перейти к поиску

В математике стрелочная нота́ция Кну́та — это метод для записи больших чисел. Её идея основывается на том, что умножение — множественное сложение, возведение в степень — множественное умножение. Была предложена Дональдом Кнутом в 1976 году[1]. Тесно связана с функцией Аккермана и последовательностью гипероператоров.

Тетрация, записанная с помощью стрелочной нотации Кнута:

ab= ba=aa...a=a(a(a))bb.

Пентация в обозначениях Кнута:

ab=a(a(a))b.

В указанных обозначениях присутствует Шаблон:Mvar операндов, каждый из которых равен Шаблон:Mvar, соответственно операции повторяются b1 раз.

Введение

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

Умножение натуральных чисел может быть определено через повторно производимую операцию сложения («сложить Шаблон:Mvar копий числа Шаблон:Mvar»):

a×b=a+a++ab,

например,

4×3=4+4+4=123.

Возведение числа Шаблон:Mvar в степень Шаблон:Mvar может быть определено как повторно производимая операция умножения («перемножить Шаблон:Mvar копий числа Шаблон:Mvar»), и в обозначениях Кнута эта запись выглядит как одиночная стрелочка, указывающая вверх:

ab=ab=a×a××ab

Например,

43=43=4×4×4=643

Такая одиночная стрелка вверх использовалась в качестве значка степени в языке программирования Алгол.

Продолжая далее последовательность операций за пределы возведения в степень, Дональд Кнут ввёл понятие оператора «двойная стрелочка» для записи тетрации (многократного возведения в степень):

ab= ba=aa...a=a(a(a))bb.

Например,

43= 34=444=4(44)=42561,3×1015433.

Здесь и далее вычисление выражения всегда идёт справа налево. Также и стрелочные операторы Кнута (как и операция возведение в степень) по определению обладают правой ассоциативностью (очерёдностью справа налево). Согласно данному определению,

32=33=27,
33=333=327=7625597484987,
34=3333=376255974849871,3×103638334640024,
35=33333=337625597484987,
и так далее.

Уже это приводит к довольно большим числам, но система обозначений на этом не заканчивается. Оператор «тройная стрелочка» используется для записи повторного возведения в степень оператора «двойная стрелочка» (также известного как «пентация»):

ab=a(a(a))b,

затем оператора «четверная стрелочка»:

ab=a(a(a))b

Шаблон:Итд Общее правило оператор «Шаблон:Mvar-я стрелочка», в соответствии с правой ассоциативностью, продолжается вправо в последовательную серию операторов «Шаблон:Mvar-1 стрелочка». Символически это можно записать следующим образом:

a  b=a  a  a  a  a  n   n1 n1   n1     b.

Например:

32=33=333=327=7625597484987,
33=333=3(333)=333333=3337625597484987.

Форма обозначения anb обычно используется для записи ab с n стрелочками.

Система обозначений

В таких выражениях как ab, обычно для обозначения возведения в степень пишут показатель степени b как верхний индекс основания a. Но многие другие среды — такие как языки программирования и e-mail — не поддерживают подобную двумерную конфигурацию. Поэтому пользователи должны использовать линейную форму записи ab для таких сред; стрелочка наверх предлагает возвести в степень степени. Если среди доступных символов нет стрелочки вверх, тогда вместо неё используется циркумфлекс «^».Верхний индекс записи ab сам по себе не приспособлен к обобщению, что объясняет, почему Дональд Кнут вместо такой формы записи выбрал линейную форму записи ab.


Обозначение «↑»

Попытка написать выражение ab, используя знакомую форму записи с показателями степени, порождает башню степеней. Например:

a4=aaaa=aaaa.

Если b является переменной величиной (или очень большое), башня степеней может быть записана, используя точки и с пометкой, показывающей высоту башни

ab=aa...ab.

Используя такую форму записи, выражение ab может быть записано как набор (стек) таких степенных башен, каждая из которых показывает степень вышележащей

a4=aaaa=aa...aaa...aaa...aa.

И снова, если b является переменной величиной (или очень большое), набор таких степенных башен может быть записан, используя точки и с пометкой, показывающей их высоты

ab=aa...aaa...aa}b.

Более того, выражение ab может быть записано, используя несколько колонок подобных степенных башен, где каждая колонна показывает число степенных башен в наборе слева

a4=aaaa=aa...aaa...aa}aa...aaa...aa}aa...aaa...aa}a.

В более общем случае:

ab=aa...aaa...aa}aa...aaa...aa}}ab.


Так можно писать неограниченно долго, чтобы представить anb как итерацию возведения в степень для любого a, n и b (хотя понятно, что и это становится достаточно громоздким).

Использование тетрации

Форма записи ba в виде тетрации позволяет упростить такие схемы, при этом продолжая использовать геометрическое представление (мы можем их назвать тетрационными башнями).

ab=ba,
ab=a...aab,
ab=a...aaa...aaa}b.

Наконец, в качестве примера, четвёртое число Аккермана 444 может быть записано в виде:

4...444...444...444=4...444...444444.

Обобщение

Некоторые числа настолько большие, что даже запись стрелочками Кнута становится слишком громоздкой; в этом случае использование оператора n-стрелочка n предпочтительней (и также для описания с изменяемым числом стрелочек), или эквивалентно, гипероператорам. Но некоторые числа настолько огромны, что даже подобная запись недостаточна. Например, число Грэма. Для его записи может быть использована цепочка Конвея: цепочка из трёх элементов эквивалентна другой системе записи, но цепочка из четырёх и более элементов является более мощной формой записи.

anb=hyper(a,n+2,b)=abn(Knuth)(Conway)

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

Определение

Обозначение стрелочка вверх формально определяется так

anb={ab,если n=1;1,если b=0;an1(an(b1)),в ином случае

для всех целых a,b,n, где b0,n1.

Все стрелочные операторы (включая обычное возведение в степень, ab) обладают правой ассоциативностью, то есть, их вычисление осуществляется справа налево, если выражение содержит два и более подобных оператора. Например,

abc=a(bc), но не (ab)c;
33=333 равно 3(33)=327=7625597484987, но не (33)3=273=19683.

Есть хорошая причина для подобного выбора направления вычисления справа налево. Если бы мы использовали способ вычисления слева направо, тогда ab было бы равно a(a(b1)), и тогда в действительности не являлся бы новым оператором.

Правая ассоциативность также естественна по следующей причине. Мы можем переписать повторяемые стрелочные выражения anna, которые появляются при расширении an+1b в виде annan1, где всe a становятся левыми операндами стрелочных операторов. Это важно, так как стрелочные операторы не являются коммутативными.

Записывая (am)b как функциональный показатель степени b функции f(x)=amx, мы получим anb=(an1)b1.

Определение можно продолжить ещё на один шаг, начиная с anb=ab для n = 0, так как возведение в степень есть повторяемое умножение, начиная с 1. Экстраполировать ещё на один шаг, записывая умножение как повторяемое сложение, не совсем верно так как умножение есть повторяемое сложение, начиная с 0 вместо 1. «Экстраполируя» снова на один шаг, записывая добавочный n как повторяемое добавление 1, требует начинать с числа a. Это отличие также подчёркивается в определении гипероператора, где начальные значения для сложения и умножения задаются раздельно.

Таблица значений

Расчёт 2mn может быть переформулирован в терминах бесконечной таблицы. Мы размещаем числа 2n в верхнем ряду и заполняем колонку слева числом 2. Для определения числа в таблице следует взять число, ближайшее слева, затем найти сверху требуемое число в предыдущем ряду, в позиции, заданной только что полученным значением.

Значения 2mn = hyper(2, m + 2, n) = 2 → n → m
m\n 1 2 3 4 5 6 Формула
1 2 4 8 16 32 64 2n
2 2 4 16 65536 2655362,0×1019,729 2265536106,0×1019,728 2n
3 2 4 65536 22...265536     2n
4 2 4 22...265536       2n

Таблица такая же, как в статье функция Аккермана, за исключением сдвига в значениях m и n, и в добавке в размере 3 ко всем значениям.

Расчёт 3mn

Мы размещаем числа 3n в верхнем ряду и заполняем колонку слева числом 3. Для определения числа в таблице следует взять число, ближайшее слева, затем найти сверху требуемое число в предыдущем ряду, в позиции, заданной только что полученным значением.

Значения 3mn = hyper(3, m + 2, n) = 3 → n → m
m\n 1 2 3 4 5 Формула
1 3 9 27 81 243 3n
2 3 27 7,625,597,484,987 37,625,597,484,987   3n
3 3 7,625,597,484,987 33...37,625,597,484,987     3n
4 3 33...37,625,597,484,987       3n

Расчёт 10mn

Мы размещаем числа 10n в верхнем ряду и заполняем колонку слева числом 10. Для определения числа в таблице следует взять число, ближайшее слева, затем найти сверху требуемое число в предыдущем ряду, в позиции, заданной только что полученным значением.

Значения 10mn = hyper(10, m + 2, n) = 10 → n → m
m\n 1 2 3 4 5 Формула
1 10 100 1000 10,000 100,000 10n
2 10 10,000,000,000 1010,000,000,000 101010,000,000,000 10101010,000,000,000 10n
3 10 1010...1010 1010...101010 1010...10101010   10n
4 10 10...101010 10...10101010     10n

Для 2 ≤ n ≤ 9 численное расположение 10mn является лексикографическим порядком с m как наиболее значимым числом, так что порядок чисел этих 8 колонок есть просто линия-за-линией. То же самое применимо и для чисел в 97 колонках с 3 ≤ n ≤ 99, и мы начинаем с m = 1 даже для 3 ≤ n ≤ 9,999,999,999.

Примечания

Шаблон:Примечания

Ссылки

Шаблон:Гугология Шаблон:Стиль статьи