依存型で型付けされた 副作用のある関数のための 型保存コンパイラ

Slides:



Advertisements
Similar presentations
2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
Advertisements

プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
2006/10/26 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
Coq を使った証明 : まとめ 稲葉.
ソフトウェア基礎科学 授業資料: 論理関係(logical relations)のお話
2006/11/30 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
プログラミング基礎I(再) 山元進.
2006/10/12 山下 諒蔵 佐藤 春旗 前田俊行 大山 恵弘 佐藤 秀明 住井 英二郎
型宣言 (Type Declarations)
コンパイラ 第9回 コード生成 ― スタックマシン ―
プログラミング言語論 第6回 型 情報工学科 篠埜 功.
型宣言(Type Declarations)
2012年度 計算機システム演習 第4回 白幡 晃一.
Survey: A Type System for Certified Binaries
Semantics with Applications
2006/10/19 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井英二郎
条件式 (Conditional Expressions)
コンパイラ演習 第 4 回 (2011/10/27) 中村 晃一 野瀬 貴史 前田 俊行 秋山 茂樹 池尻 拓朗 鈴木 友博 渡邊 裕貴
  【事例演習6】  数式インタプリタ      解 説     “インタプリタの基本的な仕組み”.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
2007/1/11 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
Tokuda Lab. NISHIMURA Taichi
米澤研究室 全体ミーティング 2010/12/22 M2 渡邊裕貴.
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
Solving Shape-Analysis Problems in Languages with Destructive Updating
POPLミーティング 5/11 型付きアセンブリ言語の 一般化実装に関する展望
TAL : Typed Assembly Language について
型付きアセンブリ言語を用いた安全なカーネル拡張
プログラミング言語入門 手続き型言語としてのJava
暗黙的に型付けされる構造体の Java言語への導入
最適化の方法 中田育男著 コンパイラの構成と最適化 朝倉書店, 1999年 第11章.
コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」 第1週目 アセンブリ言語講座
ソフトウェア制作論 平成30年10月3日.
お仕事にまったく役にたたない内容のコードレビューやりたいと思います。
A Provably Sound TAL for Back-end Optimization について
国立情報学研究所 ソフトウェア研究系 助教授/
 型推論1(単相型) 2007.
Java8について 2014/03/07.
コンパイラ演習 第11回 2006/1/19 大山 恵弘 佐藤 秀明.
ATTAPL輪講 (第4回) 続 Dependent Types
C言語を用いたマシン非依存な JITコンパイラ作成フレームワーク
Development of Certified Program Translators to Verify Low-Level Language Programs Toshihiro YOSHINO (Yonezawa Lab, Univ. of Tokyo)
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
先週の復習: CPU が働く仕組み コンピュータの構造 pp 制御装置+演算装置+レジスタ 制御装置がなければ電卓と同様
コンパイラ 2011年10月20日
 型推論3(MLの多相型).
補講:アルゴリズムと漸近的評価.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
米澤研究室 全体ミーティング 2010/07/07 M2 渡邊裕貴.
Type Systems and Programming Languages ; chapter 13 “Reference”
Eijiro Sumii and Naoki Kobayashi University of Tokyo
18. Case Study : Imperative Objects
全体ミーティング 2010/05/19 渡邊 裕貴.
SMP/マルチコアに対応した 型付きアセンブリ言語
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
コンパイラ 2012年10月11日
PROGRAMMING IN HASKELL
全体ミーティング(6/3) 修士2年 飯塚 大輔.
型理論 ラッセルのパラドックス: 「集合の集合」は矛盾を引き起こす。 ラッセル、ホワイトヘッド 「プリンキピアマセマティカ」
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
POPL ミーティング 6/7 Inside ADL
全体ミーティング(9/15) 村田雅之.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
6.3 インタプリタ (1)インタプリタ(interpreter)とは
Static Enforcement of Security with Types
Presentation transcript:

依存型で型付けされた 副作用のある関数のための 型保存コンパイラ 渡邊 裕貴 コンピュータ科学専攻 米澤研究室

そのコンパイラ、バグってない? 足し算をするプログラムをコンパイルしたら引き算をするアセンブリが出てきた 最適化をかけたら プログラムの動作がおかしくなった

コンパイラの検証 ソースの 意味論 ソース コード 意味論が 一致することを 証明 構文の変換 アセンブリの 意味論 アセンブリ コード

既存研究 Lambda Tamer CompCert … 意味論を扱う証明はとても複雑になりがち A. Chlipala in PLDI 2007 単純型付きラムダ計算のコンパイラの作成・検証 http://ltamer.sourceforge.net/ CompCert X. Leroy in POPL 2006 S. Blazy et al. in FM 2006 C のサブセットから PowerPC アセンブリへのコンパイラの作成・検証 http://compcert.inria.fr/ … 意味論を扱う証明はとても複雑になりがち

本研究のアプローチ コードの挙動を 規定できる型 型保存 コンパイル 挙動 = 意味論

