インストラクションモノイドの合成法が4つもある
インストラクションセットから作られた自由モノイドが、メモリの状態空間に作用している、というのがノイマン型コンピュータの素直な定式化だろう。
自由モノイドを A* のようなクリーネスターで書くとする。A*×B* が自由モノイドの直積、A*#B* が自由積=直和だとする。自由積に星印を使うとクリーネスターと紛らわしいのでシャープにした。この2つはモノイドの圏Monのなかの積と余積だから自然なものだが、実は他にも“積”がある。
- (A×B)*
- (A*×B*)*。
(A×B)*は完全にクロック同期したマシンによる実行。(A*×B*)* は最も一般的な並列プログラムで、非同期実行と同期待ち合わせが混じっている。
- A*×B* -- 完全に独立(分離)したプログラム実行
- A*#B* -- インターリービング。タイムシェアリング、コルーチン制御など。
- (A×B)* -- 単一クロックで完全同期した実行
- (A*×B*)* -- 一般並列実行協調制御
以前から数珠暖簾や梯子形の紐とかを考えてきたが、モノイドのなかで考えると以上のようになる。梯子のシェープを考えるとタイルの定式化がいいのかもしれない。梯子の横線の射が二重圏の水平射(か垂直射)となるのだろうが、水平圏は単なる完全グラフのような気がする。
しかしなー、一番簡単な例でも積が4種類(もっとかも)あるってのは、ちょっと愕然としますわ。ABCシステムと例外を入れて混ぜなくてはならない。うううう、複雑だー。生きている間にどこまでわかるのか -- ほんとに微々たる部分しか理解出来ないだろう。うううう。