原文: http://worrydream.com/AlligatorEggs/
翻訳: 向井 淳
ステップ1: このPDFを6つかそれよりたくさんの色の紙で印刷しよう。
(ハガキとかに印刷するといいよ)
ステップ2: このPDFを白い紙に印刷しよう。
ステップ3: ピースに切りわけよう!
これが腹ぺこワニだ。
腹ぺこワニはおなかがすいている。自分のまえにあるものは何でも食べちゃう! でも責任感のあるワニでもあるから、自分の家族も守ってるんだ。
これがおじいさんワニだ。
おじいさんワニはおなかがすいていない。もうたっぷり食べたんだ。自分の家族は守るよ。
これがタマゴだ。
タマゴがかえると、新しいワニの家族ができるよ!
これが小さな家族だ。
みどりのワニが、みどりのタマゴを守っている。
もうちょっと大きい家族。
みどりのワニと赤いワニがいて、みどりのタマゴと赤いタマゴを守っている。言いかたをかえると、みどりのワニは赤いワニを守っていて、赤いワニがふたつのタマゴを守っている、とも言える。
こんな大家族もある。
ここには黄色、みどり、赤のワニがいて、家族を守っている。この家族は3つのものを守っている。みどりのタマゴ1つと、赤いタマゴ1つと、おじいさんワニ1ぴきだ。おじいさんワニは、黄色いタマゴとみどりのタマゴをひとつずつ守っている。
ただし、ワニは自分とおなじ色のタマゴしか守らないんだ。青いタマゴを守る家族には、青いワニがいないといけない。
ちょっとややこしくなるよ。次みたいに、2つの家族が並んでいる。
みどりのワニはおなかがすいている。そして黄色の家族が目のまえにあって、とてもおいしそうだ!
どうなるかはもうわかってると思う。
ところがみどりのワニのおなかはそんなに大きくなかった。食べすぎちゃった!
みどりのワニが死んちゃって、ワニの天国にいってしまった。でもお話はここで終わりじゃないよ。みどりのワニが死んだので、みどりのタマゴがかえろうとするんだ……。
なんと、このタマゴはみどりのワニが食べたものになる。生命の神秘だ!
というわけで、ぜんたいでひとつの家族になる。赤いワニがいて、黄色いワニと赤いタマゴを守っていて、黄色いワニは黄色いタマゴを守っている。
でも黄色いワニはおなかがすいていて、目のまえにはおいしそうな赤いタマゴがある。というわけでおなじことになる……。
かわいそうなワニ。タマゴひとつでもおなかには大きすぎたんだ。
黄色いワニも死んじゃった……。でももういちど、黄色いタマゴがかえろうとする……
そしてタマゴがかえって、黄色いワニが食べたものになる!
もうだれも食べることはできないので、ここでおしまい。
このゲームのさいしょのルールは、食事のルールという。
食事のルールによれば、いくつかの家族がならんでいるとき……
いちばん左上のワニが、その右どなりの家族を食べる。
そして、そのワニは死んでしまう。でもワニが守っていたタマゴにおなじ色のものがあれば、そのタマゴはひとつひとつが、ワニの食べたものになる。
上のはなしのつづきで、オレンジのワニが黄色の家族を食べると、こうなるね。
ここで、いちばん左上のみどりのワニは、すぐ右の家族をたべたい。でもそのまえに、色のルールを知っておかないといけない。
色のルールによれば、ワニが家族を食べるとき、ある色がどちらの家族にも出てくるときには、片方の家族の色をほかの色に変えないといけない。
この絵だと、みどりと赤がどちらの家族にも出てきている。ということで、2つめの家族で、みどりを水色に、赤を青にかえよう。
おなじ色はなくなったから、食べられる!
さらに食べる!
さらに食べる!
もっともっと、食べられるワニがいなくなるまで食べるんだ。
このゲームにはもうひとつルールがある。それはおじいさんワニについてだ。
いちばん左上のワニはおなかがすいていない。たべようとしない。気にかけているのは家族のことだけ。じゃあ、このワニはいつ死ぬんだろう?
おじいさんワニは、守っているものがひとつだけになったときに死んでしまう。いま、おじいさんワニはみどりの家族と赤い家族をまもっている。おじいさんワニはまだ見守らないといけない。でもみどりのワニはおなかがすいている。みどりのワニが赤い家族を食べちゃう……
すると、おじいさんワニはひとつの家族しか守っていないことになる。この家族はじぶんたちだけでだいじょうぶ。おじいさんワニはいらない。すると、おじいさんワニはボケて死んじゃう。
これがおじいさんルールだ。おじいさんワニがひとつのものを守っていると、おじいさんワニは死んでしまう。
次に、赤いワニは黄色い家族を食べて、食べられるものがなくなる。
このゲームはいくつものパズルになる。たとえば、Xを食べてYをつくりだすような家族はどうすればいいか?というような。たとえば、
ここにふたつの家族がある。一方は「ほんとう(True)」、もういっぽうは「うそ(False)」という名前がついている。
ここに「はんたい(Not)」という家族がいる。
「はんたい」が「ほんとう」を食べると「うそ」になる。そして「はんたい」が「うそ」を食べると「ほんとう」になるんだ。「はんたい」の下のほうにあるふたつのタマゴは、どんな色だろうか?
(これをうまくやるには、色のルールについてよく考えていて、色がちがっても「パターン」がいっしょなら同じだということがわかってないといけない)
このパズルはおはなしにもできる。プレイヤーはパズルをといて次にどうなるかを考えないといけない。もしくは、ボードゲームにもできる。プレイヤーはサイコロをふり、そのぶんだけマスをすすめ、それから行った先でパズルをとく、というような。
このゲームは型なしラムダ計算を表現している。腹ぺこワニはラムダ抽象で、おじいさんワニはカッコ、タマゴは変数だ。食事のルールはβ-簡約に対応する。色のルールは(用心深すぎの)α-変換。おじいさんルールが言っているのは、カッコのなかに項がひとつしかないとカッコを外せるということだ。
オリバー・スティールは家族の役割が子供にも重要だと指摘し、「おばあさんワニ」「おかあさんワニ」「赤ん坊(タマゴ)」というのを考えた。今のところ、変数の名前は色で表現されている。どちらの場合も任意に、捕捉を避けるために名前のつけかえ/色の塗り替えが必要になる。べつの方法は de Bruijn indices のようなもので、生まれた順番と家族の関係を対応付けさせるかだ。
オリバーは子供たちは親が死ぬという考えが良くないかもしれないから、ワニはどこかに行ってしまうという説明で取り除いた方がいいかもしれないという提案もしている。
ワニが貪欲になるようにゲームを変えて、右のワニがなんでも食べることにすると、右結合性ラムダ計算となる。こうなると、チャーチ数やYコンビネータなどでおじいさんワニ(カッコ)を数多く省くことができる。ただし、あるワニがひとつ以上のものを食べたときには、おじいさんワニが生まれないといけないということがあるといった問題もある。チャーチ数(くりかえしの適用)がどれだけ汚く見えなくなるかということは、それでも指摘しておきたい。
ワニ計算の構造的な形式は、ラムダ項を手で計算するよりもむしろお手軽であると気付いた。ラムダは口のついた線をで描く。カッコは口のない線だ。次の例は恒等関数である。
チャーチ数は次のようになる。
論理ANDとORは(TRUEとFALSEの標準的な定義を想定すると)次のようになる。
Yコンビネータ
これが標準的な記法とくらべて読みやすいかどうかはわからないが、紙と鉛筆をつかっているときはこれで作業するのは簡単だということがわかった。項がそれぞれ食べて、その下で新しく生まれることを想像できる。記号の羅列に見失ったり、何が何に適用されるか追っていて迷ったりしなくてすむ。