コードの挙動を規定できる型 関数の持つ副作用を表す論理式を 型の中に書く コードの挙動を型でチェック Hoare Type Theory A. Nanevski et al. in ICFP 2006 依存型 R. Burstall and B. Lampson 1984 Separation logic J.C. Reynolds in LICS 2002

コードの挙動を規定できる型の例 コード: λp. v = *p; *p = v + 1; return v 型: Πp:ptr. { ∃x:int. p ↦ x } v:int { p ↦ v ⊸ p ↦ v + 1 } 本研究では簡単な整数演算とメモリの読み書きができる言語を対象とする

型保存コンパイル 型およびその導出木も変換する G. Morrisett et al. 1999 ソース コード 型 型導出木 アセンブリ コード 型 型導出木

本研究での型保存コンパイル 型に含まれる論理式が意味論の一致を保証 ソース コード 型 型導出木 アセンブリ コード 型 型導出木 意味論

実装法 コンパイラは Coq を使って書く 型保存性を Coq で証明 書いた証明が正しいか検証するプログラム http://coq.inria.fr/ 型保存性を Coq で証明

実装の進捗 CPS 変換 クロージャ変換: 未着手 Hoisting: 未着手 レジスタ割当: 未着手 単純型付きラムダ計算: 実装済 依存型: 実装中 Separation logic: 未着手 クロージャ変換: 未着手 Hoisting: 未着手 レジスタ割当: 未着手

まとめ: 型保存コンパイラの作成 目的 手法 進捗 コンパイルの過程でコードの挙動が変わっていないことを保証 意味論の保存の証明をより簡単に コードの挙動を規定できる型 型保存コンパイル 進捗 最初の CPS 変換の部分を実装中

コンパイラの構成 CPS 変換 クロージャ変換 Hoisting レジスタ割当 ソース コード 型 型導出木 アセンブリ コード 型

依存型 コードの挙動を型で規定するための基礎 型の中に論理式を書けるようにする R. Burstall and B. Lampson 1984 型の中に論理式を書けるようにする 恒等関数のコード: λx. x 恒等関数の型: Πx:int. { true } v:int { x = v }

Separation Logic メモリの読み書きに関する挙動を規定 メモリ状態を表す論理式を導入 J.C. Reynolds in LICS 2002 メモリ状態を表す論理式を導入 { true } p1 = malloc(); *p1 = 3; { p1 ↦ 3 } p2 = malloc(); *p2 = 5; { p1 ↦ 3 * p2 ↦ 5 } incr p1; { p1 ↦ 4 * p2 ↦ 5 } incr p2; { p1 ↦ 4 * p2 ↦ 6 } J.C. Reynolds. “Separation logic: a logic for shared mutable data structures.” LICS 2002.

Hoare Type Theory 型付きラムダ計算 + メモリの読み書き 関数の挙動を型の中の論理式で表し検証 A. Nanevski et al. in ICFP 2006 関数の挙動を型の中の論理式で表し検証 依存型 + separation logic インクリメント関数のコード: λp. do v = *p; *p = v + 1; return () インクリメント関数の型: Πp:nat. ∀v:nat. { p ↦nat v } r:unit { p ↦nat v + 1 }

既存研究との比較 本研究 Lambda Tamer CompCert ラムダ計算 + メモリ操作 単純型付きラムダ計算 C のサブセット 仮想アセンブリ PowerPC アセンブリ Coq で証明 型安全 非型安全 型で意味論を規定 型と意味論は無関係

ソースの定義 (仮) t ::= x t t λx. t zero succ t t + t do E 副作用のない項 t ::= x t t λx. t zero succ t t + t do E 副作用のある文 E ::= return t x = eval t; E x = malloc; E x = *t; E *t = t; E 項の型 T ::= nat Πx:T. T {P} x:T {P}

アセンブリの定義 (仮) 命令 I ::= jump v if r jump v move r v add r v v load r r store r r 値 v ::= r レジスタ n 整数リテラル l ラベル 命令の型 T ::= α 型変数 ∀α. T int { rn : Tn | P }

Theorem cps_preserves_typing' : forall (C : sctxt) (t : sterm) (T : stype), C |-s t : T -> forall (C' : cctxt), cctxt_sctxt C C' (vars_in_sterm t) -> forall (t' : cterm), C' |-c t' : cps_type T --> ctbottom -> C' |-c cps t t' : ctbottom. Proof. intros until t; revert C. induction t as [ x | v IH | t1 IH1 t2 IH2 t3 IH3 | t1 IH1 t2 IH2 | b | x t1 IH ] using sterm_ind' with (P2 := fun v => forall (C : sctxt) (T : stype), C |-sv v : T -> cctxt_sctxt C C' (vars_in_sterm v) -> C' |-cv cps_value v : cps_type T). (* case stref *) intros C T H1 C' H2 t' H3. inversion_clear H1 as [ C'' x' T' H' | | | ]. apply (cttapp _ _ _ (cps_type T) _ H3); apply cttref. apply H2. left; reflexivity. assumption.