米澤研究室 全体ミーティング 2010/12/22 M2 渡邊裕貴.

Slides:



Advertisements
Similar presentations
コンパイラ演習 第 6 回 2005/11/17 大山 恵弘 佐藤 秀明. 今回の内容 実マシンコード生成 – アセンブリ生成 (emit.ml) – スタブ、ライブラリとのリンク 末尾呼び出し最適化 – 関数呼び出しからの効率的なリターン (emit.ml) –[ 参考 ]CPS 変換 種々の簡単な拡張.
Advertisements

コンパイラ演習 第 6 回 (2011/11/17) 中村 晃一 野瀬 貴史 前田 俊行 秋山 茂樹 池尻 拓朗 鈴木 友博 渡邊 裕貴 潮田 資秀 小酒井 隆広 山下 諒蔵 佐藤 春旗 大山 恵弘 佐藤 秀明 住井 英二郎.
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
(Rubyistのための) 超音速:ML入門
Coq を使った証明 : まとめ 稲葉.
2006/11/9 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
情報処理演習C2 ファイル操作について (2).
ソフトウェア基礎科学 授業資料: 論理関係(logical relations)のお話
Log4netを使ったロギング機能 オガシン.
Log4netを使ったロギング機能 オガシン.
プログラム理論特論 第2回 亀山幸義
最短路問題をGurobiで解こう! 流通最適化工学 補助資料.
2006/11/30 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
OCommand : 型安全な シェルプログラミングのための 領域特化言語の提案
Survey: A Type System for Certified Binaries
プログラミング言語論 第1回 導入 情報工学科 篠埜 功.
Natural Semantics 実行過程の、最初と最後の状態(state)の関係を考える。
Semantics with Applications
プログラミング言語論 第4回 手続きの引数機構 変数の有効範囲
情報工学通論 プログラミング言語について 2013年 5月 28日 情報工学科 篠埜 功.
プログラム理論特論 第2回 亀山幸義
プログラミング言語論 第1回 導入 情報工学科 篠埜 功.
2007/1/11 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
Tokuda Lab. NISHIMURA Taichi
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
論文紹介: A Second Look at Overloading
情報工学通論 プログラミング言語について 2014年 5月 20日 情報工学科 篠埜 功.
Solving Shape-Analysis Problems in Languages with Destructive Updating
型付きアセンブリ言語を用いた安全なカーネル拡張
第4章 組合せ論理回路 (4) Quine McCluskeyの方法.
プログラミング言語論プログラミング言語論 プログラムの意味論 水野嘉明
プログラミング言語論 第3回 BNF記法について(演習付き)
PROGRAMMING IN HASKELL
分布定数回路(伝送線路)とは 電圧(電界)、電流(磁界)は回路内の位置に依存 立体回路 TE, TM波
暗黙的に型付けされる構造体の Java言語への導入
プログラミング言語論 第9回 Hoare論理の練習問題 手続きの引数機構 変数の有効範囲
ゴールドバッハ予想と その類似問題の考察 情報科学科 白柳研究室   小野澤純一.
Macro Tree Transducer の 型検査アルゴリズム
国立情報学研究所 ソフトウェア研究系 助教授/
 型推論1(単相型) 2007.
依存型で型付けされた 副作用のある関数のための 型保存コンパイラ
ATTAPL輪講 (第4回) 続 Dependent Types
フロントエンドとバックエンドのインターフェース
ASIAN 2003 報告 前田俊行.
プログラミング言語論 第5回 手続きの引数機構 変数の有効範囲
原子核物理学 第5講 原子核の振動と回転.
情報工学通論 プログラミング言語について 2010年 6月 22日 情報工学科 篠埜 功.
プログラミング言語論 第9回 情報工学科 木村昌臣 篠埜 功.
 型推論3(MLの多相型).
