BEAF, или функция расширяющегося массива Бауэрса — гугологическая функция, созданная Джонатаном Бауэрсом. Эта статья представляет собой пошаговое руководство, постепенно знакомящее с функцией, призванное дать интуитивное представление о том, как она работает.
Прежде чем мы сможем понять BEAF, мы должны понять расширенные операторы в его основе. Стрелочная нотация описывает набор операторов, введённых Дональдом Кнутом:
.
. Гугологи называют это тетрацией; стрелки должны решаться справа налево.
= 2361022671...5261392896, что содержит около цифр (4, тетрированная с 4)
(3, пентированная с 3)
Операторная нотация[]
Бауэрс разработал обобщение стрелочной нотации, которое он называет операторной нотацией:
то есть:
и
Например, .
Эта форма операторной нотации является просто сокращением для стрелочной нотации. Однако Бауэрс делает ещё один шаг вперёд, заключая n в две пары фигурных скобок вместо одной:
Бауэрс называет это a, расширенная с b. Здесь b — количество "слоёв", включая внешний, или (количество a + 1) / 2. (Для компьютерных специалистов: расширение не является примитивно-рекурсивным. Вы не можете запрограммировать его, используя только циклы с предварительно вычисленными пределами.)
Четыре набора скобок — детонация (умножетонация, степентонация, детонатетрация и т. д.), а пять — пентонация (уножепентонация, степенпентонация, пентонотетрация и т. д.). Затем у нас есть хексонация, хептонация и т. д.
В нашей операторной нотации теперь четыре аргумента:
Здесь верхний индекс d указывает количество фигурных скобок, заключённых вокруг c. Например, — сокращение для . Эта конкретная нотация не использовалась Джонатаном Бауэрсом.
Гуголог Крис Берд доказал, что эта 4-аргументальная нотация примерно такая же быстрорастущая, как цепная нотация стрел. Однако мы едва коснулись поверхности BEAF!
Линейная нотация массива[]
Операторная нотация начинает трещать по швам. Более простой способ записать — . Наша новая запись:
если
если
Единицы считаются значениями по умолчанию, поэтому мы можем отсечь конец массива, если он состоит только из единиц. Например, можно просто записать .
Мы можем несколько упростить правила 2 и 3, полагаясь на их рекурсивную природу:
Но вы заметите проблему с этим рефакторингом. Мы указали индуктивное правило, но не базовый случай, поэтому в обоих случаях будет уменьшаться вечно! Мы приводим правило, объясняющее, что происходит, когда достигает :
Этот шаг очень важен для определения BEAF. Если вам это непонятно, попробуйте решить это на бумаге.
Пять записей и более[]
Давайте подведем итоги и рассмотрим наш текущий набор правил:
,
,
С нашим новым упрощением, в последних двух примерах едва заметна закономерность. Вооружившись этими знаниями, мы попытаемся добавить пятую запись:
,
,
,
Добавление пятой записи было, к счастью, простым. Мы можем продолжить шаблон и добавить шестую:
,
,
,
,
Мы должны обобщить это на произвольное количество членов. Чтобы сделать это кратким, мы введём некоторую терминологию. Первая запись — база, а вторая — штрих. После штриха первая не-1 запись — пилот; запись непосредственно перед ней — второй пилот, а все записи до этих — пассажиры. Значение массива записывается как . Используя эти термины, мы можем полностью описать линейную нотацию массива.
Линейная нотация массива
Пусть будет базой, а — штрихом.
Основное правило. Если пилота нет (то есть все записи после штриха равны 1), то .
Правило штриха. Если штрих равен 1, то .
Катастрофическое правило. В противном случае...
Заменить второго пилота копией исходного массива, но с штрихом, уменьшенным на единицу.
Уменьшить значение пилота на 1.
Переместить всех пассажиров в .
(конец определения)
Это воссоздание классической нотации массива Бауэрса, описанной около 2002 года. В оригинале использовалось пять правил, но нам удалось сократить его до трёх в соответствии с современным BEAF.
Примеры[]
Теперь мы полностью решили линейные массивы и приведём несколько примеров, чтобы получить более наглядное представление.
Если все записи в массиве одинаковы, мы можем преобразовать его в более простой массив более высокого порядка:
Три записи преобразуются в четыре:
и так далее.
Четыре записи преобразуются в пять:
Пять записей преобразуются в шесть:
В общем случае, , с b-1 слоями.
Мультиразмерные массивы[]
Мы введём новый оператор, "массив b из a":
Эта функция диагонализирует всё, что мы сделали до сих пор. Это довольно большая функция; если вы знакомы с быстрорастущей иерархией, то примерно на уровне .
Чтобы продолжить расширять нотацию массива, нам нужно немного поработать над интуицией. смутно напоминает , поэтому давайте запишем "нотацию массива второго порядка" с изменённым базовым правилом:
Базовое правило. Если пилота нет (то есть все записи после штриха равны 1), то .
Чтобы обозначить нотацию массива второго порядка, мы поместим после массива нижний индекс 2: . Помимо этого базового правила, другие правила нотации массива остаются неизменными, поэтому у нас по-прежнему есть и так далее. Мы могли бы также сделать 3, пока мы в нём. Определим и заменим на в базовом правиле выше. Бам, нотация массива третьего порядка.
Отсюда расширение должно быть очевидным и немного скучным. Давайте обобщим и создадим новый набор правил с в качестве порядка:
Базовое правило. Если пилота нет и , то .
Правило порядка. Если пилота нет и , то .
Основное правило и катастрофическое правило остаются неизменными.
Итак, как мы можем максимально использовать преимущества этого расширения? Позволяя быть значением массива:
Чёрт, почему бы не вложить его раз?
(где каждый массив имеет записей)
Мы будем использовать , чтобы записать это, что позволит нам определить "нотацию порядка 1,2". (Хммм... почему "1,2"?) Далее следует , что просто . Мы можем индуктивно определить порядок n,2 таким же образом, как мы определили порядок n.
Теперь для 1,3:
и в общем случае 1,n для n > 1:
Пока что неплохо. А как насчёт 1,1,2? Отсюда видно, что принимает несколько записей и может начать отражать способ работы обычных массивов. Находим первую запись, не равную 1, в , называем её "порядковый пилот", заменяем "второй порядковый пилот" копией массива с простым числом, уменьшенным на 1, уменьшаем порядковый пилот и устанавливаем первые записи в .
Но зачем нам вообще разделять пилот и порядковый пилот? Нам нужно заботиться о порядке только тогда, когда массив представляет собой только основание и простое число, как в . Решающим шагом здесь является утверждение, что является частью массива, и, следовательно, порядковый пилот является пилотом.
Давайте изменим нашу запись, чтобы поместить в фигурные скобки. Увлечение Бауэрса более высокими измерениями привело его к тому, что он поместил во вторую строку, например:
В строке мы запишем это как , где (1) обозначает разрыв между строками. Опять же, каждая строка автоматически заполняется (счётно) бесконечным числом единиц, поэтому этот массив идентичен или .
Давайте попробуем наше новое расширение на две строки для существующего набора правил, скажем, . Сразу же мы видим, что второго пилота нет! Нам нужно будет пересмотреть правила, чтобы учесть случаи отсутствия второго пилота. Здесь возникает менее тривиальная проблема:
Проблема в бесконечном количестве b в первой строке; нам нужно только p из них. Наше текущее определение "пассажиров" сломало нашу систему, поэтому мы также исправим его. Вкратце:
база — первая запись.
штрих — вторая запись.
пилот — первая запись, не равная 1, после штриха.
второй пилот — запись, которая находится непосредственно перед пилотом. Она может отсутствовать, если пилот находится в начале второй строки.
предыдущая запись — запись, которая находится перед другой, которая всё ещё находится в той же строке. (Так, в , — предыдущая запись для , но и — нет.)
простой блок строки — первые записей этой строки.
самолёт — пилот и все предыдущие записи. Если пилот находится во второй строке, самолёт также включает основной блок предыдущей строки.
пассажиры — все записи в самолете, за исключением пилота и второго пилота (если он есть).
В остальном правила такие же, как и в линейной нотации массива. Никакого "правила порядка" не требуется, поскольку то, что мы изначально называли порядком, теперь является частью массива.
Вот краткий пример:
Больше строк[]
Наименьший нетривиальный массив из трёх строк — , где вторая строка состоит только из единиц. Как и следовало ожидать, это равно с элементами в строке. Пилот теперь переместился в третью строку, и мы можем ввести второго пилота, как в . Более трёх строк ведут себя примерно одинаково, поэтому давайте воспользуемся возможностью обобщить.
Нам нужно будет снова изменить наше определение самолёта:
самолёт — пилот, все предыдущие записи и основные блоки всех предыдущих строк.
Когда пилот находится в первой строке, предыдущих строк нет, а самолёт — только предыдущие записи. Это решает проблему уродливого условного оператора в нашем предыдущем самолёте.
Теперь мы полностью определили нотацию массива в плоскости. Так что же там за строкой?
Три измерения[]
Плоскость. Мы будем использовать разделитель (2) для обозначения плоскостного разрыва. Наименьший двухплоскостной массив — или массив из . (Мы также можем записать это как , подробнее об этом позже.) В конце концов мы достигнем нескольких плоскостей, которые в значительной степени решаются так, как и ожидалось.
Давайте определим это формально. Чтобы помочь в обобщении, нам нужно ввести несколько более абстрактных терминов. Один из них — структура, которая является либо записью, либо строкой, либо плоскостью. Теперь мы дадим общее определение простым блокам структур.
Простым блоком строки являются первые записей, а простым блоком плоскости является первый квадрат записей (или простые блоки первых строк).
Предыдущая запись для X — запись перед X в той же строке. Предыдущая строка для X — строка перед X в той же плоскости.
Самолёт — пилот, все предыдущие записи и простые блоки всех предыдущих структур.
Внимательно изучите последнее определение, потому что это основная часть того, как работает BEAF.
Четыре и более[]
Бесконечная линия плоскостей или трёхмерное пространство, по Бауэрсу, является областью. Четырёхмерное пространство — флюна. Символы для обозначения разрывов в областях и флюнах — (3) и (4) соответственно.
Обычно (n) обозначает разрыв в следующее n-мерное пространство. Запятая — сокращение от (0), поскольку запись — 0-мерное пространство. "Структура" — любое n-мерное пространство; мы будем обозначать nD структуру как .
Давайте пересмотрим наши определения "структуры", "простого блока", "предыдущей структуры" и "самолёта".
Структура — запись, строка, плоскость, область, флюна, 5-пространство, ... индуктивно это определяется как запись или бесконечный ряд структур.
Первичный блок строки — первые записей; первичный блок плоскости — первый квадрат; первичный блок области — первый куб и т. д. Индуктивно первичный блок строки — первые записей, а первичный блок структуры — первичные блоки первых -структур.
Предыдущая структура для A — перед A в той же структуре. В частности, предыдущая запись в A — запись перед A в той же строке, предыдущая строка в A — строка перед A в той же плоскости и т.д.
Самолёт — пилот, все предыдущие записи и простые блоки всех предыдущих структур.
До сих пор мы полностью определили нотацию размерного массива. Повтор с полными правилами:
Нотация размерного массива
Определения:
база — первая запись.
штрих — вторая запись.
пилот — первая не-1 запись после штриха.
второй пилот — запись непосредственно перед пилотом. Она может отсутствовать, если пилот находится в начале строки.
структура — это запись, строка, плоскость, область, поток, 5-пространство, ... Индуктивно это определяется как запись или бесконечная строка структур.
первичный блок строки — первые записей; первичный блок плоскости — первый квадрат; первичный блок области — первый куб и т.д. Индуктивно первичный блок строки — первые записей, а первичный блок структуры — первичные блоки первых -структур.
предыдущая структура для A — перед A в той же структуре. В частности, предыдущая запись в A — запись перед A в той же строке, предыдущая строка в A — строка перед A в том же самолёте и т.д.
самолёт — пилот, все предыдущие записи и простые блоки всех предыдущих структур.
пассажиры — все записи в самолёте, за исключением пилота и второго пилота (если он есть).
Правила:
Базовое правило. Если пилота нет (то есть все записи после штриха равны 1), то .
Правило штриха. Если штрих равен 1, то .
Катастрофическое правило. В противном случае...
Если второй пилот существует, замените второго пилота копией исходного массива, но с штрихом, уменьшенным на единицу.
Уменьшаем значение пилота на 1.
Заменяем всех пассажиров на .
(конец определения)
Ух ты! Это "расширенная нотация массива", разработанная Бердом и Бауэрсом. В оригинале использовалось семь правил, но мы применили современное определение BEAF, чтобы немного упростить его.
Массив или оператор[]
Оператор массива, обозначаемый как & (не путать с логическим оператором "и") возвращает массив, назначенный структуре слева от &, заполненный числом записей справа от &. Что это за структуры? Первые структуры — числа, и . Структура над числами, так называемая X-структура, должна быть оценена как m. Итак, .
Если мы хотим указать другое число, мы можем заключить его в скобки: . Эта нотация не использовалась самим Бауэрсом.
Структуры над числами X — X+1,X+2,X+3,...,2X,2X+1,2X+2,2X+3,...,3X,4X,..., и т. д. X+m можно рассматривать как строку записей с m записями под ней, 2X — как две строки, 3X — как три строки, nX+m — как n строк записей с m записями под ней. Вот некоторые соответствия между нашими обозначениями выше и "массивом":
Как можно видеть, последние три примера можно упростить до и соответственно. Здесь последняя "2" находится в следующей плоскости и отмечает начало трёхмерных массивов. К счастью, нам не нужно рисовать многомерные массивы в их естественном виде. Главным ключом к нему является использование полиномиальной формы: выражение означает, что его массив образован секциями (m-мерный массив b), затем секциями , затем секциями и т. д. Общее количество записей можно найти, заменив каждый X на p и решив как обычный полином. Например, имеет записей.
Тетрационные массивы[]
До сих пор у нас была система на уровне для тех, кто знаком с БРИ. Следующий шаг не совсем очевиден, но он имеет решающее значение для продолжения системы.
Что это вообще значит? Это структура , а первичный блок структуры — структура или гиперкуб . Итак, это квадрат 2 на 2, или куб 3 на 3 на 3, или тессеракт 4 на 4 на 4 на 4 и т. д. Когда мы на самом деле решаем массив, мы можем заменить (0, 1) на (p) — например, .
Техническое примечание: пространство, описываемое структурой , называется размерной группой. В размерной группе каждая координата описывается строкой координат (тип порядка ), а не фиксированным конечным числом.
Это структура ; его основной блок — . Обычно разделитель создаёт структуру . Это строка размерных групп.
Массивы линейных разделителей могут описывать всё возможные , где — многочлен от . (Здесь и далее в статье мы ограничиваем "полином" неотрицательными целыми коэффициентами.) Они делают это, предоставляя список коэффициентов от степени 0 до:
описывает структуру типа
Так, например, (0, 0, 1) описывает (размерную группу), а (1, 0, 6, 1) описывает . Вы заметите, что теперь по умолчанию используются нули, а не единицы; это одно из самых раздражающих свойств BEAF.
Конечно, у нас нет причин останавливаться на линейных массивах для разделителей. Эта структура — , суперразмерная группа. (Векторы в суперразмерной группе имеют тип порядка .) В общем случае для второй строки,
описывает структуру типа .
Третья строка ((1)(1)1) описывает (нет, мы ещё не достигли !), а (n + 1)-я строка описывает . Вторая плоскость ((2)1) — , вторая область ((3)1) — это и так далее и тому подобное. Наконец, мы достигаем во второй размерной группе, ((0, 1) 1). Внутренняя пара скобок описывает многочлен в , а внешняя пара описывает .
Это .
описывает
описывает
описывает
и т. д.
Пределом всего этого является структура . Если мы остановимся здесь, то получим тетрационную запись массива.
Попытка определения[]
Бауэрс никогда не удосужился формализовать тетрациональные массивы, но мы попробуем. Единственное, что нас сдерживает сейчас, — определение простых блоков, которое специально предназначено только для размерных массивов. Давайте рассмотрим наше текущее индуктивное определение:
Простой блок записи — запись.
Простой блок структуры — простые блоки её первых -структур.
(Здесь есть небольшое изменение, но можно увидеть, что оно имеет минимальный эффект.) Это определение не говорит, что происходит, когда наша структура является структурой , потому что это не структура вида .
Давайте попробуем расширить это определение, чтобы разрешить все для полиномов степени 1 .
Первичный блок записи — запись.
Первичный блок структуры — первичные блоки её первых -структур, где — полином от .
Первичный блок структуры — первичный блок её первой -структуры.
Это ломается в , как и ожидалось, но здесь прослеживается закономерность.
Первичный блок записи — запись.
Первичный блок структуры — первичные блоки её первых -структур, где — полином от .
Первичный блок структуры является первичным блоком её первой -структуры.
Первичный блок структуры является первичным блоком её первой -структуры.
Первичный блок структуры является первичным блоком её первой -структуры.
В общем случае первичный блок структуры является первичным блоком её первой -структуры.
Это работает до . При таком раскладе мы никогда не доберемся до !
Вторая попытка[]
Давайте обобщим понятие "структура", чтобы помочь нашему определению.
— структура.
Если — структура, то — также структура.
Если и — структуры, то — также структура.
Это допускает такие вещи, как и , и работает вплоть до нашего предела . Кроме того, давайте определим предельную структуру как одну из форм для или для и , являющихся предельными структурами, и структуру-последователя как одну из форм .
Теперь для структуры и натурального числа мы рекурсивно определим простой блок :
и
тогда и только тогда, когда является предельной структурой.
где — наименьшее
и
Если вы запутались, пропустите это. Всё, что вам нужно, — интуитивное представление о том, как это работает.
Остался один последний шаг. Обратите внимание, как мы использовали слово "наименьший" в определении выше, но структуры — не числа, и мы ещё не определили порядок. Это просто:
тогда и только тогда, когда
тогда и только тогда, когда
И мы закончили! Тетрационные массивы.
Но можем ли мы сделать это проще?
Как ординалы (передовое)[]
Некоторые из наших более опытных читателей могут заметить параллели с ординальными иерархиями. функционирует во многом как , а наше определение простого блока похоже на определение иерархии Вайнера — мы выбрали нотацию не просто так. Мы разработали нотацию для ординалов до , что также является сильной стороной BEAF до этого момента. Кажется разумным переписать нашу нотацию с использованием ординалов, и мы так сделаем.
Мы определим массив как функцию , где количество выходов больше 1 конечно. (Это предотвращает бесконечные массивы типа {6, 6, 6, ...}.) Пусть , , (позиция пилота) и (позиция второго пилота).
Определим простой блок :
если — предельный ординал
(Это очень похоже на медленнорастущую иерархию.) Определим пассажиров как .
И три правила:
Основное правило. Если не существует, .
Правило штриха. Если , .
Катастрофическое правило. Определим как со следующими изменениями:
Определим как , но с .
Если существует, .
.
для .
.
Хотя это и менее доступно, это гораздо более простое определение, чем выше!
Ещё одно; давайте определим некоторые фундаментальные последовательности для ординалов ниже .
для предельных ординалов
где
Обратите внимание, что эта система плохо определена и используется только для грубого наброска поведения. Мы добавили определение , чтобы гарантировать, что мы правильно отражаем иерархию Бауэрса. Действительно, после фундаментальные последовательности немного отклоняются от обычных.
Пентационные массивы[]
Пентационные массивы — своего рода взрыв мозга. Но самое худшее, что до сих пор не придумано никаких нотаций для их поддержки! Бауэрс так и не потрудился составить их; он просто использовал оператор массива.
Помните оператор массива?
Мы оставили его позади в эпоху однострочных массивов. Оказывается, у & есть расширение, которое позволяет использовать его за пределами этого уровня.
Нетрудно увидеть, что правая часть — массив a на a из b или массив a2 из b. Обратите внимание, что выражение "" не должно быть решено первым; скорее, это план для измерений массива.
В общем случае оператор массива позволяет нам указывать много измерений и даже тетрационные массивы, такие как этот:
Для тех, кто понял ординальное определение выше, мы можем формально определить .
Наименьший пентационный массив:
Для этого массива нет обозначения (структура ), но его, безусловно, можно определить с помощью ординалов, где с использованием фундаментальной последовательности . Мы на минутку извинимся перед читателями, которые ещё не поняли ординалы. Перейдите сразу к легиональным массивам, если вы один из них.
На этом этапе вы можете задаться вопросом, что такое , но мы не можем перейти к этому, пока не определим или фундаментальную последовательность "". Наше текущее намерение над ординалами, которое плохо определено из-за отсутствия фиксированного определения, сделало бы , поэтому нам нужно это исправить.
Если мы можем изменить наше определение на , мы можем ясно видеть, что является неподвижной точкой функции .
Если мы можем определить таким образом, то было бы естественно ожидать, что должна быть следующей неподвижной точкой, т. е. . Одно особенно ясное определение — предел , так почему бы не сделать ? Сначала это кажется немного странным, так как в общем случае . Ординалы работают загадочным образом.
Следующая неподвижная точка — , и в общем случае для конечного . Понятно, что предел всех этих массивов равен .
Бла-бла-бла. Ничего особенно интересного здесь нет, пока и . Тройные стрелки весьма многообещающие, и действительно предел всего этого - . Бум. Готово.
Формальное определение[]
Хорошие новости: формализация этого процесса сводится всего лишь к определению некоторых функций над порядковыми числами и фундаментальными последовательностями, которые они создают. Стрелочная нотация не является частью стандартной порядковой арифметики, поэтому нам придется определить ее самостоятельно:
для
для предельных порядковых чисел
для
Обратите внимание, что этот гипероператор и система фундаментальных последовательностей все еще плохо определены, и, следовательно, не дают никакого формального определения вообще. Мы просто грубо объясняем, как определить нужный оператор для удобства читателя.
Дальнейшие массивы, предшествующие легиональным[]
Мы закончили последний раздел с помощью . Мы также можем написать , и что мешает нам определить ? Или ? Или ?
Единственным препятствием является формальность: нам нужно определить BEAF для ординалов. Начнём со стрелочной нотации для конечного числа стрелок:
для
для предельных ординалов
для
Нетрудно заметить, что ординальная стрелочная нотация похожа на функцию Веблена, а различия в основном заключаются в фундаментальных иерархиях. Аналогично функции Веблена, перечисляет неподвижные точки .
Уже само это определение слегка раздражает из-за огромного количества правил. В любом случае, давайте попробуем :
Обратите внимание, что . Наш существующий фреймворк работает для последующих ординалов , но здесь нам нужны некоторые ограничения:
Собираем всё вместе:
для
для
для предельных порядковых чисел
для предельных порядковых чисел
для предельных ординалов
для предельных ординалов
Это определение работает нормально, но последние две пары правил имеют идентичные условия. В случае мы бы предпочли , поэтому если и являются предельными ординалами, мы должны сначала сосредоточиться на .
А пока давайте запишем это как трёхэлементную нотацию массива. Это обычная трёхэлементная нотация с некоторыми предельными ординальными случаями. Для упрощения мы не позволим ни одной записи быть равной 0, как в обычной нотации массива.
для
для
для
для
для
для
Где — класс всех предельных ординалов.
Мы также можем удалить четвёртое и пятое правила, если определим их как пределы шестого и седьмого правил соответственно.
Теперь для четырёх записей:
для
для
для
Отсюда легко сделать обобщение.
Линейная ординальная нотация массива
Определения не изменяются, первая запись — основание , вторая запись — штрих , первая запись, не равная 1, после штриха — пилот, запись перед ним — второй пилот, а пассажиры — все записи до второго пилота. Кроме того, мы определим ограничитель как последний предельный ординал после основания; он может не существовать, если есть только последующие ординалы от штриха.
Все записи находятся между нулём и включительно.
Основное правило. Если пилота нет, .
Правило штриха. Если , .
Катастрофическое правило. Если ограничителя нет и ...
Заменить второго пилота копией массива с штрихом, уменьшенным на 1.
Уменьшить пилота на 1. (Пилот должен быть последовательным ординалом или конечным кардиналом, иначе будет ограничитель.)
Заменить всех пассажиров на .
Бесконечное катастрофическое правило. Если ограничителя нет и ...
Заменить базу копией массива с штрихом, уменьшенным на 1. (Первым числом должен быть последовательный ординал, иначе будет ограничитель.)
Установить штрих в исходное значение .
Правило предела. Иначе...
Пусть будет значением массива с ограничителем, измененным на .
.
(конец определения)
Конечно, у нас нет причин останавливаться на линейных массивах. Наш тетрационный BEAF легко расширяется до ординалов; нам просто нужно добавить правило предела и расширить область с до , первого ординала без фундаментальной последовательности со счётной длиной. Мы запретим себе просто вставлять любой большой счётный ординал, поскольку мы строим с нуля и используем BEAF для определения ординалов по мере продвижения.
Кстати, какие ординалы мы определили? Довольно много.
(расширяющиеся массивы)
(относительно функции Бухгольца)
(также относительно функции Бухгольца)
(то же самое)
Пределом нашей нотации на данный момент является , то есть ординал Бухгольца. Это настоящее достижение!
Легиональные массивы[]
Спасибо вам, неординальные читатели, за то, что ждали так долго! До сих пор у нас было то, что можно было бы назвать "BEAF, предшествующим легионам". Бауэрс называл всё до этого момента "L-пространством".
Мы снова воскрешаем массив оператора &. По мере того, как наши нотации становятся всё более и более быстрорастущими, также становится и &: к настоящему времени у нас есть хорошее определение для таких вещей, как {3, 3, 3}&3 (триакулус), пентационный массив. Оператор массива всегда сможет диагонализировать наши самые быстрорастущие нотации.
Обратите внимание, что мы также можем записать триакулус как (3&3)&3, и мы сделаем оператор левоассоциативным, чтобы избавиться от скобок, как в 3&3&3. Это естественным образом создаёт оператор, b♦p = b&b&...&b&bp раз. Этот оператор выражает предел BEAF до легионов; это самая мощная функция, которую мы определили до сих пор. Обратите внимание, что ♦ не использовался самим Бауэрсом.
немного напоминает нам , поэтому давайте воспользуемся тем же трюком, который мы использовали в двухстрочных массивах. Мы можем сделать этот "BEAF, предшествующий легионам, второго порядка", переопределив базовое правило как .
Как мы делали с двухстрочной нотацией массива, мы могли бы продолжать расширять более высокий порядок BEAF, предшествующего легионам, пока нам не понадобится объединить порядок в массив. Мы перейдём к сути и немедленно поместим порядок в массив.
Разделитель слэш обозначает новый тип пространства, называемый пространством легиона. Пилот 2 находится во втором легионе, так же, как мы переместили пилота во вторую строку в нотации массива в плоскости. Первичный блок легиона — , например, .
Легионы образуют большее пространство, чем ряды, плоскости или любая структура, которую мы определили до сих пор, поэтому мы можем поместить несколько записей во второй легион.
Мы также можем добавить более двух легионов...
с легионами
где легионы образуют структуру
...а сами легионы могут принимать размерные структуры любой размерности.
Другое обозначение для — , или p легионарных массив b. Аналогично, , поэтому оператор && работает аналогично &, но с легионами вместо записей. Мы будем использовать b♦♦p для обозначения b&&b&&..&&b&&b p раз, и мы введём "легион-легиональный пробел" с помощью разделителя .
Расширение простое.
Почему бы не дать легионам многомерную структуру? Проблема в том, что нам нужно это определить. Пусть L будет структурой легиона, которая больше всех структур до, но не включая легионы. (Таким образом, L является легионом в том же смысле, что X является строкой.) Мы могли бы сказать, что L = {X, X / 2}, но это неудобное определение. В любом случае, первичный блок легиона — .
Два легиона — структура , ряд легионов — структура , легион легиональный // — структура . Отсюда мы можем поместить L в массив так же, как мы писали такие вещи, как {X, X, X}. Мы можем написать или или . К сожалению, к настоящему времени у нас нет нотаций для разделителей, но Бауэрс предоставил (скажем), чтобы обозначить структуру , решённую с b в качестве основания и p в качестве штриха.
Мы продолжаем создавать из L во всё большие и большие массивы, пока не достигнем ориентира , или лугионального пространства. Бауэрс также записывает этот с помощью разделителя \ и оператора @, или a леггиатического массива b.
Формализация[]
Мы быстро догоним легиональную нотацию массива с ординалами. Во-первых, мы заметим, что оператор массива состоит из трех частей: основания, штриха и типа структуры. Например, имеет основание 4, штрих 3 и тип структуры X, а имеет основание 5, штрих 3 и тип структуры . Небольшое злоупотребление Бауэрсом обозначениями можно исправить с помощью оператора массива с тремя аргументами:
То есть основание , штрих и число 2 в позиции . Обычно является предельным ординалом, но наша новая функция допускает любой .
Ординал для пространства легионов равен , а его фундаментальная последовательность равна , и так далее. Это определяет основной блок структуры , как определённый ранее.