このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

「イチ、ニ、サン、イッパイ」の算数と分配代数

確か、遠山啓<とおやま・ひらく>さんの著書だったと思いますが、次のような話が載っていました(記憶が曖昧だけど); アフリカだかニューギニアだかのとある部族では、数詞が「イチ、ニ、サン」しかなくて、三を超える数は一律にイッパイと表現する。

「イチ、ニ、サン、イッパイ」の足し算と掛け算

真偽のほどはともかくとして、そんな部族がいるとするなら、彼らの数の世界は {1, 2, 3, ∞} ということになります。∞はイッパイを表現する印です。数が {1, 2, 3, ∞} しかなくても、足し算はできます。次の表のとおりです。

1 2 3
1 2 3
2 3
3

「イチ、ニ、サン、イッパイ」しか知らない部族が掛け算をできるとは想像しにくいですが、フィクションとして掛け算があると仮定すれば、それは次のようでしょう。

× 1 2 3
1 1 2 3
2 2
3 3

なんか、ほとんど計算になってない感じです。でも、次に挙げる計算法則は、「イチ、ニ、サン、イッパイ」の計算でも成り立っているのです。

  1. (a + b) + c = a + (b + c)
  2. a + b = b + a
  3. (ab)c = a(bc)
  4. ab = ba
  5. a(b + c) = ab + ac

ゼロや負の数はありません。この例では掛け算の単位元1(イチ)がありますが、1はなくてもかまいません。例えば、{2, 3, 4, 5, ∞} を考えると、0も1もありません。それでも上に挙げた5つの法則は成立しています。

分配代数

先に挙げた5つの法則だけを仮定した代数構造(計算の体系)には、これといった名前はないようです。0と1の存在を仮定すると半環(semiring, rig)という構造です。たまに、1の存在を要求しないこともありますが、0は必須です。x に対して -x が必ず存在すれば(ring)と呼ばれています。正負の整数全体は典型的な環です。

ここでは、分配法則が成立することに注目して、5つの法則を満たす代数構造を分配代数(distributive algebra)と呼ぶことにします*1。掛け算の交換法則(可換律)を除くこともあります*2が、ここでは可換な分配代数を扱うことにします。{1, 2, 3, ∞} とか {2, 3, 4, 5, ∞} とかに足し算と掛け算を考えると分配代数の例になっているのですね。

文明を捨てよ、原始に戻れ

なんで、「イチ、ニ、サン、イッパイ」の算数なんて話をしたかというと、Seven Treesパズルの背景に関係します。[Fiore/Leinster]論文により、複素数と集合を混同したような変な計算が正当化されます。メタ定理が「変な計算が実は変じゃない」と保証してくれるのです。しかし、それでも変な感じ、違和感はぬぐえません。

計算の各ステップはすごく簡単なのに、全体としては難解なのです。「これは何でだろう?」と考えてみると、どうも先入観のせいのようです。僕らは普通に文明的な(?)教育を受けているので、0や1の存在が当たり前だと思ってしまうのです。0も1もない状況から出発して、一生懸命0と1を探し求めるような経験はしたことがありません、あるいは忘れてしまっています。

0、1、そして負の数(negative)はすごく便利な文明の利器です。あって当たり前と思いがちですが、Seven Treesの計算ではそうではなく、いったん文明を忘れ、原始生活のなかから0や1を自分で作り出さなくてはならなかったのです(この話はまたするつもりです)。

オマケ:文明から見たときの原始算数

mとnを、m<n であるような2つの自然数*3とします。{m, m + 1, ..., n} という集合を考えて、最後の数nは「イッパイ」を表すとします。原始算数を定義するために、まず自然数kに対する [k]n を次のように約束します。

  1. k<n のとき、[k]n = k
  2. k≧n のとき、[k]n = n

nは「イッパイ」を意味するので、「イッパイを越えたら、もうなんでもイッパイ」ってことです。次の性質は場合分けで容易に示せます。

  1. [[a]n + b]n = [a + b]n
  2. [[a]nb]n = [ab]n

以下、nを固定して、[k]n を [k] と略記します。原始足し算「(+)」と原始掛け算「(*)」の定義は次のとおり。

  • a(+)b := [a + b]
  • a(*)b := [ab]

すると、原始算数の法則は次の形になります。

  1. [[a + b] + c] = [a + [b + c]]
  2. [a + b] = [b + c]
  3. [[ab]c] = [a[bc]]
  4. [ab] = [bc]
  5. [a[b + c]] = [[ab] + [ac]]

どれも、上の性質から示せますね。{m, m + 1, ..., n} とその上の原始算数が分配代数となることが確認できました。

*1:すでに使われている用語「分配圏」にあわせました。

*2:そのときは、分配法則が左右の2つ必要です。

*3:0を含めてもかまいません。