tapl6

14
Types And Programming Languages Ch.6 Nameless Representation of Terms 本位田研 January 24, 2012 (本位田研) TAPL6 January 24, 2012 1 / 12

Upload: fan-jiang

Post on 25-May-2015

217 views

Category:

Education


0 download

TRANSCRIPT

Page 1: Tapl6

TypesAndProgrammingLanguagesCh.6

Nameless

RepresentationofTerm

s

本位田研

January24,2012

姜(本位田研)

TAPL6

January24,2012

1/12

Page 2: Tapl6

5章での問題

変数名が衝突すると

暗黙にに変数名を変更する必要がある

↓変数名の変更が不要なものを作る

↓deBruijnterm

sを導入してみよう

姜(本位田研)

TAPL6

January24,2012

2/12

Page 3: Tapl6

5章での問題

変数名が衝突すると

暗黙にに変数名を変更する必要がある

↓変数名の変更が不要なものを作る

↓deBruijnterm

sを導入してみよう

姜(本位田研)

TAPL6

January24,2012

2/12

Page 4: Tapl6

5章での問題

変数名が衝突すると

暗黙にに変数名を変更する必要がある

↓変数名の変更が不要なものを作る

↓deBruijnterm

sを導入してみよう

姜(本位田研)

TAPL6

January24,2012

2/12

Page 5: Tapl6

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

Page 6: Tapl6

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

Page 7: Tapl6

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

Page 8: Tapl6

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

Page 9: Tapl6

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

Page 10: Tapl6

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

Page 11: Tapl6

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

Page 12: Tapl6

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

Page 13: Tapl6

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

Page 14: Tapl6

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