第8章 Typed Arithmetic Expressions

第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
はすべての型システムに要請される基本
的な性質である。