Dark Magus ([info]_darkus_) wrote,
@ 2007-06-05 19:20:00
Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Entry tags:ФП

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

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

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

Поэтому предлагаю конкурс — кто предложит наиболее адекватную модель, схожую с предложенной, чтобы она была логична для детей дошкольного и младшего школьного возраста, и чтобы она не была травмирующей с точки зрения психологического воздействия. У меня самого́ есть две идеи, но они мне не очень нравятся...



(Post a new comment)

например
[info]grey_one
2007-06-06 07:07 am UTC (link)
Аллигаторы --> Воздухоплаватели
Яйца --> Воздушные шарики
Семьи --> Клубы воздухоплавателей

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


Поедание --> Воздухоплаватель не может сам отвязать свой шарик, он просит об этом того, кто стоит перед ним (т.е. справа).
Вылупление --> Тот, кто отвязал шарик - со своим шариком становится на место улетевшего шарика.

(Reply to this)(Thread)

Re: например
[info]_darkus_
2007-06-06 07:37 am UTC (link)
Прекрасно! Весьма интересная модель.

(Reply to this)(Parent)(Thread)

Re: например
[info]grey_one
2007-06-06 09:06 am UTC (link)
Старый аллигатор - координатор полёта, смотрит за тем чтобы в воздухе никто не столкнулся. Он уходит, когда под его опёкой остаётся только один клуб где летуны сами договорятся как им взлетать.

(Reply to this)(Parent)

Например 2
[info]grey_one
2007-06-06 09:02 am UTC (link)
Аллигаторы --> Гномы
Яйца --> Пироги
Семьи --> сотрудники кондитерского комбината

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


Поедание --> Гном угощает пирогом того, кто стоит перед ним (т.е. справа) и идёт делать новый пирог.
Вылупление --> Тот, кто поел пирог - со своим пирогом становится на место съеденного пирога.

(Reply to this)(Thread)

Re: Например 2
[info]grey_one
2007-06-06 09:12 am UTC (link)
Старый аллигатор - гном шэф-повар, смотрит за тем, чтобы гномы на кондитерском комбинате случайно не перепутали пироги. Он уходит, когда под его опёкой остаётся только один комбинат где гномы сами проследят за пирогами.

(Reply to this)(Parent)(Thread)

Re: Например 2
[info]_darkus_
2007-06-06 09:13 am UTC (link)
Я рукоплещу!

(Reply to this)(Parent)

Re: Например 2
[info]lomeo
2007-06-06 10:05 am UTC (link)
там прикол в том, что после того как гном уходит, тот что съел не то чтобы становится на место съеденного, он может стать на место съеденных, т.е. размножиться - как это объяснить.

та же претензия к первому примеру и частично третьему.

(Reply to this)(Parent)(Thread)

Re: Например 2
[info]grey_one
2007-06-06 11:13 am UTC (link)
тогда третий вариант хорош тем, что рассад несколько. хотя как количество человек увеличить - это вопрос. подумаю.

(Reply to this)(Parent)(Thread)

Re: Например 2
[info]lomeo
2007-06-06 11:20 am UTC (link)
Да, там какой то одноразовый копир (множитель? дубликатор?) нужен.

(Reply to this)(Parent)(Thread)

Re: Например 2
[info]grey_one
2007-06-07 09:30 am UTC (link)
На ночь глядя в голову пришло такое:

Аллигаторы --> Пластилиновые человечки
Яйца --> Кусочки пластилина
Семьи --> Группы пластилиновых человечков

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


Поедание --> П.ч. приглашает поиграть того (тех), кто стоит перед ним (т.е. справа) и они уходят.
Вылупление --> Приглашённый(-ные) п.ч. - вылепливает из кучек приглашающего свои копии.

Старый аллигатор --> Любопытный п.ч. Он стоит и смотрит кто же с кем пойдёт играть в волейбол. Когда под его присмотром остаётся только одна група п.ч. ему становитсяч не интересно и он уходит играть к уже ушедшим.

Также можно рассмотреть вариант с мыльными пузырями - они тоже вроде размножаются нормально. Можно ввести природу типа тучки и капельки, или что-то подобное.

(Reply to this)(Parent)(Thread)

Re: Например 2
[info]lomeo
2007-06-07 10:01 am UTC (link)
Чудесно! Особенно понравилось объяснение "чтобы его кучка не лежала никому ненужная". Это, по моему именно то, что надо детям.

