掛け算から足し算を作るパズルとしてだけではなく、コンヌ/コンサニの論文はとても興味深いものです。それで最近何回か取り上げているわけです。
なにが興味深いかというと、まったく単純でつまらなそうな対象物のなかに極めて深遠な構造が隠されているかもしれない可能性と神秘性です。それと、その“単純でつまらなそうな対象物”がコンピュータやソフトウェアの世界でもお馴染みのモノだということです。あまりにも“単純でつまらなそう”なので、注目も意識もされないのですが、これなしでは何もできないほどに本質的かつ基本的な対象物です。
謎の代数 {0, 1}
コンヌ御大が、非可換幾何、スキーム理論、モチーフ理論などを総動員して探求・解明しようとしている代数系は {0, 1} です。なんでこんな“単純でつまらなそうな”モノが壮大なアタックの対象になるのか、それが謎ですよね。僕は、かすかに雰囲気を感じるだけで分かってません。それでも、コンヌとその周辺の試みが成功すると、とんでもないインパクトがありそうなことを察することはできます。とはいえ所詮、全貌は分かりようがないので、以下では極端に矮小化した話をします。
{0, 1} と言えばビットなわけで、コンピュータの人にはお馴染み。代数系つったって、台集合(underlying set)が二元なので複雑なハズはありません。まずは掛け算(次の表)。
× | 0 | 1 |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
普通の「数の計算」でもこれは当たり前です。0をfalse, 1をtrueと考えれば論理ANDです。逆に、0をtrue, 1をfalseとみなすなら論理ORですね。1だけからなる単元群{1}に吸収元(absorbing element)を添加して掛け算を自然に拡張したもの、ともみなせます。とか理屈をこねても、これはトテツモナク簡単な計算です。
次に足し算です。足し算の可能性、あるいは足し算に対する態度は3つあるようです。
- 1 + 1 = 0 と定義する。
- 1 + 1 = 1 と定義する。
- 1 + 1 は未定義とする。
1番目は、F2 = Z/2Z の計算なので、今までもよく知られていたものです。2番目はANDとORを持つ論理計算 -- 掛け算も足し算もベキ等な可換代数系になります。F2に比べると少し型崩れした感じがありますが、論理計算はお馴染みです。これはブール代数なのでBで表します。
最後のケースが、足し算を考えない吸収元付きモノイドです。コンヌやその他の人々は、この代数系をF1(標数1の体)と書きます。その意味をあまり詮索せずに、記号「F1」は単なる符丁と考えたほうが精神衛生上は良いと思います。
[追記] しばしば、F1 は一元体とも呼ばれ、F1 = {1} とも書かれます。しかし、これを文字通りに解釈すると混乱してしまうので、コンヌの定義のように、1以外に0(吸収元)も入っていると考えたほうがいいと思います。あえて F1 = {1} と書くのは、F1 = {0, 1} と書くとF2と同じに見えてしまうからイヤだ、という理由もあるでしょう。F1とF2はまったくの別物です。たまたま台集合が一致するだけで、代数系としては異なる構造を持ちます。
そもそも、F1とF2を台集合や演算のレベルで見ていても違いがハッキリするわけでもなくて、F1やF2を使ってできる「あらゆること」を観察する必要があります。つまり、F1-世界とF2-世界を、世界として比較することになります。「世界」の具体的な定義として、幾何空間の圏とか加群の圏とかを採用します。[/追記]
コンヌ達は、F1を実際に基礎体のごとく扱って、F1上のベクトル空間、拡大体、多元環(algebra)、加群などを議論しているようです。足し算なしの線形代数ですね。まー、「足し算なしの線形代数」は常人の想像を超えているので、とっかかりはゼロ(吸収元)付き可換モノイドを調べよう、となるでしょう(その話が、「モノイドだけで作る幾何空間 準備編」)。
プログラムのなかの {0, 1}
{0, 1}を、ビットや真偽値以外の立場からも見てみます。
これらの記事のなかで僕は、skipとhangという基本命令(インストラクション、オペレーション)を使っています。skipは何もしないことで、hangは制御不能・予測不能になっちゃうことです。どんなハードウェアやソフトウェアでも、skipとhangに相当する操作や現象はあります。プログラムの順次実行を掛け算だとみなすと、次の演算表(掛け算九九、いや二ニ)ができます。
; | hang | skip |
---|---|---|
hang | hang | hang |
skip | hang | skip |
{0, 1}の演算表と同じですね。いろんな操作を含んだプログラムの代数でも、skipとhangを必ず含んでいます。つまり、{0, 1}の掛け算代数を部分代数に持っています。
プログラムは順次実行で結合できますから、順次実行を掛け算とする(非可換)モノイドになります。そして、プログラムは状態空間に作用しますから、モノイド作用を持つ集合(状態空間)としてシステムをモデル化できます。状況をまとめてみると:
- プログラムのモノイドは{0, 1}を含みます。
- そのモノイドは状態空間に作用しています。
さて一方、基礎体(係数体)K上で線形代数をやろうとすると、Kを含む多元環(可換とは限らない)Aを考えて、A上の加群を考えたりします。このとき:
「『足し算なしの線形代数』は常人の想像を超えている」と書きましたが、よく知られているプログラムの実行モデルは「足し算なしの線形代数」にかなり近いんじゃないか、とも思えます。
という次第で、コンヌ御大の挑戦が僕らに無関係だとは言えません。