POPL 2008メモ1日目
いつものことですが「いい加減」なメモなのでご承知&ご容赦を…(ツッコミは歓迎します)。
今年は論文数が多いので一発表20分(質疑応答5分を含む)になったのですが、さすがにどの人もうまくまとめていて、ちょうど良いペースなのではないかと思います。もっと詳しく知りたい人はproceedingsを見る、ということで。
オープニング
招待講演その1
- Systems biologyの話。ちなみに話者は生化学者だが「遺伝的アルゴリズムで世界最短のpred関数(λ計算のChurch encodingで)を発見した」こともあるらしい。分子生物学的機序(パスウェイ)を、物理学的な微分方程式モデルよりも、並行計算(ペトリネットとかπ計算とか)で表現すると簡単で良いという話? 個人的には、そういうことをやっている/やっていた日本人の知り合いが多いので、さほど目新しくは感じなかった。が、プログラミング言語論の専門家が参加していて、抽象解釈などによる静的解析などもやっており、物理学的解析にきちんと対応するらしい?
-
- [Q by 誰か] 自分もそういう研究をしたことがあるのだが、今後の課題は? [A] 計算機科学者が生物学者に「解決すべき問題があったら教えて」と聞くのではなく、「こういう疑問があるのだがどうなの?」と提示するとよい?
- PC dinnerで隣の席になって、生物と計算機科学の「文化の違い」の話に(会議論文とジャーナル論文の関係とか、査読とか)。テーブル全体で興味津々。
セッション1
定理証明によるプログラム検証のセッション。自分がsession chairだったので後で書く(時間があれば)。
- Coqチュートリアルにも出てきた変数束縛の扱い方の話。
- 「コンパイラの正しさ」ではなく、「コンパイル結果を検証するルーチン」の正しさを定理証明器で検証する話。例:「正しいCコンパイラ」にPowerPCの命令列スケジューリングを加えた。命令列スケジューリング自体の正当性証明が大変なので、結果を検証するルーチンの正しさを示した。
- Parametricity(ちょっと違うらしいが)の話。多相型ソート関数の正しさは、「0と1のリスト」だけ確かめれば、任意の入力について正しいことが言える(「Knuthの0-1原理」というらしい)。同様にprefix計算アルゴリズムの正しさは「0と1と2のリスト」だけ確かめればOKという話。
セッション2
Effect systemのセッション
- エフェクトシステム(副作用を解析する型システムのようなもの)の拡張。型つけする式の副作用だけでなく、その「前後の文脈」の副作用も型環境に含める。「e1; e2」だったら、「e2の前エフェクト」は「e1の前エフェクト」+「e1のエフェクト」になる、といった仕組み。安全な動的アップデート(あるプログラムポイントの「前」と「後」の両方で使われているモジュールは、そこではアップデートできない?)や、マルチスレッドプログラムのメモリアクセス解析に応用。前者はvsftpdで実験。ロック解析などにも応用可能との主張。
- [Q] 継続渡し形式にすれば? [A] 単にCPS+普通のエフェクトシステムだけでは駄目だが、「前後エフェクトシステム」と組み合わせれば精度は向上するかも(?)
- [Q] Danvy-Filinskiの限定継続型システムとの関係は? [A] その研究を知らないので調べてみる
- STM (software transactional memory)の意味論を定式化。"strong isolation"は意味は明確だが実装が困難。"weak isolation"は実装は容易だが意味が曖昧(コードの実例あり)。意味論の定式化により、両者が等価になる(ユーザプログラムから区別できない)十分条件を定義&証明。型・エフェクトシステムの形で。
- [Q] 既存の実装にどれぐらい適用可能? [A] STMはいろいろ(?)。ハードウェアはよく知らない。
- STMの話 by Abadi。「atomicである」ほうをデフォルトにした"automatic mutual exclusion"を考えた。わざと並列にしたいときは"async"(別のtransaction)とか"unprotected"(transaction外)とか書く。weak atomicityのsemanticsは実装(optimistic concurrency)によっては非常にわかりづらいので、strong atomiciyと一致する条件(separation)を考えた(さっきの発表とは独立)。
- [Q by Phil] STMよりmessage passing(Erlangとかjoin-calculusとか)のほうがわかりやすいのでは? [A] STMを制限していって、つきつめればsyntaxだけの違いになるかも(!)
セッション3
Separation logic(ヒープやポインタについてのプログラム論理の一種)のセッション
- Behavioural subtypingになっていない「悪い」inheritance(ただの"code reuse")も扱えるプログラム検証をしたい(JMLやSPEC#では扱えない)。メソッド呼び出しの検証がdynamicで難しい(receiverの型に依存)。そこでクラスごとにabstractな述語(dynamic predicate)を定義し、それを使ってクラスのbehaviorやメソッドのspecを書く。
- メソッドのstatic specとdynamic specをわけ、receiverのクラス(thisとかsuperとか)がわかっているときはstatic specを、わからないときはdynamic specを使う…というのはさっきの発表にもあったが、包摂されている?(独立な研究らしいが)
- Separation logicを使ってヒープを使ったプログラムの停止性を証明したい(例:循環リストの反転)。記号的な実行がループするので、証明木も循環するが、一定の条件(サイクルの中に帰納的に定義された述語のunfoldingが含まれている)を満たせば循環した証明でも健全(帰納的に定義された述語は有限回しかunfoldできないから)かつ相対的に完全という話。
セッション4
「プログラミング言語と計算量理論」のセッション。
- 有名なRiceの定理に「外延的等価性(の保存)」が出てくるが、そこに「計算量(の保存)」を付け加えても良いという話。「外延等価かつ計算量が同じプログラムの集まりは、trivialな場合(空集合か全体集合)のみ帰納的可算」らしい。
- 型システムがプログラムの計算量クラスを制限するという話(implicit computational complexity)の一種。PSPACEに対応する型システムSTA_B (soft type assignment with booleans)。Cf. Soft Linear LogicはPTIME(多項式時間)に対応。
- [Q] memoization is the trick? [A] no
- Chris Okasaki的な関数的データ構造に、計算量をannoateして確認できるようにしたライブラリ。実装言語はAgda(≒ Haskell - 無限ループ + 依存型)。「計算量モナド」。Banker's method用にpay演算子。