型推論3(MLの多相型).

Slides:



Advertisements
Similar presentations
プログラミング言語論 第3回 BNF 記法について(演習付き) 篠埜 功. 構文の記述 プログラミング言語の構文はどのように定式化できるか? 例1 : for ループの中に for ループが書ける。 for (i=0; i
Advertisements

ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
人工知能特論2011 No.4 東京工科大学大学院 担当教員:亀田弘之.
Relaxed Dependency Analysis
ソフトウェア基礎科学 授業資料: 論理関係(logical relations)のお話
Javaのための暗黙的に型定義される構造体
2006/11/30 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何.
アルゴリズムとデータ構造1 2007年6月12日
データ構造と アルゴリズム 理工学部 情報システム工学科 新田直也.
5.チューリングマシンと計算.
5.チューリングマシンと計算.
2006/10/12 山下 諒蔵 佐藤 春旗 前田俊行 大山 恵弘 佐藤 秀明 住井 英二郎
演習3 最終発表 情報科学科4年 山崎孝裕.
プログラミング言語論 第6回 型 情報工学科 篠埜 功.
Natural Semantics 実行過程の、最初と最後の状態(state)の関係を考える。
2006/10/19 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井英二郎
ランダムウォークに関するいくつかの話題 ・ランダムウォークの破産問題 ・ランダムウォークの鏡像原理 1 小暮研究会Ⅰ 11月12日
条件式 (Conditional Expressions)
データ構造と アルゴリズム 知能情報学部 新田直也.
プログラム理論特論 第2回 亀山幸義
2007/1/11 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
10.通信路符号化手法2 (誤り検出と誤り訂正符号)
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
プログラミング言語論 第12回 関数型プログラミング 情報工学科 篠埜 功.
論文紹介: A Second Look at Overloading
プログラミング言語論 第3回 BNF記法について(演習付き)
暗黙的に型付けされる構造体の Java言語への導入
7.4 Two General Settings D3 杉原堅也.
Macro Tree Transducer の 型検査アルゴリズム
国立情報学研究所 ソフトウェア研究系 助教授/
 型推論1(単相型) 2007.
依存型で型付けされた 副作用のある関数のための 型保存コンパイラ
計算量理論輪講 chap5-3 M1 高井唯史.
ATTAPL輪講 (第4回) 続 Dependent Types
プログラミング言語論 第10回 練習問題解答例 情報工学科 篠埜 功.
第1章 実世界のモデル化と形式化 3.地物インスタンスの表現
プログラミング言語論 第9回 情報工学科 木村昌臣 篠埜 功.
4. システムの安定性.
構造体と共用体.
ソフトウェア工学 知能情報学部 新田直也.
5.チューリングマシンと計算.
米澤研究室 全体ミーティング 2010/07/07 M2 渡邊裕貴.
国立情報学研究所 ソフトウェア研究系 助教授/
Type Systems and Programming Languages ; chapter 13 “Reference”
第7回  命題論理.
PROGRAMMING IN HASKELL
プログラミング言語論 第10回 情報工学科 篠埜 功.
アルゴリズムとデータ構造1 2009年6月15日
述語論理式の構文と意味 一階述語論理式の構文 一階述語論理式の意味 述語,限量記号 自然言語文の述語論理式表現 解釈 妥当,充足不能
4.プッシュダウンオートマトンと 文脈自由文法の等価性
PROGRAMMING IN HASKELL
Eijiro Sumii and Naoki Kobayashi University of Tokyo
関数型言語の基礎 型なしl計算 型理論 構成的プログラミング GUIにあらわれる関数概念 PBD VL
18. Case Study : Imperative Objects
全体ミーティング 2010/05/19 渡邊 裕貴.
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
アルゴリズムとデータ構造 2010年6月17日
ソフトウェア工学 知能情報学部 新田直也.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
PROGRAMMING IN HASKELL
全体ミーティング(6/3) 修士2年 飯塚 大輔.
型理論 ラッセルのパラドックス: 「集合の集合」は矛盾を引き起こす。 ラッセル、ホワイトヘッド 「プリンキピアマセマティカ」
全体ミーティング(9/15) 村田雅之.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
プログラミング基礎a 第5回 C言語によるプログラミング入門 配列と文字列
 型理論の初歩 2007 fall.
Static Enforcement of Security with Types
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
Presentation transcript:

 型推論3(MLの多相型)

MLの型多相 ML言語設計では、任意の式に多相を許すわけではない。 let-polymorphism let pr = λx. Print(x) in…pr(3)…pr(x=3)… let <名前> = <式1> in <式2> <式2>の中で使われる<名前>の複数の出現に ついてのみ異なる型を持ってよい。この形の制限された 型多相のみが許されている。

MLの多相型の形式化に向けて ナイーブなアプローチ: λ→の型式の中に導入したような“型変数”をもちこみ、次のような単純な推論規則を付加する。   A |- E : T ------------- (*) A |- E : T’ 但し T’はT中の型変数に代入を施したインスタンス この方式では次の2つの問題が生じる:

問題点(1) λx. [succ x not x] :α -> (int x bool)  が証明されてしまう。 (課題: ナイーブなアプローチでこれを証明せよ。)この証明の結果は、我々の“λ抽象”に対する直感から外れたものである。即ちf x =<関数本体>に現われるxは全て同じ値をもつ、ゆえに同じ型を持つはず、という直感に反する!!! 問題点(2) MLでは、いわゆる let-polymorphismという制限された形の多相型の使用のみが言語設計上許されている。これを表すのに上で示した簡単な推論規則(*)では対処できない。即ち: let  id = λx.x in [id(3), id(true)] におけるidはlet内で定義 されたもので、型多相な関数として、この定義が正しく型づけができるようにしたい。   ( letの定義では id : α→α,      本体の中では id : int  int, id : bool  bool )

二つの推論規則の導入 以上の考察から、λ抽象する変数(名前)と、局所定義(let定義)の本体に現われる変数(名前)の型推論規則を区別する必要がありそうである。 λ抽象の場合、本体中のλ変数である変数の複数の出現は同じ値・型としてinstantiateされる。 let定義で定義される名前は、let式の本体では異なる出現は異なる値・型をinstantiateすることができる。 型推論において上の1,2を区別するために、いくつかの概念を導入する(Robin Milner)。

総称型と型スキーマ 総称型変数(generic type variable) 型スキーマ(shallow types) 同じ型変数で、異なる出現で異なるinstantiationすることができるものをいう。 同じ型変数で、全ての出現に対して、常に同じinstantiationしか許されないものを非総称型変数  (non-generic type variable)とよぶ。 型スキーマ(shallow types) 型式Tが型変数α1, … ,αnを含むことがあり得て、かつその中に が現われないとき、      α1, …, αn T の形をした型式を  型スキームとよぶ。またshallow type とも呼ばれる。   ( α. α →α) → (  α. α →α)   非例

型スキームのinstantiation/特化の規則 型スキームをinstantiateした結果の型も、  型スキームでなければならない。すなわち、shallow type の特化したものはshallow type  でなければならない。 α. (α →α)のαにintを代入すると int → intとなりこれは  shallow typeであるのでこの代入は型スキームの特化としてOKである。 α. (α →α)のαに β.β→intを代入して得られるとこの   ( β.β→ int) →  ( β.β→ int)は型スキーム/shallow typeでないので、この代入は型スキームのinstantiationではない。

Generic Instance より形式的な定義: S, S’ をtype schemeとする。S’がSのgeneric instanceとは S > S’ と書き、次の条件を満たす。 S’はSの限量化されている幾つかあるいは全ての型変数に代入を行い、さらに必要があれば、代入の結果、もとのSで自由であった型変数以外のものを限量化して得られる型スキームである。 More precisely, S = α1… αm.τ             S’ = β1… βn.τ’ τ’= [τi/αi]τ for some τ1,…τm’ (m’ ≦ m) βi はSで自由でない。 例:  α. (β →α) > γ.(β→(βxγ))  OK        α. (β →α) > β. γ.(β→(βxγ)) NG

MLについて Meta Languageの略。‘70はじめに、R.Milnerが基本設計。LCF(Language for Computable Logic)という表示的意味論にもとづく、computable functionに関するverification systemのために証明戦略等を記述するメタ言語をもとにして、発展した。 特徴  基本的に関数型言語  非明示的な型多相言語  実用的言語  全ての単純な構文単位がterm(項/式)とみなせる。 ・ SML(Standard ML): 抽象データ型(ADT)と                                       “module”機能を持つ。

MLの型推論の特徴 多相型を持ち、それはshallow typeである。 型推論アルゴリズムは決定可能である。                      決定可能でなくなる。 fix ( letrec) があるので、MLは全ての部分帰納的関数を表現できる。このために型をもつ全てのプログラムが停止するわけではない。(cf. λ→において型をもつλ式は強正規化可能であった。) 課題:λ→の枠組みで不動点演算子が型付けできるか??

μMLの型推論システム1

μMLの型推論システム2

μMLの型推論システム3  αはτ’に出現する全ての型変数のうち、前提Aにも現われないもの。

let-polymorphismの推論例

課題 let f = λx.x in f f の型を求めよ。 (λf. f f )(λx.x)の型付けを試みよ。    証明せよ。

型推論アルゴリズム

Unification(1) Most general unifier

Unification(2)

推論アルゴリズムの導出

推論手続きWのアイデア

推論手続きWのアイデア(2)

μMLの型推論アルゴリズム