(Reply to this)(Parent)

Re: Например 2
[info]_darkus_
2007-06-07 10:06 am UTC (link)
Неплохо, но как-то мне не очень. Пластилиновые человечки, любящие играть в волейбол. Хотя надо подумать...

(Reply to this)(Parent)(Thread)

Re: Например 2
[info]grey_one
2007-06-07 01:05 pm UTC (link)
Ну тут либо реализьм, либо адекватность модели.
Крокодилы вон тоже не жрут друг-друга по три-четыре штуки за раз. :)

(Reply to this)(Parent)


[info]potan
2007-06-06 09:39 am UTC (link)
Почему идея смерти - травмирующая?
По моему от детей нельзя скрывать то что все рано или поздно умирают.

Можно попиарить эту игру в различных комьюнити?

(Reply to this)(Thread)


[info]_darkus_
2007-06-06 09:59 am UTC (link)
Идею смерти надо преподносить в ином варианте, мне кажется.

Конечно, можно.

(Reply to this)(Parent)(Thread)


[info]potan
2007-06-06 12:44 pm UTC (link)
Может быть, но мне кажется что и в этом способе ни чего плохого нет.
В прочем у тебя там есть хорошее предложение - крокодил наедается и уходит. Типа зачем сытому еще кого-нибудь охранять :-).

Кстати, можно сделать библиотеку комбинаторов ввиде отдельных рисунков, на которых будет изображено и "крокодилье представление", и стрелочками показано, что он куда переставляет.

(Reply to this)(Parent)(Thread)


[info]di_a_na
2007-06-06 01:21 pm UTC (link)
а вы скажите ребенку, что крокодил объелся и лопнул.
Гораздо менее травмирующий момент, частень встречающийся в классике (Красная шапочка, Краденое солнце) и в рекламе ("Дуточка! Да ты же лопнешь! - А ты налей и отойди!" ).

(Reply to this)(Parent)


[info]_darkus_
2007-06-07 04:18 am UTC (link)
Про комбинаторы я уже думал. Сейчас пытаюсь развить эту игру...

(Reply to this)(Parent)

Например 3
[info]grey_one
2007-06-06 09:44 am UTC (link)
Аллигаторы --> Цветочники
Яйца --> Мешочки с семенами
Семьи --> Клуб садоводов

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


Поедание --> Садовод просит посадить ему в горшочек новый цветок, а после уходит его пересаживать.
Вылупление --> Тот, кто посадил - со своим горшком становится на место унесённого горшка.

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

(Reply to this)(Thread)

Re: Например 3
[info]_darkus_
2007-06-06 10:00 am UTC (link)
Креативно. Теперь бы ещё найти того, кто всё это нарисует :)

(Reply to this)(Parent)


[info]andreylv
2007-06-06 02:10 pm UTC (link)
вот я, например, учу детей математике. и теоретически мог бы попробовать поиграть с ними в эту игру. но не буду, и вот почему:
1. правила очень сложны. я и сам-то не мог их понять и запомнить с первого раза, так что про детей и говорить не приходится. им потребуется полчаса (половина урока) только чтобы понять правила. необходимо создать упрощенный вариант игры, который можно объяснить за пять минут, и который можно потом, постепенно усложняя правила, привести к нынешнему варианту.
2. я не понимаю, зачем эта игра нужна и чему она учит. я закончил мехмат, но я не знаю, что такое лямба-исчисление, нафига оно нужно и зачем его преподавать детям. я прочитал описание в Traditio и ничего не понял. по-моему, это какое-то умствование, "модель сферического коня в вакууме". этот уровень абстракции мне недоступен и цель его существования мне непонятна. дети вообще плохо воспринимают абстракции. все это я говорю к тому, что если я, как учитель, не могу объяснить, зачем мы занимаемся этой сложной игрой... можно не продолжать, я думаю.
3. ну и последнее - да, я считаю, в правилах слишком много смертей, поеданий и тому подобного.

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

(Reply to this)(Thread)


[info]potan
2007-06-06 03:08 pm UTC (link)
2. Лямбда-исчисление разработано Черчем в качестве основания математики. Потом, на его базе, было создано много хороших языков программирования, которые не получили распространения из-за низкого уровня математической подготовки программистов. Подготовка школьников к применению серьезной математики в реальной работе, особенно в программировании (а программировать собираются многие дети) - важная задача.
3. С этой проблемой автор поста как раз и борется. IMHO, и так хорошо, но если народ против...

