Гипер E нотация (сокращённо E#) — нотация для больших чисел, созданная Сбиисом Сайбианом.[1] Впервые она была представлена в его веб-книге "От одного до бесконечности: Гайд по конечному" 19 ноября 2011 года и обобщена до Расширенной гипер E нотации (сокращённо xE#). Гипер E нотация — усовершенствованная версия другой нотации, созданной Сбиисом Сайбианом в детстве.
Оригинальное определение[]
Исходное выражение в гипер E нотации состоит из последовательности одного или нескольких целых положительных аргументов, разделённых гиперионами (или гиперметками) #. Мы обозначаем это как E[b]##...#. b называется "базой", если оно опущено, как это часто бывает, то по умолчанию оно равно 10. "E[b]d" также равно "b^d".
Эти три правила заключаются в следующем:
- Правило 1. Если гипериона нет:
- .
- Правило 2. Если последняя запись равна 1:
- .
- Правило 3. В противном случае:
На простом языке:
- Если есть только один аргумент "x", значение выражения равно .
- Если последняя запись равна 1, она может быть удалена.
- В противном случае...
- Вычислите исходное выражение, но с уменьшением последней записи на 1. Назовите это значение "z".
- Удалите последние две записи выражения.
- Добавьте "z" в качестве записи в конец выражения.
Приоритет правил указан на оригинальной веб-странице под определением: "Используются 3 правила. Если вам задано выражение E#, вы сначала проверяете, применимо ли правило 1. Если это не так, вы проверяете соблюдение правила 2. Если это неприменимо, вы переходите к правилу 3." Это отключает , равный 1 в 3-м правиле, и позволяет избежать перекрывающейся классификации случаев.
Расширенное определение[]
Расширенная гипер E нотация позволяет нескольким символам гиперионов появляться между каждой записью. Число гиперионов, следующее за записью , представлено символом h(n). Для целей этого определения является сокращением для "n" последовательных меток гипериона. Например, полное выражение было бы записано E[b]. Сайбиан использует @ для обозначения остальной части выражения, например, Бауэрс использует # для обозначения остальной части массива.
Разница между оригинальной и расширенной нотацией заключается в том, что расширенная гипер E нотация допускают более одного последовательного гипериона #.
- Правило 1. Если гипериона нет:
- .
- Правило 2. Если последняя запись равна 1:
- @ @
- Правило 3. Если :
- @ @ .
- Правило 4. В противном случае:
- @ @ @ (Примечание: = #)
Это похоже на правила линейной нотации массива. Мы также можем описать эти правила на простом языке:
- Если есть только один аргумент "x", значение выражения равно .
- Если последняя запись равна 1, она может быть удалена.
- Пусть "h" - длина последнего набора меток гипериона. Если "h" > 1:
- Удалите последнюю запись выражения и назовите её r.
- Снова удалите последнюю запись выражения; на этот раз назовите её z.
- Повторите "z" "r" раз с отметками гиперионов h - 1 между каждым повторением. Добавьте это в конец выражения. (Восстановите удалённую последовательность меток гипериона, чтобы соединить два выражения вместе.)
- Если последний набор меток гипериона имеет длину один:
- Вычислите исходное выражение, но с уменьшением последней записи на 1. Назовите это значение "z".
- Удалите последние две записи выражения.
- Добавьте "z" в качестве записи в конец выражения. (Опять же, восстановите удалённую последовательность меток гипериона, чтобы склеить два выражения вместе.)
Примеры[]
- E6 = E6#1 = 10^6 = миллиону
- E100 = E100#1 = 10^100 = гуголу
- Это пример правила 1 с выражениями, состоящими из одного элемента. Поскольку базовое значение по умолчанию равно 10, мы можем сократить E[10]100 до базового значения E100.
- E100#2 = E(E100#1) = E10^100 = 10^10^100 = гуголплексу
- E100#3 = E(E100#2) = E10^10^100 = 10^10^10^100 = гуголдуплексу
- Это пример правила 3 (правило 4 в расширении) с выражениями, состоящими из двух элементов. Во втором выражении круглые скобки можно опустить: E(E100#1) = EE100#1.
- E303#1 = E303 = сантиллиону = 10^303
- E303#2 = эцетонплексу = EE303 = 10^10^303
- E303#3 = EEE303 = 10^10^10^100 = эцетондуплексу
- E1#3 = EEE1 = 10^10^10 = триалогу
- E1#4 = EEEE1 = 10^10^10^10 = тетралогу
- E1#10 = EEEEEEEEEE1 = 10^^10 = декеру
- E303#6 = EEEEEE303 = 101010101010303 = эцетонквинтиплексу
- E1#100 = EEE...EEE1 (100 E) = гигголу
- Повторное применение правила 3: E1#100 = EE1#99 = EEE1#98 = ...
- E100#100 = EEE...EEE100 (100 E) = гранголу
- Это то же самое, что и E1#100, но с другой первой записью.
- E100#101 = EEE...EEE100 (101 E) = гранголплексу
- E100#101 = EE100#100 = 10^Грангол, отсюда и название.
- E100#100#2 = E100#(E100#100) = EEE...EEE100 (грангол E) = гранголдексу
- Теперь мы вводим выражения из трёх элементов.
- E100#100#3 = E100#(E100#100#2) = E100#(E100#(E100#100)) = EEE...EEE100 (гранголдекс копий E) = гранголдудексу
- Увеличение значения третьей записи делает вложенность всё глубже и глубже.
- E100#100#100#100 = E100#100#(E100#100#100#99) = E100#100#(E100#100#(E100#100#100#98)) = ... гиганголу
- Выражения с четырьмя элементами похожи — они создают всё более глубокую вложенность на уровне массива. Это также может быть записано как E100##4; начало следующего уровня нотации.
- E100##100 = E100#100#100#...#100#100#100 с 100, повторяющейся 100 раз = гуголду
- Теперь мы подошли к расширенной гипер E нотации. Два последовательных гипериона (дейтеро-гиперионы) указывают на повторение на более низком уровне.
- E100##100#100 = граатаголду
- Это выражение разлагается на выражения Ea##b путём многократного применения правила 4.
- E100##100##100 = E100##100#100#...#100#100 с 100, повторяющейся 100 раз = гуголтра
- Мы игнорируем первый ## до тех пор, пока второй не будет расширен и все слои из 100 не будут решены.
- E100###100 = E100##100##...##100##100 с 100, повторяющейся 100 раз = труголу
- Три метки гипериона (трито-гиперион) представляют собой повторение двух меток гипериона. Помните, что двойные метки решаются справа налево.
- E100####100 = E100###100###...###100###100 с 100, повторяющейся 100 раз = теруголу
- Четырёхкратный гиперион разлагается на тройные.
- Годгалах = E100#####...#####100 со 100 знаками гипериона или E100#100
- Наборы из 100 меток гипериона разлагаются на 99 единиц, 99 единиц разлагаются на 98 единиц и т.д. Также обратите внимание, что верхний индекс 100 означает, что существует 100 #, и его не следует путать с E100#(100).
Отношения с другими нотациями[]
Первые сегменты гипер E нотации основаны на возведении в степень, т. е. En равно 10n. Вложение в гипер E с одной записью создаёт итеративное возведение в степень, например EEEn=101010n. Затем в игру вступают метки гипериона. Поскольку метки гипериона имеют решающее значение для рекурсии в этой нотации, определённые расположения гиперионов могут указывать на сходство с другими нотациями, определёнными рекурсией.
Гипер E может быть связана со стрелочной нотацией посредством следующего правила: [2]
для положительных чисел a, b, c. Например,
- a↑b = E(a)b
- a↑↑b = E(a)1#b
- a↑↑↑b = E(a)1#1#b
- a↑↑↑↑b = E(a)1#1#1#b
Псевдокод[]
Для фиксированного числа переменных исходная гипер E нотация является примитивно-рекурсивной, хотя значения, которые она выдаёт, значительно превосходят значения любого компьютера. Расширенная гипер E нотация является непримитивно-рекурсивной для двух или более переменных.
function Eb(a1, a2, ..., an - 1, an): //Default value of b is 10 if n = 1: return Шаблон:^ if an = 1: return Eb(a1, a2, ..., an - 1) z := Eb(a1, a2, ..., an - 1, an - 1) return Eb(a1, a2, ..., an - 2, z) function xEb(a1, a2, ..., an - 1, an; h1, h2, ..., hn - 2, hn - 1): //Default value of b is 10 if n = 1: return Шаблон:^ if an = 1: return xEb(a1, a2, ..., an - 1; h1, h2, ..., hn - 2) if hn - 1 > 1: r := an z := an - 1 zseq := z, z, ..., z, z (r times) h := ah - 1 hseq := h, h, ..., h, h (r - 1 times) return xEb(a1, a2, ..., an - 2, zseq; h1, h2, ..., hn - 2, hseq) z := xEb(a1, a2, ..., an - 1; h1, h2, ..., hn - 2, hn - 1) return xEb(a1, a2, ..., an - 2, z; h1, h2, ..., hn - 2)