Pi

windows で mobilityworkbench を使う

諸事情からwindowsでmobility workbenchを動かさないといけなくなった.smlnjのwindowsバイナリをからサイトしてきて,READMEの通りにやったらうまくいかなかったのでメモ. まずTextIO.inputLineの戻り値がoptionな感じになってるのでそれを全部修正(case文…

π計算でリスト

Pi

あえて教科書とかを見ないでやってみる. agent Constant1(x,a) = 'x<a>.Constant1(x,a) agent Constant2(x,a,b) = 'x<a,b>.Constant2(x,a,b) agent Cons(cons) = cons(r,hd,tl).(Cons(cons) | Constant2(r,hd,tl)) agent Head(head) = head(r,list).list(hd,tl).(He</a,b></a>…

Bisimulation

Pi

Bisimulation は,お互いがお互いを simulate するものかと思っていたのだけど,そうじゃなかったらしい. つまり, P と Q が bisimilar であることを判定するのに, P が Q を simulate し,かつ Q が P を simulate することを確認すればいい,というわけ…

Mobility Workbench もどき

Mobility Workbench もどきを作っている。もちろん Haskell で。1日とちょいでとりあえずステップ実行まではできるようになった。 あとは structural congruence を使った簡単化とかをやれば(ステップ実行に関してだけは)本家に遜色ない。 > agent P(a,b) = …

Mobility Workbench の Sigma, Bsigma, Pi

Pi

またも id:syd_syd さんに教えていただく。 しばらく遊んでいたところ Sigma, Bsigma, Pi の使い方は理解できたが、その意味はわかっていない。やっぱり本を読んで勉強しないといけない。 直感的には、 Sigma は送信データにマッチし、 Bsigma はプロセス内…

Hennessy-Milner logic

Hennessy-Milner logic は、プロセスの性質を表現するための論理式。ちょっと複雑な性質を表現するためには Recursive Hennessy-Milner logic を使うことになる*1。これに関する資料が少ないので一応。 id:syd_syd さんに非常に感謝。 π計算のモデルチェッカ…

卒論進捗

サンプルプログラムはほぼ完成。 ただ、 windowOnIdle で登録したアクション(消費者)が、なかなか実行されないという問題点が。複数のスレッドで生産者と消費者がひとつのキューを扱うのだけど、 idle イベントが発生した段階でキューにデータがないと、なか…

挫折しそう

Pi

π計算でプログラム書くのは死ぬほどめんどくせぇぇ…。絶対に、なんかのツールによるサポートが必要と思われる。

π計算

Pi

π計算でキャンセルできるファイルコピーユーティリティを書く、というのをやっている。ちょっとした頭の体操。 Haskell を勉強し始めた頃と近いものを感じるかもしれない。 非同期π計算だと、送信をしたあとには何もできないという制約がつく。チャネル a で…

Pict

Pict をビルドしようとしましたが、ライブラリのビルドに失敗しました。どうしよ、粘るべきかな…。 Building Std/Random.px from Std/Random.pi Uncaught exception: Failure("int_of_string") make: *** [Std/Random.px] Error 2てか Pict って X も扱える…

Template Haskell は脳内メモリを食い尽くす

タイトルの通り。ややくじけそうである。 昨日から、自分で定義したデータ型を使って書いた構文を、Template Haskell でコンパイル時に Haskell ソースに変換するというようなメタプログラミングをしている。とはいえ、今日は一日遊んできたからほとんど何も…

Mobility Workbench と Hennessy-Milner logic

なんだかよくわからないながらも、 Mobility Workbench の使い方と Hennessy-Milner logic の勉強をしています。 id:syd_syd さんに貸してもらった Reactive Systems という本は、(今のところは)わかりやすくていい感じ。最後までこのペースで進めればなと思…

フィボナッチ

できたー。値をチャネルに投げ込むときは、がっちり型を書くほうが無難みたいです。 module Main where import PiMonad hiding (piStart) import PiMonad.IO.Console import PiMonad.Channel import PiMonad.Network main = piStart False Nothing mainPr ma…

なんかおかしいな

Pi

なぜだめなんだろうか。眠くてもうだめ。 main = piStart False Nothing mainPr mainPr :: Maybe (I (), NewP) -> PiMonad () mainPr _ = do s <- new fork $ fib 10 s s' <- recv s cout

bisimulation

Pi

やべぇ、意味わかんない。bisimulation という関係は常識なのだろうか。少なくともこの本には説明がない気がする…。 example a.(b.stop + b.stop) + a.b.stop 〜bis a.b.stop because the following is a bisimulation: a.(b.stop + b.stop) + a.b.stop a.b.…