POPL ミーティング 12/20 Survey: A Very Modal Model of a Modern, Major, General Type System
description
Transcript of POPL ミーティング 12/20 Survey: A Very Modal Model of a Modern, Major, General Type System
POPL ミーティング 12/20Survey: A Very Modal Model of a Modern, Major, General Type System
Toshihiro YOSHINO (D1, 米澤研 )<[email protected]>
今回の論文 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 意味論 「モデル」は 3 つ組
W: 世界 の集合 R (⊂W×W): 世界間の遷移関係 (accessibility)
推移的かつ整礎 (well-founded) な関係でなければならない ||- : 型付け
「世界 w において、値 v は型 τ を持つ」
このモデルを small-step な操作的意味論に適用 集合 Loc によりインデックスされるストアを用意 R は step relation に対応
任意の要素 w∈W に対し、 w から始まる無限列がない
モデルと ( 言語の ) 意味論の対応づけ Mutable reference 付き λ 計算
状態 = (e, m) e: 式、 m (:: Loc→V): ストア
世界 w はストアを特徴づける
von Neumann 型の機械 状態 = (v, m)
v: レジスタファイル , m (:: Loc→Loc): メモリ 世界 w はメモリの内容を特徴づける
モデルと ( 言語の ) 意味論の対応づけ
状態空間
世界集合 WR
Value の世界
Type の世界
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 の定義
W0
W1
Wn
中 略矢印が
accessibility( のハッセ図 ) を表す
ストアの Kripke 意味論Reference Type の定義 代入可能な値 (Loc ⊂ SV ⊂ V) の型
Store typing Ψ について
これを使ってメモリの well-typedness を記述
最終的に reference は以下のようになる
変数から値への単射
ストアの Kripke 意味論Reference Type の定義
メモリ m : Loc→V
l = ??? : τ’
teq(τ, τ’)
Type Preservation Mutable store の update 後に型が保存
しなければならない 証明する必要あり
割り当てられたメモリは解放されることがなく、ずっと同じ型に型付けられる
R の定義により dom(Ψ) ⊂ dom(Ψ’) なことに注意すれば簡単に示せる
Type PreservationMemory Update メモリへの代入 m[l := u] が可能であり、 va
lidmem が保存される
Type PreservationMemory Update
k+1 の世界 k の世界
Memory m Memory m’ = m[l := u]
R
Ψ
validmem(m)
Ψ’
validmem(m’)
ref τ τ
l = ??? l = u
u
domain は変わらない
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/