型推論1(単相型) 2007 型推論へ1 強い型付言語の記述 上の煩瑣さを軽減 型推論へ2 型推論へ3 型推論の形式的体系について • 形式的な記号の集まりからなる論理体系 • プログラムの文面を含んだ体系(cf. Hoare logic) • 体系の重要な要件 (1) 健全性 (2) 完全性 (3)推論アルゴリズムの有用性 → a)決定性 b)効率 • 「値」の正当性と「型」の正当性の比較 型推論規則のアイデア(例) E0, E1, E2を式として、 もし E0が bool式であることが示され かつ E1の型がTであることが示され かつ E2の型がTであることが示されたなら その時、式if E0 then E1 else E2は型Tをもつことが示され る これを 形式化して 1. 与えられた式がある型をもつことを証明する(prove) 2. 与えられた式がもつ型を見つける/推論する(find/infer) 言語の型システムを与えるとは • 言語Lの構文規則を与える • (言語Lの意味論を与える) 言語Lの型式の構文(規則)を与える 言語Lの型推論規則を与える – 型推論規則で使われる記法 1. E : T - 式(または文)Eが型Tを持つという命題 2. A - 型環境(前提)と呼ぶ。式の中に現われる変 数や定数が持つ型を与える. A(x) = T は型環境A においては、変数(または名前)xは型Tを持つ。 3. A |- E : T 型判定(type judgment)と呼ばれ、Aの もとで式Eが型Tをもつことを表明・主張する。 If-then-else式の型推論規則 E0,E1,E2を式として、 もし E0がbool型の値をもつことが示され かつ E1の型がTであることが示され かつ E2の型がTであることが示されたなら その時 if E0 then E1 else E2は型Tをもつことが示される これを 形式化して A |- E0 : bool, A |- E1 : T, A |- E2 : T -------------------------------------------------------A |- (if E0 then E1 else E2) : T 単相型(monomorphic type) の推論規則を持つ言語L LLの型式と記法 Lの型推論規則 型推論の例1 型推論の例2 int> 型推論2(多相型の序) 多相型の型推論に向けて • 主型(principal type) • λ計算に型推論を入れる例 ・ 型理論λ→ • 主型の3性質 • 型を持つことの特性 • 多相型の型推論規則を考える上での注意点 主型 • 型多相(type polymorphism, polymorphic type) を許す言語の型推論を説明する上で重要な 概念。 • 定義: 型Tが項tの主型であるとは、 次の1)、2) が成立すること。 1. |- t: T が成立。 2. 任意のT1 に対して、|- t:T1 が成立するなら、T の中の型変数に対する適当な代入σが必ず存在 して、 T1≡Tσ となる。 λ式の型 • 一般のλ式(項)に型を導入する • 閉じたλ式は一般に関数に対応するから、 そ の型は、関数型である。 • 例えば、 λx.x (恒等関数)の定義域の型をTと すると、その値域の型はやはりTである。よっ て、 λx.x : T → T となることは明らか。 型理論λ→ • λ→における項:(term、式)を次のように定義す る: 1. 変数は項である。 (x,y,z等の文字を使って表す) 2. t1、t2が項のとき、t1t2も項である。 3. xが変数、tが項のとき、λx.tは項である。 • λ→における型式(型のsyntax, 記法): 1. 変数( α、β、、、)は型式である。 2. T1,T2が型式のとき、T1→T2も型式である。 項の並び λ→の型推論規則 1. A |- x : T 但しA(x)=Tのとき。 2. A |- f : T1→T2 A |- a : T1 --------------------------------A |- f a : T2 3. A + x : T1 |- t : T2 -----------------------A |- λx.t : T1 →T2 複数の型付けと型変数 • K ≡ λxy.x の型は – – – T1→T2→T1 (T1→T2)→T3→ (T1→T2) … • このようにKの型として整合する型は複数あり得る。 一般に型を値とする型変数α、βなどの文字を用いて、 Kの型を K : α→β→α と表し、このα、βに任意の型を代入すると、Kに整合する 全ての型が得られる。 • すると、α→β→αがKの主型と考えてよい。 λ→の型に関する特徴 • 主型性(principal type properties)ーー Hindley&Seldan 1. 2. 3. • 項 t が型をもつなら、t は主型を持つ。 項 t の主型は計算可能である。(計算するアルゴリズムがある。) 主型を計算するO(n)のアルゴリズムが存在する。 ある項が型を持つ(型付け可能である)ことは、その項は以 下の“良い”性質を持つ。 |- t : T (型をもつならば)かつ t -*-> s ならば、 |- s : T |- t : T ならば(型をもつならば)、どの戦略によっても、簡約は停止し、 t は正規形を持つ。(strong normalizability) 3. |- t : T1 かつ |- s : T2 なら(どちらも型付け可能なら) t s か否かを判定する問題は決定可能である。 1. 2. • 型を持つλ式は限られていて、既に正規形となっている式でも、 型を持たないものもある。 たとえば, λx. xx は型をもたない。(自己適用など) 課題:これ以外に型を持たない正規系をもつ例は??
© Copyright 2025 ExpyDoc