6. ●
Untyped booleans
Syntactic forms
t ::= v ::=
true true
false false
if t then t else t
Evaluation rules
if true then t2 else t3 → t2 (E-IfTrue)
if false then t2 else t3 → t3 (E-IfFalse)
t1 → t1'
if t1 then t2 else t3 → if t1' then t2 else t3
(E-If)
7. ●
Untyped arithmetic expressions
(Extends untyped booleans)
New Syntactic forms
t ::= ... v ::= ...
0 nv
succ t
pred t nv ::=
iszero t 0
succ nv
10. 型付け規則の導入
● Untyped arithmetic expressionsの各項に
「型」を付ける
● そのために、以下の型のsyntaxと型付け規則を
導入する
● Notation
S, T, U, … metavariables of types
t : T typing relation
“a term t has type T”
11. ●
Simply typed booleans
New Syntactic forms
T ::= types
Bool type of booleans
New typing rules
true : Bool (T-True)
false : Bool (T-False)
t1 : Bool t2 : T t3 : T
if t1 then t2 else t3 : T
(T-If)
12. ● Simply typed arithmetic expressions
(Extends untyped A.E. and simply typed Bool.)
New Syntactic forms
T ::= ... types
Nat type of natural numbers
New typing rules
0 : Nat (T-True)
t1 : Nat
succ t1 : Nat (T-Succ)
t1 : Nat
pred t1 : Nat (T-Pred)
t1 : Nat
iszero t1 : Bool (T-Iszero)
13. 型付け規則の導入
● ある項 t について、ある型 T が存在し
t : T なるとき、t はwell typed(型付けされ
ている)という
17. 型付けの一意性(具体例)
iszero 0 0 pred 0
↑ ↑ ↑ subterms
if iszero 0 then 0 else pred 0
18. 型付けの一意性(具体例)
0 0
↑ ↑ subterms
iszero 0 0 pred 0
↑ ↑ ↑
if iszero 0 then 0 else pred 0
19. 型付けの一意性(具体例)
0 : Nat 0 :Nat
iszero 0 0 pred 0
if iszero 0 then 0 else pred 0
20. 型付けの一意性(具体例)
0 : Nat 0 : Nat
iszero 0 : Bool 0 : Nat pred 0 : Nat
if iszero 0 then 0 else pred 0
21. 型付けの一意性(具体例)
0 : Nat 0 : Nat
iszero 0 : Bool 0 : Nat pred 0 : Nat
if iszero 0 then 0 else pred 0 : Nat
22. 型付けの一意性(証明)
● 方針:
subterms に関する数学的帰納法で証明する。
つまり、
項 t に対し、すべての直下のsubtermに関して定理の
主張(型付けの一意性)が成り立っていると仮定した
とき、
t の型が一意に定まることを示す。
23. 型付けの一意性(証明)
● 方針:
t の取りうるsyntax(項の形式)に応じて場合分けす
る。
● t = true (Case-True)
● t = false (Case-False)
●
t = if t1 then t2 else t3 (Case-If)
●
t = 0 (Case-Zero)
● t = succ t1 (Case-Succ)
● t = pred t1 (Case-Pred)
● t = iszero t1 (Case-Iszero)
24. 型付けの一意性(証明)
● t = if t1 then t2 else t3 (Case-If)
定理の仮定から、ある型 R が存在し
t = if t1 then t2 else t3 : R
このとき、Lemma 8.2.2 - 3 より
t1 : Bool, t2 : R, t3 : R
帰納法の仮定により、各 ti の型付けは一意。
したがって、型付け規則 (T-If) により
t はその型として R のみを持つ。
25. 型付けの一意性(証明)
残りのケース
●
t = succ t1 (Case-Succ)
●
t = pred t1 (Case-Pred)
●
t = iszero t1 (Case-Iszero)
→ t = if t1 then t2 else t3 と同様
●
t = true (Case-True)
●
t = false (Case-False)
● t = 0 (Case-Zero)
→ Lemma 8.2.2 からダイレクトに従う
26. 型付けの一意性(証明)
● Lemma 8.2.2 の証明
それぞれの項のsyntaxから、適用できる型付け規則が
一意に定まる。
e.g. t = true に適用できる規則は (T-True) のみ
これにより、補題の主張が従う。
31. Progress(証明)
● 方針:
導出に関する数学的帰納法で証明する。
つまり、
t : T に対し、そのすべてのsubtermに関して定理の
主張(それらがvalueである、または前進評価が可能
であること)を仮定したときに、
t 自身も同様にvalueである、または前進評価が可能
であることを示す。
32. Progress(証明)
● 方針:
直前のtyping rule(導出規則)に応じて場合分け。
●
t = true : T-True
● t = false : T-False
●
t = if t1 then t2 else t3 : T-If
● t = 0 : T-Zero
● t = succ t1 : T-Succ
● t = pred t1 : T-Pred
● t = iszero t1 : T-Iszero
33. Progress(証明)
● 方針:
直前のtyping rule(導出規則)に応じて場合分け。
●
t = true : T-True
● t = false : T-False
●
t = if t1 then t2 else t3 : T-If
● t = 0 : T-Zero
● t = succ t1 : T-Succ
● t = pred t1 : T-Pred
● t = iszero t1 : T-Iszero
34. Progress(証明)
● Case-T-If
このとき、
t = if t1 then t2 else t3 (t : T)
t1 : Bool, t2 : T, t3 : T
帰納法の仮定より、subterm t1 について
(i) t1 は value
(ii) ある t1' が存在し、 t1 → t1'
35. Progress(証明)
● Case-T-If
(i) t1 は value のとき
Lemma 8.3.1 より、t1 = true or t1 = false
⇒ t に評価規則 E-IfTrue または E-IfFalse を
適用可能
⇒ t → t2 (E-IfTrue) または t → t3 (E-IfFalse)
(ii) ある t1' が存在し、 t1 → t1' のとき
t に評価規則 E-If を適用可能
⇒ t = if t1 then t2 else t3
→ if t1' then t2 else t3
36. Lemma8.3.1(Canonical Forms)
(i) v が Bool型のvalueのとき、
v = true or v = false
(ii) v が Nat型のvalueのとき、
v = nv
証明:
Simply typed A.E. において、valueの取りうる
syntactic form は true, false, 0, succ nv の4種
(i) v = 0 と仮定する。
補題の仮定より、0 : Bool
⇒ Lemma 8.2.2(inversion lemma)-4 に矛盾
37. Preservation(証明)
● 方針:
導出に関する数学的帰納法で証明する。
つまり、
t : T に対し、そのすべてのsubtermに関して定理の
主張(評価によって型が保存されること)を仮定した
ときに、
t 自身も同様に、評価によって型が保存されることを
示す。
38. Preservation(証明)
● 方針:
直前のtyping rule(導出規則)に応じて場合分け。
●
t = true : T-True
● t = false : T-False
●
t = if t1 then t2 else t3 : T-If
● t = 0 : T-Zero
● t = succ t1 : T-Succ
● t = pred t1 : T-Pred
● t = iszero t1 : T-Iszero
39. Preservation(証明)
● 最も非自明なCase-T-Ifを証明する。
このとき、
t = if t1 then t2 else t3 (t : T)
t1 : Bool, t2 : T, t3 : T
定理の仮定より、ある t' について
t → t'
このとき用いられる評価規則としては、 t のsyntax
より
E-IfTrue, E-IfFalse, E-If
の3通りが考えられる。
40. Preservation(証明)
(i) E-IfTrue の場合
このとき、t1 = true, t' = t2
t2 : T であったので、t' : T
(ii) E-IfFalse の場合
このとき、t1 = false, t' = t3
t3 : T であったので、t' : T
(iii) E-If の場合
このとき、t1 → t1', t' = if t1' then t2 else t3
いま、t1 : Bool であるから、
帰納法の仮定により、t1': Bool
41. Preservation(証明)
よって、
t' = if t1' then t2 else t3
t1' : Bool, t2 : T, t3 : T
⇒型付け規則 T-If により、
t' = if t1' then t2 else t3 : T
● その他のケースについても同様に示せる。