このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

「半」の世界と、両側(半)加群

相変わらずマンダラ圏Mandを考えている。Mandの候補として、あるいはMandのひとつの見方として、非可換多元環上の両側加群の圏がよさそうだ。

実際は、非可換多元環上の両側加群の圏、全部「」が付く。

引き算ができないことが「半」の意味。「半」の世界に、加法的ベキ等の世界が含まれている。「ベキ等」の世界が「半」の世界のなかでもなにか特別な地位を占めている感じだ。実際、ブール半体 {0, 1} はベキ等なので、ブール半体上で展開されるすべての議論は「ベキ等」である。

以下はすべて「半」、しかも「ベキ等」な世界での話なので、形容詞「半」「ベキ等」は省略する。

加群とは、適当な(非可換でもよい)多元環を係数とするアーベル群(実はアーベルモノイドだよ!)だとする。スカラー積は左か右に固定するが、右にしたほうが記号のツジツマはあいそうだ。基礎体は常にブール体B(ほんとは半体だよ!)とする。

両側加群(bimodule, 2-sided module)は2つの多元環が作用している加群で、左スカラー乗法を*、右スカラー乗法を・とする。極めて重要なのは:

  • (a*x)・b = a*(x・b)

A, Bが多元環のとき、左右のA-片側加群の全体を RMod[A], LMod[A] で示す。左右が問題にならないときは、Mod[A] と書く。(A, B)-両側加群の圏を BMod[A, B] とする。RMod[A], LMod[A], BMod[A, B] は圏であり、A, Bを動かすと、インデックス付き圏、2-圏(圏で豊饒化された圏)となる。ベースとなるのは、B-多元環の圏である。RMod[A], LMod[A], BMod[A, B]に出てくるA,Bを固定しないで全体として考えるのがミソ。

順番に書いているとめんどくさいから、ランダムにいく。


マンダラの圏Mandでは、次の演算が必要だろう。

  1. プログラム図の順次結合 「;」
  2. プログラム図の排他的ユニオン 「(+)」 直和または双積
  3. プログラム図の独立並列結合 「(×)」 テンソル
  4. プログラム図の同期IO結合/同期メッセージング結合 「*」 スター積
  5. 模倣の結合 |

このなかで、テンソル積(独立並列結合)をモノイド積、スター積(同期IO結合)を結合としてコンパクト閉圏が作れると思っている。このとき、対象をアクションアルファベットだと思う。対象を境界集合と思うのは別な“方向”から見た場合の構造。今回は境界とかポートの問題はいったん保留。

アクションアルファベットは、点付き集合(pointed set)だと思って、直和と直積は点付き集合のなかで考える。アルファベットをB係数でクリーネスター拡張するとベクトル空間であり、かつ非可換多元環となる。なお、the pointはε記号。アルファベットとアルファベットを生成元としてできた多元環を(強引に)同一視する。すると、アルファベットの圏は、体B上の非可換多元環の圏と同一視できる。この圏をALとする。

AL内ではB係数のテンソル積が自由で作れる。テンソル積は集合の直積に対応する。有限的な操作なら代数的テンソル積で十分。ω極限を考えて完備化テンソル積を作れば、正規言語なども扱える。

適当な多元環A上の加群Sは、オートマトンと解釈できる。加群の台集合Sは状態空間XのB係数の拡張なので、S = Powf(X) となる。'f'はfiniteを意味する。'f' = finite はブランチングの濃度なので、ωブランチングなどを考えることもできる。

多元環Aの掛け算を逆順に定義した多元環をAの転置(反対、逆転、双対、共役)と呼びAtと書く。(A, B)-両側加群は、At(×)B 右加群となる(A(×)Bt加群)。Sが(A, B)-両側加群であるとき、Sを A→B という射だと考える。形式言語理論から見ると、射Sは、トランスデューサーとも言えるし、言語関係ともいえる。関数的/動作的に見ればトランスデューサー、関係的に見れば(線形な)言語関係。

問題は圏の結合。これは、加群の非可換多元環上のテンソル積で与える。このテンソル積は、体B上のテンソル積とはまったく異なる。A右加群SとAt加群Tに関して、S(×)AT が定義できるが、記号はS *A T とする。単なる(B上の)テンソル積と区別してA-スター積と呼ぶ。Aが了解されていれば、単に S*T と書く。多元環Aは、右からの掛け算により、At加群ともA右加群ともみなせる。Aが圏の恒等となる。

  1. (S*T)*U = S*(T*U)
  2. A*S = S*B = S

このスター積と普通のテンソル積がモノイド圏の公理を満たすことを確認すればよい。さらに、転置を双対としてコンパクト閉圏になるだろう。この部分はコンポネントの同期メッセージングに関する定式化だ。トレースは単位と余単位を使って構成できる。行列のトレース、テンソルの縮約と同じだ。やっぱり、トレースは隠蔽のような概念かな。

境界の問題は、アルファベットにも境界概念を入れる必要があって、アルファベットをモノイドの生成系と考えていてはダメで、圏の生成系として定式化する必要があるだろう。つまり、“「境界」を持つランクの集合”に値を取るダブルランク付きアルファベット。{0, *, 1}がランクで、0が始境界、1が終境界でとりあえずは十分だと思う。0→* が開始記号、*→1が終了記号、*→*が内部アクション。

境界の問題をちゃんとやるには、「言語=自由モノイドのB係数モノイド環」という認識ではダメで、「言語=自由圏のB係数圏環」とする。圏環(圏多元環)はあまり使わないなー、と思っていたが、ここでは使う。バキバキに使う。言語を特にプログラミング言語と解釈すると、圏環の要素はプログラムの集まりと解釈される。個々のプログラムではなくて集まりを考えるのは、足し算を可能とするため。B以外の係数としては、F2, F1、あるいは確率分布を考えてもいいかもしれない。

プログラムの実行は、意味空間での経路(1次元とは限らない)を与える。ものすごくたくさんの経路に対して、なんらかの量を総和(積分)すると、振る舞いを記述する量が得られるはずだ。つまり、プログラムに関するクリーネ/ファインマン総和。ホイゲンス/フェルマー双対によると、クリーネ/ファインマン総和に対応するダイクストラ波動があるはずだ。つまり、プログラムの意味空間=状態空間で、初期状態から広がっていく図形(波頭と掃過域)だ。


とか書いているうちに、bimoduleではダメでtrimoduleとかn-moduleが必要な気がしてきた。やっぱりスパイダー計算か。スパイダーのボディに加群を書いて、脚に多元環を書けばよさそうだ。転置多元環は脚の方向を逆に描くとよい。

まだスッキリしないところが色々あるが、非可換多元(半)環の加群(非可換モノイドのB係数表現)を中心にするのはいいと思う。この見方では、非可換多元環が主役で、加群は脇役になる。このコンパクト閉圏(になるとして)で、色々な計算を実行してみよう。自由多元環として圏環が出てくるのも面白い。「アルファベットもまた圏なり」というのも統一性があっていいと思う。