Type Systems and Programming Languages
千代浩司 高エネルギー加速器研究機構 素粒子原子核研究所
千代浩司 高エネルギー加速器研究機構 素粒子原子核研究所
米澤研究室 全体ミーティング 2010/07/07 M2 渡邊裕貴.
国立情報学研究所 ソフトウェア研究系 助教授/
Type Systems and Programming Languages ; chapter 13 “Reference”
第7回  命題論理.
プログラミング言語論 第10回 情報工学科 篠埜 功.
18. Case Study : Imperative Objects
全体ミーティング 2010/05/19 渡邊 裕貴.
SMP/マルチコアに対応した 型付きアセンブリ言語
全体ミーティング(6/3) 修士2年 飯塚 大輔.
型理論 ラッセルのパラドックス: 「集合の集合」は矛盾を引き起こす。 ラッセル、ホワイトヘッド 「プリンキピアマセマティカ」
全体ミーティング(9/15) 村田雅之.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
6.5 アダマール(Hadamard)変換 (1)アダマール変換とは
千代浩司 高エネルギー加速器研究機構 素粒子原子核研究所
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
プログラミング言語論 プログラミング言語論 演習7 解答と解説 演習7 解答と解説 1.
Static Enforcement of Security with Types
【CG-RISM】水中のフォースカーブシミュレーション
Presentation transcript:

米澤研究室 全体ミーティング 2010/12/22 M2 渡邊裕貴

研究内容 型システムによる CPS 変換の検証 型を使って項の semantics を表す From λ→ to λ≤{} From λP to ?

CPS 変換 継続を受け取って評価結果を継続に渡す ように項を変換する [[x]] = λk. k x [[λx. t]] = λk. k (λx. [[t]]) [[t1 t2]] = λk. [[t1]] (λv1. v1[[t2]] k) call-by-name [[t1 t2]] = λk. [[t1]] (λv1. [[t2]] (λv2. v1 v2 k)) call-by-value G.D. Plotkin. “Call-by-name, call-by-value and the lambda-calculus.” 1975

[[Γ]] ⊢ [[t]] : ([[T]] → ⊥) → ⊥ 何を証明するのか? CPS 変換前の項が型付けされているなら 変換後の項も必ず型付けされること If Γ ⊢ t : T then [[Γ]] ⊢ [[t]] : ([[T]] → ⊥) → ⊥

やろうとしていたこと 依存型付きラムダ計算の CPS 変換における型付けの保存の証明 Call-by-name の場合は既に証明されている G. Barthe, et al. “CPS Translations and Applications: The Cube and Beyond.” 1999. Call-by-value の場合を証明したい

⊢ natlist 2 ≡ natlist ((λx. x + 1) 1) 依存型付きラムダ計算 型の中に項が現れる ⊢ (100 :: 200 :: []) : natlist 2 型に対する型付けを行う ⊢ natlist :: nat → type 型の等価性の判定を行う ⊢ natlist 2 ≡ natlist ((λx. x + 1) 1) 項の型付けと型の型付けが 相互再帰的に定義される

うまくいかない…… [[Γ]], k : [[T[x ↦ t]]] → ⊥, … ⊢ k : [[T]][x ↦ v] → ⊥ ⋮ v = t ? [[Γ]], k : [[T[x ↦ t]]] → ⊥, … ⊢ k : [[T]][x ↦ v] → ⊥ ⋮ [[Γ]] ⊢ [[f t]] : ([[T[x ↦ t]]] → ⊥) → ⊥

Singleton Types 項を具体的に指定できる型 ⊢ 1+3 : {4 : Nat} ⊢ 1+3 : Nat ⊢ λn. n+1 : Πn:Nat. {n+1 : Nat} ⊢ λn. n+1 : Nat → Nat ⊢ λn. n+1 : Πn:{3 : Nat}. {4 : Nat} ⊢ λn. n+1 : Nat → Nat D. Aspinall. “Subtyping with singleton types.” 1995

[[Γ]] ⊢ [[t]] : ({[[t]] (λx. x) : [[T]]} → ⊥) → ⊥ 証明する命題を変更 継続が受け取る値を singleton type によって表わす If Γ ⊢ t : T then [[Γ]] ⊢ [[t]] : ({[[t]] (λx. x) : [[T]]} → ⊥) → ⊥

関数の戻り値を singleton type で表したい しかし自己言及的な型が必要 これまでの規則では型付けできない…… f : Πx:Nat. {f x : Nat} 関数の戻り値を singleton type で表したい