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

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

プログラムのあいだの通信とは何か?

またマンダラ圏Mandに関係するのだが、マンダラ圏では、直列結合と並列結合がある。並列結合にはテンソル積とスター積がある。並列結合=(テンソル積+スター積) だけでコンパクト閉圏となる。

これらの演算のなかで、テンソル積は直列結合にも並列結合にも絡んでいる。対局的な性質を持つ2つの演算は、「直列結合 v.s. スター積」だろう。どちらも2つのプログラムを通信させて、全体として複合プログラムを作る演算だ。が、通信の解釈が違う。時間方向での通信(逐次)、空間方向での通信(同時並行)の違い。

  • 時間方向の通信=処理の引継ぎ=直列結合:「繋ぎ目は空間の代数=ブール可換環
  • 空間方向の通信=同期協調動作=並列メッセージング結合:「繋ぎ目は時間の代数=「アクション非可換多元環

面白くもあり、混乱の原因ともなるのが、これらの通信方式=「順次結合と並列メッセージング結合」は、互いにエミュレーション可能であること。2つのサブシステム(コンポネント)をブラックボックに入れて、振る舞いから時間成分を抜いてしまう(例えばS行列を取る)と、制御とデータを一気に受け渡す順次結合と、少しずつデータを渡しながら協調動作する並列メッセージング結合の差はなくなる。

直接結合の境界点に、時間的な歴史をエンコードできる。境界点はデータで境界は受け渡しデータ型だと思える。一方で、メッセージの時系列は、同時走行システムの境界要素を定義する。メッセージ時系列は時間を時間として扱っている。