10. ●
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)
B
13. ●
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)
:B
14. ●
Simply typed arithmetic expressions
(Extends 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)
:NB
15. ● Untyped lambda-calculus
Syntactic forms
t ::= ... terms v ::=
x variable λx.t abstraction value
λx.t abstraction
t t application
Evaluation rules
t1 → t1'
t1t2 → t1't2 (E-App1)
t2 → t2'
v1t2 → v1t2' (E-App2)
(λx.t12)v2 → [x → v2]t12 (E-AppAbs)
→
25. 「関数型」導入の試み
● 型環境Γ (typing context)
Γ |- t : T と書いたとき、Γは
項 t に含まれる自由変数に関する型制約の
なす順序付集合を表す:
Γ={x1:T1, x2:T2,..., xk:Tk}
Γ, s:S := {x1:T1,..., xk:Tk,s:S}
(s ∈ dom(Γ))
Φ, s:S =: s:S (={s:S})
注) Γ, s1:S1, s2:S2 ≠ Γ, s2:S2, s1:S1
26. ● Simply typed lambda-calculus
Syntactic forms
t ::= ... terms
x variable
λx:T.t abstraction
t t application
v ::=
λx:T.t abstraction value
T ::= terms
T → T type of functions
Γ ::= typing contexts
Φ empty context
Γ, x:T term variable binding
:→
28. ●
Simply typed booleans
as a family of fundamental types
Merged Syntactic forms of types
T ::= types
Bool type of booleans
T → T type of functions
Typing rules
as above.
Bool, Bool → Bool, Bool → (Bool → Bool),...
などが具体的な型として存在
:B
36. 型付けの一意性(証明)
● 方針:
t の取りうるsyntax(項の形式)に応じて場合分けす
る。
● t = x (Case-Variable)
● t = λx:T1.t2 (Case-Abstraction)
●
t = t1 t2 (Case-Application)
●
t = true (Case-True)
● t = false (Case-False)
● t = if t1 then t2 else t3 (Case-If)
37. 型付けの一意性(証明)
● t = λx:T1.t2 (Case-Abstraction)
定理の仮定から、ある型 R が存在し
Γ |- λx:T1.t2 : R
このとき、Lemma 9.3.1 - 2 より
ある型 R2 が存在し、
R = T1 → R2, Γ,x:T1 |- t2 : R2
帰納法の仮定より、t の body t2 の型付けは一意。
したがって、型付け規則 (T-Abs) により
t はその型として R のみを持つ。
38. 型付けの一意性(証明)
残りのケース
●
t = t1 t2 (Case-Application)
●
t = x (Case-Variable)
→ 上と同様
● t = if t1 then t2 else t3 (Case-If)
→ 8章と同様
●
t = true (Case-True)
●
t = false (Case-False)
→ Lemma 9.3.1 からダイレクトに従う
39. 型付けの一意性(証明)
● Lemma 9.3.1 の証明
それぞれの項のsyntaxから、適用できる型付け規則が
一意に定まる。
e.g. t = λx:T1.t2に適用できる規則は (T-Abs) のみ
これにより、補題の主張が従う。
44. Progress(証明)
● 方針:
直前のtyping rule(導出規則)に応じて場合分け。
●
t = x (Case-Variable)
● t = λx:T1.t2 (Case-Abstraction)
●
t = t1 t2 (Case-Application)
● t = true (Case-True)
● t = false (Case-False)
● t = if t1 then t2 else t3 (Case-If)
45. Progress(証明)
● 方針:
直前のtyping rule(導出規則)に応じて場合分け。
●
t = x (Case-Variable)
● t = λx:T1.t2 (Case-Abstraction)
●
t = t1 t2 (Case-Application)
● t = true (Case-True)
● t = false (Case-False)
● t = if t1 then t2 else t3 (Case-If)
52. Preservation: 代入(証明)
● 方針:
直前のtyping rule(導出規則)に応じて場合分け。
●
t = x (Case-Variable)
● t = λx:T1.t2 (Case-Abstraction)
●
t = t1 t2 (Case-Application)
● t = true (Case-True)
● t = false (Case-False)
● t = if t1 then t2 else t3 (Case-If)
53. Preservation: 代入(証明)
● 方針:
直前のtyping rule(導出規則)に応じて場合分け。
●
t = x (Case-Variable)
● t = λx:T1.t2 (Case-Abstraction)
●
t = t1 t2 (Case-Application)
● t = true (Case-True)
● t = false (Case-False)
● t = if t1 then t2 else t3 (Case-If)
59. Preservation: 評価(証明)
● 方針:
直前のtyping rule(導出規則)に応じて場合分け。
●
t = x (Case-Variable)
● t = λx:T1.t2 (Case-Abstraction)
● t = t1 t2 (Case-Application)
●
t = true (Case-True)
●
t = false (Case-False)
● t = if t1 then t2 else t3 (Case-If)
60. Preservation: 評価(証明)
● 方針:
直前のtyping rule(導出規則)に応じて場合分け。
●
t = x (Case-Variable)
● t = λx:T1.t2 (Case-Abstraction)
● t = t1 t2 (Case-Application)
●
t = true (Case-True)
●
t = false (Case-False)
● t = if t1 then t2 else t3 (Case-If)
8章
61. Preservation: 評価(証明)
● t = t1 t2 (Case-Application)
このとき、
Γ |- t1 : T1 → T
Γ |- t2 : T1
t に直前に適用された評価規則として、
E-App1, E-App2, E-AppAbs
の3つがありえる。