1. Упростить правила сложно. Другие записи лямбда-исчисления еще менее понятны.
Возможно, комбинаторное исчисление было бы проще описать, но, IMHO, это будет менее наглядно.

(Reply to this)(Parent)(Thread)


[info]andreylv
2007-06-06 04:49 pm UTC (link)
(Я не уверен, стоит ли продолжать дискуссию, принимая во внимание, что я не специалист данном вопросе и априори скептически отношусь к нему, так уж сложилось. Но если вы считаете популяризацию этой области математики важной задачей, попробуйте на мне.)

Представте себе, что я - школьник, которому вы пытаетесь это дело объяснить.

Я не понимаю, что вы сказали выше и зачем нужно лямбда-исчисление. Я в принципе могу понять вашу игру и поиграть в нее, но она мне кажется слишком сложной, не слишком интересной и лишенной смысла. Я не понимаю, как это можно "разработать основания математики". Теория вероятностей вырастает из того, как происходят реальные события, анализ - из того же. Вот это основание математики, как я ее понимаю. Математика, как говорит В.И. Арнольд - часть физики, и я с ним согласен.

Я так же не понимаю связи между программированием и математикой. Я умею программировать на Basic и немножко на других языках. Алгоритмы - да, это математика, а описание их на языке, который понимает машина - задача, на мой взгляд, совершенно не математическая. У меня есть масса друзей-программистов, которые ни разу не математики (собственно, даже так - среди двух десятков программистов, которых я знаю, ни один не занимается таким программированием, для которого нужна была бы математика, хотя многие из них занимаются и программированием, и математикой).

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

(Reply to this)(Parent)(Thread)


[info]_darkus_
2007-06-07 04:38 am UTC (link)
Честно говоря, после этих Ваших слов я схватился за голову. Особенно про «математика — это часть физики». Ну да ладно. Видимо, это именно издержки Мехмата, ибо у меня двоюродный брат Мехмат закончил, так он вот тоже абсолютно не приемлет математических абстракций, утверждая, что вся математика ровнёхонько из наблюдений внешнего мира вышла, а потому физика первоначальней.

Что касается лямбда-исчисления. Это действительно основания (дискретной) математики, ибо при помощи этого исчисления можно выразить очень многие иные области математики. Теория множеств, исчисление высказываний, исчисление предикатов, теория типов, алгоритмы. Много чего уже выразили. А в формальной системе одно правило вывода и достаточно ограниченный алфавит, две аксиомы (в последнее время вообще нашли одну базисную аксиому). Так что формальная система достаточно компактна, но в то же время весьма мощна. Не без изъяна, конечно, поскольку содержит в себе все те же самые фишки, что и наивная теория множеств с антиномиями, но в рамках лямбда-исчисления они естественны.

Итак, при помощи лямбда-исчисления можно описывать вычислительные процессы (алгоритмы, если хотите). При этом описание производится при помощи определения функций (лямбда-термов). Функции можно прикладывать друг к другу (применение одних лямбда-термов над другими, которые приложены в качестве аргументов), получая результат, который в общем случае тоже является функцией (другой). Всё это позволяет моделировать различные математические идиомы, начиная от представления значений истинности, натуральных числе, базовых арифметических операций, заканчивая сложнейшими концепциями теории категорий.

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

Если Вас не стало интересно, что это за наука, то дальше, думаю, можно не продолжать.

(Reply to this)(Parent)(Thread)


[info]potan
2007-06-07 07:28 am UTC (link)
В Стректуре реальности Дойч достаточно интересным образом соединяет физику не только с математикой, но и с теорией познания.

(Reply to this)(Parent)(Thread)


[info]_darkus_
2007-06-07 07:33 am UTC (link)
Ну от этого никуда не деться, ибо физика на каком-то уровне всё же описывает чувственное восприятие реальности.

Изначально понятие чисел ведь наверняка возникло из понимания разного количества предметов в кучках перед глазами. И только потом на смену чувственному восприятию пришли всякие Пеано, теоретико-множественные и теоретико-категорные модели.

(Reply to this)(Parent)


