Аллигаторы и их яйца

Материал из свободной русской энциклопедии «Традиция»
Перейти к навигации Перейти к поиску
AnhE Title.png

Материалы[править | править код]

Шаг 1: Распечатайте этот PDF-файл на шести или более листах цветной бумаги разных цветов.

Materials 1.png

Шаг 2: Распечатайте этот PDF-файл на нескольких листах обычной бумаги.

Materials 2.png

Шаг 3: Вырежьте из бумаги все напечатанные элементы игры!

Materials 3.png

Правила[править | править код]

Элементы игры[править | править код]

Вот голодные аллигаторы:

Pieces 1.png

Голодные аллигаторы голодны. Они пожирают всё, что находится перед ними! Но они также являются весьма ответственными, поэтому они всегда охраняют свои семьи.

Это старые аллигаторы:

Pieces 2.png

Старые аллигаторы не голодны. Они уже достаточно поели на своём веку. Всё, что они делают, так это охраняют свои семьи.

А это яйца:

Pieces 3.png

Из яиц вылупляются новые семьи аллигаторов!

Семьи аллигаторов[править | править код]

Вот маленькая семья аллигаторов:

Families 1.png

Зелёный аллигатор охраняет зелёное яйцо.

А вот семья аллигаторов чуточку побольше:

Families 2.png

Зелёный аллигатор и красный аллигатор охраняют зелёное и красное яйцо. Или можно сказать иначе: зелёный аллигатор охраняет красного аллигатора, красный аллигатор охраняет яйца.

Вот огромная семья!

Families 3.png

У нас здесь живут жёлтый, зелёный и красный аллигаторы, которые охраняют свою семью. Они охраняют три вещи: зелёное яйцо, старого аллигатора и красное яйцо. Старый аллигатор охраняет жёлтое яйцо и зелёное яйцо.

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

Пожирание[править | править код]

Теперь поговорим о вещах, которые не очень приятны. Вот две семьи друг около друга:

Eating 1.png

Зелёный аллигатор действительно очень голоден. А перед его ртом находится семья жёлтых аллигаторов, которая выглядит очень аппетитно!

Eating 2.png

Я думаю, что Вы предполагаете, что произойдёт далее.

Eating 3.png

К сожалению, глаза зелёного аллигатора видят больше, чем может поглотить его желудок. Он съел так много!

Eating 4.png

Итак он умер и перенёсся в рай для аллигаторов. Но история на этом не заканчивается. Из-за того, что зелёный аллигатор умер его зелёное яйцо начинает вылупляться...

Eating 5.png

Чудесным образом из него вылупилось как раз то, что зелёный аллигатор съел. Это же чудо самой жизни!

Eating 6.png

Теперь можно спуститься на одну семью вниз. У нас есть красный аллигатор, который охраняет жёлтого аллигатора и красное яйцо. Жёлтый же аллигатор охраняет своё жёлтое яйцо.

Но жёлтый же аллигатор голоден, а перед ним лежит красное яйцо. И всё начинается сначала…

Eating 7.png

Бедный аллигатор. Даже одно яйцо — это слишком много для его желудка!

Eating 8.png

Жёлтый аллигатор умирает… Но опять, жёлтое яйцо начинает вылупляться…

Eating 9.png

И из него вылупилось как раз то, что съел жёлтый аллигатор!

Eating 10.png

Теперь нет ничего, что можно было бы скушать, а потому процесс останавливается.

Правило пожирания[править | править код]

Это был пример первого правила игры: правила пожирания.

Правило пожирания гласит, что если семьи аллигаторов находятся друг около друга…

Eatingrule 1.png

Самый крайний левый аллигатор наверху пожирает семью, которая находится перед ним.

Eatingrule 2.png

После этого аллигатор умирает. Но если он охранял яйца такого же цвета, как и он сам, из всех (именно так — из каждого) вылупляется то, что аллигатор съел.

Eatingrule 3.png

Правило замены цветов[править | править код]

Продолжим рассматривать вышеприведённый пример — оранжевый аллигатор пожирает жёлтую семью, оставляя после себя:

Eatingrule 4.png

Теперь зелёный аллигатор в верхнем левом углу хочет пожрать семью, которая находится перед ним. Но перед тем, как он сделает это, необходимо рассмотреть правило замены цветов.

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

