tapl6
TRANSCRIPT
TypesAndProgrammingLanguagesCh.6
Nameless
RepresentationofTerm
s
姜
本位田研
January24,2012
姜(本位田研)
TAPL6
January24,2012
1/12
5章での問題
変数名が衝突すると
暗黙にに変数名を変更する必要がある
↓変数名の変更が不要なものを作る
↓deBruijnterm
sを導入してみよう
姜(本位田研)
TAPL6
January24,2012
2/12
5章での問題
変数名が衝突すると
暗黙にに変数名を変更する必要がある
↓変数名の変更が不要なものを作る
↓deBruijnterm
sを導入してみよう
姜(本位田研)
TAPL6
January24,2012
2/12
5章での問題
変数名が衝突すると
暗黙にに変数名を変更する必要がある
↓変数名の変更が不要なものを作る
↓deBruijnterm
sを導入してみよう
姜(本位田研)
TAPL6
January24,2012
2/12
Term
deBruijnterm
s
Inform
aldefinition
Replacingnamed
variablesbynaturalnumbers,where
thenumber
kstandsfor“thevariable
boundbythek’th
enclosingλ.”
Example
λx.xは
λ.0,
λx.λy.x(y
x)は
λ.λ.1(0
1)として表現できる
姜(本位田研)
TAPL6
January24,2012
3/12
Term
6.1.1
fix
=λf.(λ
x.f(λ
y.(x
x)y))
(λx.f(λ
y.(x
x)y))
はfix
=λ.(λ.1(λ
.(1
1)0))
(λ.1(λ
.(1
1)0))
として表現される.
foo=
(λx.(λ
x.x))
(λx.x)
はfoo=
(λ.(λ
.0))
(λ.0)
姜(本位田研)
TAPL6
January24,2012
4/12
Term
Definition:T
erms
各termがいくつ自由変数をもつか,を常に追いながら
termを定義する
Terms
Let
Tbethesm
allestfamilyofsets
{T0,T1,T2,...}st.
1k∈
Tnwhenever
0≤
k<
n;
2ift 1
∈Tnandn
>0,then
λ.t
1∈
Tn−1;
3ift 1
∈Tnandt 2
∈Tnthen
(t1t 2)∈
Tn
Tnを
n-termsと呼ぶ
姜(本位田研)
TAPL6
January24,2012
5/12
Term
namingcontext
Γ=
x�→
4
y�→
3
z�→
2
a�→
1
b�→
0
この
Γが
namingcontextで,
x(y
z)は
4(3
2)
λw.ywは
λ.40
λw.λa.λxは
λ.λ.6
である.
Γ=
xn,xn−1...x0として
表現でき,ここでは
Γ=
x,y,z,a,b
姜(本位田研)
TAPL6
January24,2012
6/12
Shift
シフトと代入
([k�→
s]t)を考える.kが代入によってコンテクストから除去さ
れ,その分シフトする必要がある.
[1�→
s](λ.2)であれば,1が除去されて
2は
1に繰り下げられる.
しかし,除去される番号によっては,繰り下げるべきものとそうで
ないものがあるだろう.
シフト演算子
↑d c(k
)
cを起点に
d分だけ
kを繰り下げる
kが
cより大きければ
dだけ繰り下げる
姜(本位田研)
TAPL6
January24,2012
7/12
Shift
Shifting
Definition:Shifting
↑d c(k
)=
�
k(ifk<
c)
k+
d(ifk≥
c)
↑d c(λ
.t1)
=λ.↑d c+1(t
1)
↑d c(t
1t 2)
=↑d c(t
1)
↑d c(t
2)
また,↑dは
↑d 0をあらわす
姜(本位田研)
TAPL6
January24,2012
8/12
Shift
計算例
↑2(λ
.λ.1(0
2)))
=(λ
.↑2 1λ.1(0
2)))
=(λ
.λ.(↑
2 2(1
(02))))
=(λ
.λ.(↑
2 21
↑2 2(0
2)))
=(λ
.λ.1(↑
2 20
↑2 22))
=(λ
.λ.1(0
4))
↑2(λ
.01(λ
.012))
=λ.↑2 1
(01(λ
.012))
=λ.(↑
2 1(0
1)
↑2 1(λ
.012))
=λ.(↑2 10
↑2 11)(λ
.↑2 2(0
12))
=λ.(03)(λ
.(↑2 2(0
1)
↑2 22))
=λ.(03)(λ
.(↑2 20
↑2 21)4)
=λ.(03)(λ
.014)
姜(本位田研)
TAPL6
January24,2012
9/12
Shift
代入
Definition:Substitution
[j�→
s]k
=
�
s(ifk=
j)
k(o
therwise)
[j�→
s](λ.t
1)=
λ.[j+
1�→
↑1(s)]t 1
[j�→
s](t 1
t 2)=
([j�→
s]t
1[j
�→s]t
2)
姜(本位田研)
TAPL6
January24,2012
10/12
Shift
代入の計算例
namelessformに変換して代入したものが,代入して
namelessformに変換したものと等しいことを確認せよ
Γ=
a,b
[b�→
a](b(λ
x.λy.b))
=a(λ
x.λy.a)
[0�→
1](0(λ
.λ.2))
=[0
�→1]0
[0�→
1](λ.λ.2)
=1(λ
.[1�→
↑11](λ.2))
=1(λ
.[1�→
2](λ.2))
=1(λ
.λ.[2
�→↑12]2)
=1(λ
.λ.[2�→
3]2)
=1(λ
.λ.3)
姜(本位田研)
TAPL6
January24,2012
11/12
Evaluation
Evaluation
P72,5-3とほぼ同様で,違いは
E-AppAbs
Definition:E
-AppAbs
(λ.t
12)v2→
↑−1([0�→
↑1(v
2)]t 1
2)
Example (λ.1
02)(λ
.0)
→↑−1([0�→
↑1(λ
.0)](1
02))
→↑−1([0�→
(λ.↑1 10)](1
02))
→↑−1([0�→
(λ.0)](1
02))
→↑−1(1
(λ.0)2)
→↑−1(1
(λ.0))
↑−12
→↑−11
↑−1(λ
.0)1
→0(λ
.↑−1
10)1
→0(λ
.0)1
姜(本位田研)
TAPL6
January24,2012
12/12