第8章 Typed Arithmetic Expressions 情報理工学系研究科 米澤研 M1 田渕 直 ([email protected]) 本章の目的と構成 • 第3章で論じた小さな言語に型システムを 導入し、言語がどのように強化されるかを 見る。 • 非常に単純な型システムの定義と性質を 調べることによって型システムの概略につ いて理解する。 8.1 Types • 最初に第3章の言語をおさらいして、その 問題点と、型の導入による解決法につい て述べる。 構文の復習 • Terms (項) t ::= true | false | if t then t else t | 0 | succ t | pred t | iszero t • Values (値) v ::= true | false | nv nv ::= 0 | succ nv 型システムの目的 (1/3) • 任意の term は、最終的に value に評価されるか “stuck” 状態に陥る。 • “stuck” 状態はプログラムエラーや意味のないプ ログラムに相当。 • ⇒ 実際に評価する「以前に」これを検出できれば 嬉しい。 • ⇒ そのため (この言語では) 数値(nv)に評価され る項とbool値に評価される項を区別する必要が ある。 型システムの目的 (2/3) • 前項の目的のため、2つの「型」: Nat と Bool を導入。 • 「項 t が型 T を持つ」とは、t が型 T として 適切な形の値に評価されることが静的に = 実際の評価なしに示されることをいう。 型システムの目的 (3/3) • 例 if true then false else true は型 Bool を持 つ pred(succ(pred(succ 0))) は型 Nat を持つ • 正しい型を持つ項は stuck しないが、逆は 必ずしも真ではない (c.f. Exercise 8.3.5)。 例 if true then 0 else false など 8.2 The Typing Relation • この言語の typing relation は “t : T” (or t ∈ T) のように表記され、一連の構文と型付 け規則によって定義される (fig. 8-1, 8-2). • 定義 8.2.1 Typing relation はこれらの規則を満たす最 小の二項関係。 補題8.2.2 Inversion Of The Typing Relation (1/2) 1. 2. 3. 4. 5. 6. 7. true : R ならば R = Bool false : R ならば R = Bool if t1 then t2 else t3 : R ならば t1 : Bool, t2 : R, t3 : R 0 : R ならば R = Nat succ t1 : R ならば R = Nat かつ t1 : Nat pred t1 : R ならば R = Nat かつ t1 : Nat iszero t1 : R ならば R = Bool かつ t1 : Nat 証明: 定義より明らか。 補題8.2.2 Inversion Of The Typing Relation (2/2) • この補題により、ある有効な型付けの結果 が与えられると、その結果がどのように生 成されるかを示すことができるので、補題 は generation lemma とも呼ばれる。 • また、補題は項の型を計算する再帰的ア ルゴリズムとも直接に結びついている。 Typing derivation • 3.5 で導入した evaluation derivation と同様 に、typing derivation というものを導入する。 • ペア (t, T) が typing relation に含まれるこ とは、t : T を導く導出によって保証される。 定理8.2.3 Uniqueness Of Type • 任意の項 t は高々一つの型を持つ。 i.e. t が型付け可能なら、その型は唯一つ。 さらに、その型付けの導出も唯一つである。 • 証明: t の構造に関する帰納法と補題8.2.2 による (c.f. Note 8.2.3)。 Uniqueness Of Type (補足) • 型システムが複雑になると、一つの項が複 数の型・導出を持つということが起こり、定 理8.2.3 は必ずしも成り立たなくなる。 例: Subtyping のある型システム (15章). • Typing relation の性質は、導出木に関する 帰納法によって示されることが多い。 8.3 Safety = Progress + Preservation • 型システムの最も基本的な性質は「安全 性」(or 健全性)。 i.e. 正しく型付けされたプログラムは「おか しなこと = stuck 状態」にならない。 • 安全性は progress と preservation の2つの 性質を示すことによって導かれる。 Progress と Preservation • Progress: 正しく型付けされた項は stuck 状 態にならない (値であるか、いずれかの評 価規則を適用できる)。 • Preservation: 正しく型付けされた項の評価 が1ステップ進んでも、結果の項はやはり 正しく型付けされている。 補題8.3.1 Canonical Forms • 値に関して、以下が成立する (c.f. Note 8.3.1)。 1. v が Bool型の値ならば、 v は true か false。 2. v が Nat型の値ならば、 v は Figure 3-2 の 構文に従った数値。 定理8.3.2 Progress • t が正しく型付けされた項であれば、t は値 であるか、ある t’ に対して t → t’ である (c.f. Note8.3.2)。 • つまり、正しく型付けされた項は stuck 状 態に陥ることがない。 定理8.3.3 Preservation Of Types • t : T かつ t → t’ ならば、 t’ : T である (c.f. Note 8.3.3)。 • つまり、評価の前後で型は保存される。 • Preservation of types は subject reduction (or subject evaluation) とも呼ばれる。 Progress と Preservation: まとめ • Uniqueness of types は一般には成り立た ない性質だったが、progress と preservation はすべての型システムに要請される基本 的な性質である。
© Copyright 2024 ExpyDoc