На картинке выше зелёный и красный цвета имеются в первой и второй семье. Поэтому во второй семье оба этих цвета необходимо заменить. Пусть, к примеру, зелёный будет заменён на голубой, а красный на синий.

Colorrule 1.png

Теперь, когда нет совпадений цветов, можно продолжить пожирание!

Colorrule 2.png

И далее!

Colorrule 3.png

И ещё далее!

Colorrule 4.png

И опять, пока не останется ничего, что можно было бы скушать.

Colorrule 5.png

Старые аллигаторы[править | править код]

Имеется ещё одно правило в этой игре, и оно касается старых аллигаторов:

Old 1.png

На этой картинке самый верхний левый аллигатор не голоден. Он не собирается что-либо пожрать. Всё, что он делает, так это охраняет свою семью. Когда он умрёт?

Он умрёт тогда, когда он будет охранять только одну вещь. Как раз сейчас он охраняет две семьи — зелёную и красную. Обе нуждаются в том, чтобы о них кто-то заботился. Но зелёный аллигатор голоден. Поэтому он съедает красную семью…

Old 2.png

Теперь старый аллигатор охраняет только одну семью. Эта семья может сама о себе позаботиться. Старый аллигатор больше н нужен, поэтому он состаривается и умирает.

Old 3.png

Это правило старения. Если старый аллигатор охраняет только одну вещь, он умирает.

Old 4.png

Теперь красный аллигатор пожирает жёлтую семью, и не остаётся ничего, что можно было бы скушать.

Old 5.png

Игра[править | править код]

Игра состоит из серии задачек, которые заставляют игрока скармливать аллигаторам нечто, чтобы получить что-то новое. Например:

Вот две семьи. Они называются «True» и «False»:

Gameplay 1.png

А вот семья, которая называется «Not»:

Gameplay 2.png

Когда «Not» пожирает «True», она оставляет после себя «False». А когда «Not» пожирает «False», она оставляет после себя «True». Какими цветами должны быть раскрашены два яйца в самом низу семьи «Not»?

Для того, чтобы решить эту задачу успешно, нам надо улучшить правило замены цветов, чтобы оно гласило, что семьи разных цветов, но одинаковой конфигурации эквивалентны.

Эти задачки можно объединять в рассказы. Игрок должен будет решить каждую задачку для того, чтобы увидеть, что произойдёт далее. В альтернативном варианте всё это можно сделать в виде настольной игры. Каждый игрок бросает кость, ходит на несколько шагов и решает задачку на поле, на которое попал.

Теория[править | править код]

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

Варианты[править | править код]

Оливер Стил указал, что роль семьи в жизни ребёнка очень велика, и можно было бы найти применение понятиям дедушек и бабушек, родителей, детей (яиц) и т. д. На текущий момент имена переменных представляются цветами. И то, и другое назначаются произвольно, а потому требуют правило замены имён/цветов для избежания коллизий. В качестве альтернативы можно использовать что-то вроде индексов де Брюйна, что может соответствовать порядку рождения в семье.

Оливер также указал, что детям может не понравиться идея о том, что родители умирают, а потому убирание аллигатора может быть объяснено тем, что он ушёл.

Изменяя игру таким образом, что аллигаторы голодны, а потому кушают всё, что находится перед ними, мы показываем правоассоциативное λ-исчисление. Это помогает убрать множество лишних скобок (старых аллигаторов) в нумералах Чёрча, комбинаторе неподвижной точки Y и т. д. К сожалению, среди прочих проблем это предполагает и то, что старый аллигатор должен нарождаться, если голодный аллигатор съел больше, чем одну вещь. Я ещё буду думать над тем, как сделать так, чтобы нумералы Чёрча (повторяющиеся применения) выглядели бы менее уродливо.

Схематичная форма[править | править код]

Я нашёл, что схематичная форма «исчисления аллигаторов» весьма помогает вручную вычислять λ-термы. Мы рисуем λ-абстракцию в виде линии с открытым ртом. Скобки обозначаются простой линией. Вот, к примеру, функция тождества:

Schematic 1.png

Вот несколько нумералов Чёрча:

Schematic 2.png

Вот булевские функции конъюнкции и дизъюнкции (предполагающие стандартные определения значений истинности):

Schematic 3.png

Комбинатор Y:

Schematic 4.png

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

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