390 likes | 614 Views
POPL ミーティング 12/20 Survey: A Very Modal Model of a Modern, Major, General Type System. Toshihiro YOSHINO (D1, 米澤研 ) < tossy-2@yl.is.s.u-tokyo.ac.jp >. 今回の論文. A. Appel et al. A Very Modal Model of a Modern, Major, General Type System. To appear in POPL ’ 07. 論文概要. 型付き低級言語のための一般的な型 システムを設計
E N D
POPL ミーティング 12/20Survey: A Very Modal Model of a Modern, Major, General Type System Toshihiro YOSHINO (D1, 米澤研) <tossy-2@yl.is.s.u-tokyo.ac.jp>
今回の論文 • A. Appel et al. A Very Modal Model of a Modern, Major, General Type System. To appear in POPL’07.
論文概要 • 型付き低級言語のための一般的な型システムを設計 • Kripke 意味論による意味論的設計 • よくある syntactic な設計ではない • 安全性の議論において induction (over types) を用いない • 様相演算子(modal operator)がある • von Neumann 型計算機、mutable reference のあるλ計算に対して実際に適用
研究背景 • 型付き低級言語(TIL や TAL)の設計は難しい • リッチで記述力の高い型システムが必要 • Intersection/Union types • Address arithmetics, Mutable references • Recursive types, Type quantification • とくに Type quantification は impredicativeであるべき ⇒ 様相論理の手法により、一般的な型システムを設計 何重にかかってくるかはわからない、仮定できない
背景知識様相論理学 • 可能性や必然性に関わる命題を扱う • 「~でなければならない」「~でありうる」などといった言明が可能 • 古典論理学に対しいくつかの演算子を追加 • 必然性 □、可能性 ◇ など • 意味論については Kripke による定式化がよく用いられる[Kripke 1963]
Kripke 意味論 任意の要素 w∈W に対し、w から始まる無限列がない • 「モデル」は 3 つ組 • W: 世界 の集合 • R (⊂W×W): 世界間の遷移関係 (accessibility) • 推移的かつ整礎(well-founded)な関係でなければならない • ||- : 型付け • 「世界 w において、値 v は型 τ を持つ」 • このモデルを small-step な操作的意味論に適用 • 集合 Loc によりインデックスされるストアを用意 • R は step relation に対応
モデルと(言語の)意味論の対応づけ • Mutable reference 付きλ計算 • 状態 = (e, m) • e: 式、m (:: Loc→V): ストア • 世界 w はストアを特徴づける • von Neumann 型の機械 • 状態 = (v, m) • v: レジスタファイル, m (:: Loc→Loc): メモリ • 世界 w はメモリの内容を特徴づける
モデルと(言語の)意味論の対応づけ R 世界集合 W Type の世界 Value の世界 状態空間
Kripke 意味論における型付け • 「世界 w において値 v が型τを持つ」という judgement • 型τは となる w と v の組をすべて列挙したものと考えることもできる • (w, v) のような形の組を configuration と呼ぶ • 型を configuration の集合とし、型演算子は集合操作として捉える • : 型の subset 関係
型構築子 • 18個のプリミティブ、16個の合成演算子を定義 • モジュラーな設計
型構築子プリミティブ型 (1) • Intersection, union, implication • top はすべての configuration、bottom は空集合 • Intersection (union)は集合の共通部分(和) • 非常に直観的
型構築子プリミティブ型 (2) • 量化子 • Polymorphism の記述に用いられる • 型変数だけでなく、ストア(やメモリ)に関する変数も扱えるような統一的モデルとして定義 • A ∈ {Type, Loc, Mem} として共通に使える
型構築子プリミティブ型 (3) • 世界に対する言明 • !τ (everywhere τ): その世界の全ての値がτ型 • =τ(という式・言明)が成り立つ • ?τ (somewhere τ): その世界にτ型の値が存在 • これらは値によらず、世界のみに対する言明 • 世界の選択により、top (真) または bot (偽)と等しくなる
型構築子合成演算子 • プリミティブ型構築子を用いて新たな演算子を合成することができる • 例: 型の等価性 • σ⇔τ ≡ ある値について型σとτが等価 • 実際は世界と関連付けられることに注意。暗黙に現れる世界を「現在の世界」と呼ぶ • teq(τ,σ) は世界におけるτとσの等価
型構築子様相演算子 (1) • “Later” operator: • ≡ w の後に来る世界で v はτ型 • 世界の間に前後関係がなければならないので、accessibility は整礎である必要 (1) は(型の subset 関係について)単調 (2) は intersection で分配される 性質
型構築子様相演算子 (2) • Necessity operator: □ • と合成できる • 直観的には、「現在以降」という意味 (1) □は単調である (2) 任意の型τについて、□τ|- τ (3) □σ|- τ ⇒ □σ|- □τ (4) □は intersection で分配される • また であるような型を necessaryという 性質
再帰型の扱い • F: Type→Type が与えられ、rec F を考える • F が縮小写像(contractive)なら rec F は F の不動点 • 次の定理が成り立つ • 求める不動点は唯一に定まる
ストアの Kripke 意味論 • Mutable reference に対応するにはどういった Kripke モデル が適切か? • R は整礎なので、実行は必ず有限ステップで停止 ⇒ 世界 w は残りステップ数カウンタを持つ • あとは世界においてストアの型付けΨが必要 • じゃあこうすればよい? Ψ
ストアの Kripke 意味論世界集合の定義 • しかしこの定式化は解をもたない • 基数の議論により明らか • W > Type かつ Type > W • かわりに n に関して層化した定義を行う • これなら Type = P(W×V) として問題ない
ストアの Kripke 意味論Accessibility Relation の定義 • Typenの間には包含関係がある • また、型の近似関数を次のように定義 • これらを用いて、accessibility relation を定義
ストアの Kripke 意味論Accessibility Relation の定義 中略 Wn 矢印が accessibility(のハッセ図)を表す W1 W0
ストアの Kripke 意味論Reference Type の定義 • 代入可能な値(Loc ⊂ SV ⊂ V)の型 • Store typing Ψ について • これを使ってメモリの well-typedness を記述 • 最終的に reference は以下のようになる 変数から値への単射
メモリ m : Loc→V teq(τ, τ’) ストアの Kripke 意味論Reference Type の定義 l = ??? : τ’
Type Preservation • Mutable store の update 後に型が保存しなければならない • 証明する必要あり • 割り当てられたメモリは解放されることがなく、ずっと同じ型に型付けられる • R の定義により dom(Ψ) ⊂ dom(Ψ’) なことに注意すれば簡単に示せる
Type PreservationMemory Update • メモリへの代入 m[l := u] が可能であり、validmem が保存される
Ψ Ψ’ domain は変わらない validmem(m’) Memory m Memory m’ = m[l := u] Type PreservationMemory Update k+1 の世界 k の世界 ref τ τ validmem(m) u R l = ??? l = u
Type PreservationMemory Allocation, Access • validmem ⇒ ref へのアクセスが成功する • アクセスに 1 ステップかかる • メモリ割り当てもできる
Memory Safety • safek: k ステップの実行に関する安全性 • Mutable Reference があるので、メモリ操作に関しての安全性が必要 • safe: メモリが well-typed ならば実行が安全である
データ構造の表現 • アドレス計算の型付け • レコード型 • メモリのオフセットを使う • である • あとは intersection, union で代数的データ構造を構成できる
von Neumann アーキテクチャへの適用 • ここまでの議論は一般的な枠組みに関するもの • 特定の計算体系を仮定していない • λ計算などにも適用可能 • 今回のサーベイでは省略 • 以下実際に von Neumann アーキテクチャに対する適用例について議論 • PCC Framework を構成するのと同じ流れ
命令の表現 • 命令とは状態集合上の関係である • 「状態」はプログラムカウンタも含んでいることに注意 • たとえばメモリからのロード命令の意味論は、 • von Neumann アーキテクチャでは命令もデータ • プログラムは整数列 p(i) としてエンコードされている • 7320 が LOAD(3,2,0) ≡ r3←m(r2+0)に対応する、等 • 「エンコードしている」という関係は以下のように定義
プログラムの型 • プログラムは前述のとおり整数列にエンコードされており、レコードとして表せる • またプログラムは(意味論的には) continuation と考えることができる • コードラベルに対して安全性が保証できる事前条件を関連付ける: codeptr(τ)
プログラムの型付け • 基本的にはすべての i についてを検証すればよい • しかしコードは分岐することがある • たとえば i 番目の命令が j にも分岐するならば、Γjにも依存する必要 ⇒ 一般化して、 とできる ⇒ 最終的に 、さらに • 命令の型付け規則 • たとえば LOAD 命令 →
プログラムの型付け: 例 • 以下の簡単なプログラムを考える • プログラムの中身について、 • このプログラムの型は、
プログラムの型付け: 例 • Invariant を次のようにすれば、 • 命令の型付け規則を用いて、となる • このプログラムは分岐しないので Γi+1のみでよい
エントリポイント • プログラムの先頭番地は、特別な仮定なく実行可能でなければならない • つまり、codeptr(top) に型付けられなければならない • したがって、プログラム全体の型付けとしてはすなわちでなければならない • これから安全性が導かれること(健全性)を次で言う
Type Soundness • プログラムの初期状態と対応づく世界が存在 • プログラムが l にロードされたとは、 • プログラムの長さまでの i に対し m(l + i) = p(i) • プログラムカウンタが l を指している • 健全性
Related Work • Approximation Modality[Nakano 2000, Nakano 2001] • 本論分の と類似機構を初めて導入した論文 • XCAP[Yu et al. 2003, Ni and Shao 2006] • “Certified Assembly Programming” • Calculus of Inductive Construction を用いたアセンブリ言語プログラムの検証フレームワーク
まとめ • 様相論理を型システムの設計に適用 • 継続や reference がさらにシンプルな要素から構成できることを示した • また実際にその型システムが強力かつ一般的であることを示した • Mutable reference つきλ計算、von Neumann 型機械にもモデルを変えずに適用が可能 • Coq で実装した (論文中では言明だけ) • http://www.pps.jussieu.fr/~vouillon/smot/