セッション型のduality

セッション型の読み方について説明します.

セッション型の種類

私のfull-sessionsにおけるセッション型を次のTable 2に示す:

セッション型は論文によって表記法が著しく異なるが,多かれ少なかれだいたいここで示した機能(と再帰)がすべてである.

  • Send / Recvは送信 / 受信である.
  • Selectで表される内部選択は,前回説明した sel1 と sel2 のように,プロセスが自発的に行う選択である.
  • Offerで表される外部選択は,前回説明した offer のように,プロセスが通信相手の選択に従い分岐する種類の選択である.
  • Throw/Catch は,チャネル渡しのプロトコルを表現する.型には渡されるチャネルのプロトコルを書く.
  • End は通信の終了を表す.

例えば (Send Int End) は Int を送信し終了するプロトコルを表す.

セッション型のdual : 通信相手のプロトコルを得る

あるプロトコルを表すセッション型に dualという操作を加えると,通信相手のプロトコルを表すセッション型が得られる..dual の操作を\overline{u} のようにオーバーラインで書くことにする.dualityは次の Figure 1 の通り定める.dualは,SendをRecvに,SelectをOfferに,ThrowをCatchに変え,継続にもdualを適用する.しかし一方,Throw や Catch で渡されるチャネルのプロトコルはdualで変化しないことに注目していただきたい.