[info]potan
2007-06-07 07:18 am UTC (link)
Ну раз часть физики... Тогда держитесь! :-)))

Машина Тьюринга - классический пример реализации алгоритмов, особенно приятный своей физической наглядностью. Другие классические примеры - лямбда-исчисление Черча и Нормальные Алгорифмы Маркова на первый взгляд менее физичны. Но только на первый взгляд.
МТ основанно на понятии времени, текущем везде одинакого и возможности необратимо изменять состояние объекта. Это естественно для нашего чувственного опыта и базирующейся на нем классической физике. Но для современной физики это не так.
Лямбда-исчисление же допускает произвольный порядок редукции - время, как в теории относительности, в разных частях программы может течь поразному, и не требует изменения состояния - редукции в лямбда-исчислении сколее напоминают коллапс волновой функции, чем классические вычисления.
Так что в ближайшем будующем, когда квантовые компьютеры доведут до практического применения, лямбда-исчисление или родственное ему исчисление комбинаторов могут оказаться "физичнее", чем МТ.
Лямбда-исчислению, кстати, посвящена глава в одной из книг Пенроуза, который тоже рассматривает математику как часть физики, хоть и подругому, чем Арнольд или Дойч.

Применение этого в обычных компьютерах тоже дает бонусы - независимость от порядка редукций позволяет автоматически распаралелливать программы, а отсутсвие побочного эффекта операций делает рограммирование более надежным м устойчивым к ошибкам.
Например программы на Haskell практически не требуют отладки - если они откомпилировались, то на 90% можно быть уверенными, что они заработают правильно. Правда это в основном заслуга не лямбда-исчисления, с системе типов Хиндли — Милнера, но и отсутсвие побочного эффекта помогло.
Но, к сожалению, развивается эта область медленно, в основном из-за слабой математической подгодовки программистов и моды на ООП.

(Reply to this)(Parent)(Thread)


[info]_darkus_
2007-06-07 07:21 am UTC (link)
Кстати, ты не в курсе, есть ли где доступный текст книги Пенроуза на русском языке? Имею в виду «The Emperor's New Mind»...

(Reply to this)(Parent)(Thread)


[info]potan
2007-06-07 07:24 am UTC (link)
Я не нашел, когда искал.
Но у меня где-то был бумажный, если надо - могу поискать.

(Reply to this)(Parent)(Thread)


[info]_darkus_
2007-06-07 07:27 am UTC (link)
Не, бумажный не надо. У меня наглицкий текст (электронный) где-то валялся...

(Reply to this)(Parent)


[info]uxn
2007-07-21 12:56 pm UTC (link)
поиск newmind.djvu

(Reply to this)(Parent)


[info]_darkus_
2007-06-07 04:27 am UTC (link)
1. К сожалению, мне сложно увидеть сложность правил, поскольку я этой темой занимаюсь уже с десяток лет. Они для меня естественны. Так что здесь надо попросить человека со стороны поработать. Попробую найти, ибо над игрой хочу поработать, адаптировать её, расширить (в теории ещё много чего, куда можно было бы двигаться).

2. Лямбда-исчисление — это наука о вычислительных процессах, о вычислимости. Фундаментальные основания информатики. Очень странно, что на Мехмате его не преподают.

3. Над этим работаем...

(Reply to this)(Parent)(Thread)


[info]potan
2007-06-07 07:23 am UTC (link)
Переименование (правило замены цветов) - неестественно и труднореализуемо. Боюсь в игре оно будет слишком нудно.
Вот по этому я и хочу увидеть реализацию комбинаторов :-).

(Reply to this)(Parent)

Haskell 98
[info]valdrus
2007-11-01 12:19 pm UTC (link)
Смешная вещь приключилась со мной сегодня. Швейцарский банк прислал мне онлайн тест на позицию по С++, и к моему величайшему удивлению, треть вопросов была по Haskell 98.

Еще более удивительно, что совершенно не зная, как писать программы на Хаскеле, с помощью интернета ответил на те из вопросов, которые были теоретическими. Ура. Да здраствует Интернет - величайшее изобретение человечества!

(Reply to this)(Thread)

Re: Haskell 98
[info]_darkus_
2007-11-01 12:23 pm UTC (link)
:)

(Reply to this)(Parent)


Create an Account
Forgot your login?
Login w/ OpenID
English • Español • Deutsch • Русский…