π計算
π計算でキャンセルできるファイルコピーユーティリティを書く、というのをやっている。ちょっとした頭の体操。 Haskell を勉強し始めた頃と近いものを感じるかもしれない。
非同期π計算だと、送信をしたあとには何もできないという制約がつく。チャネル a で受けて、チャネル b に送信して再帰する(自分を呼ぶ)プロセス proc は、同期π計算だとこんな感じになるはず。
agent Proc (a,b) = a.'b.Proc(a,b)
非同期π計算だと、 'b のあとは 0 しか書けない。で、本とかで調べたわけではないからあんまり自信ないけど、たぶん proc は次のように書き換えることができる。
agent Proc2 (a,b) = a.'b.0 | a.'b.0 | ...
つまり
agent Proc2 (a,b) = !(a.'b.0)
となる、はず…。 ! はシグマ的なもののつもりだけどよくわかってない。というか Mobility Workbench において ! をどうしたらいいのかわからん。
- -
あ、これでいいのか。
agent Proc2(a,b) = a.'b.0 | Proc2(a,b)
ふーむ。