02.03.2015 Views

輪講 — 論理と計算のしくみ 5.3 型付きλ計算 (前半)

輪講 — 論理と計算のしくみ 5.3 型付きλ計算 (前半)

輪講 — 論理と計算のしくみ 5.3 型付きλ計算 (前半)

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>—</strong> <br />

<strong>5.3</strong> λ ( )<br />

(id:tarao)<br />

<br />

2012-01-26<br />

1


, .<br />

<br />

.<br />

, 2007.<br />

J. C. Mitchell.<br />

Foundations for Programming Languages.<br />

MIT Press, 1996.<br />

B. C. Pierce.<br />

Types and Programming Languages.<br />

MIT Press, 2002.<br />

2


(λx A→B .xx)(λx.xx)<br />

◮ x <br />

A → B <br />

◮ <br />

A ◮ <br />

A → B (A × B )<br />

◮ A → B ∈ A ? ?<br />

⇒ <br />

<br />

<br />

?<br />

3


[1/3] <br />

<br />

◮ <br />

◮ <br />

<br />

◮ <br />

◮ <br />

<br />

◮ <br />

<br />

◮ <br />

4


[2/3] <br />

<br />

◮ , <br />

◮ , , <br />

◮ <br />

◮ , <br />

<br />

◮ , <br />

◮ <br />

, <br />

◮ <br />

◮ XSS, <br />

5


[3/3] <br />

<br />

◮ λ <br />

( )<br />

<br />

◮ <br />

◮ Gödel System T, Coq<br />

◮ , , <br />

◮ <br />

◮ OCaml let rec<br />

◮ Gradual Typing<br />

6


λ<br />

◮ (a), (b)<br />

◮ <br />

◮ <br />

◮ 1 <strong>—</strong> (c)<br />

◮ <br />

◮ <br />

◮ 2 <strong>—</strong> <br />

(d)<br />

◮ <br />

◮ <br />

7


(α, β, γ)<br />

◮ <br />

(int )<br />

◮ <br />

(A, B, C)<br />

A ::= α | A → A<br />

<br />

A ::= α | A → A | A × A | A + A<br />

→ <br />

×, + <br />

9


[1/2]<br />

<br />

x A ⊢ M : A M A<br />

<br />

⊢ x A : A<br />

⊢ M : B<br />

⊢ λx A .M : A → B<br />

⊢ M : A ⊢ N : B<br />

⊢ (M, N) : A × B<br />

⊢ M : A → B ⊢ N : A<br />

⊢ MN : B<br />

⊢ L : A × B<br />

π 1 (L) : A<br />

⊢ L : A × B<br />

π 2 (L) : B<br />

10


[2/2] <strong>—</strong> <br />

M (M is well-typed)<br />

◮ <br />

⊢ M : A <br />

<br />

λx A .x A x A<br />

<br />

◮ <br />

11


<strong>—</strong> <br />

◮ <br />

◮ <br />

→ β <br />

◮ → β <br />

Theorem (<br />

(subject reduction))<br />

⊢ M : A M → β N ⊢ N : A<br />

Theorem ( R )<br />

⊢ M : A M → β N , ⊢ N : B <br />

BRA.<br />

◮ R = <br />

13


[1/2]<br />

Lemma ( )<br />

⊢ M : A x B ⊢ N : B <br />

⊢ M[x := N] : A.<br />

15


[2/2] <strong>—</strong> [1/3]<br />

: M <br />

◮ M = y <br />

◮ y = x <br />

1 y = x ⊢ y B : B<br />

2 ⊢ M : A B = A<br />

3 M[x := N] = N<br />

4 <br />

B = A ⊢ N : A<br />

◮ y ≠ x <br />

1 y A 2 M[x := N] = y<br />

3 <br />

⊢ y A : A<br />

16


[2/2] <strong>—</strong> [2/3]<br />

: M <br />

◮ M = M 1 M 2 <br />

1 <br />

⊢ M 1 : C → A ⊢ M 2 : C<br />

2 IH ⊢ M 1 [x := N] : C → A<br />

3 IH ⊢ M 2 [x := N] : C<br />

4 M 1 [x := N]M 2 [x := N] = (M 1 M 2 )[x := N]<br />

5 <br />

⊢ (M 1 M 2 )[x := N] : A<br />

17


[2/2] <strong>—</strong> [3/3]<br />

: M <br />

◮ M = λy A 1<br />

.L <br />

1 A = A 1 → A 2 ⊢ L : A 2<br />

2 λz A 1<br />

.L[y := z] = α λy A 1<br />

.L <br />

y ≠ x y N <br />

<br />

3 λy A 1 .L[x := N] = (λyA 1<br />

.L)[x := N]<br />

4 IH ⊢ L[x := N] : A 2<br />

5 <br />

⊢ (λy A 1 .L)[x := N] : A 1 → A 2<br />

18


[1/2]<br />

Theorem (<br />

(subject reduction))<br />

⊢ M : A M → β N ⊢ N : A<br />

20


[2/2] <strong>—</strong> [1/2]<br />

: M → β N <br />

◮ Beta <br />

1 M = (λx B .M 1 )M 2 → β M 1 [x := M 2 ] = N<br />

2 <br />

⊢ M 1 : A ⊢ M 2 : B<br />

3 <br />

⊢ M 1 [x := M 2 ] : A<br />

◮ Lam <br />

1 M = λx B .L → β λx B .L ′ = N L → β L ′<br />

2 A = B → C ⊢ L : C<br />

3 IH ⊢ L ′ : C<br />

4 <br />

⊢ λx B .L ′ : B → C<br />

21


[2/2] <strong>—</strong> [2/2]<br />

: M → β N <br />

◮ AppL <br />

1 M = M 1 M 2 → β M 1M ′ 2 = N M 1 → β M 1<br />

′<br />

2 <br />

⊢ M 1 : B → A ⊢ M 2 : B<br />

3 IH ⊢ M 1 ′ : B → A<br />

4 <br />

⊢ M 1 ′ M 2 : A<br />

◮ AppR <br />

1 M = M 1 M 2 → β M 1 M 2 ′ = N M 2 → β M 2<br />

′<br />

2 <br />

⊢ M 1 : B → A ⊢ M 2 : B<br />

3 IH ⊢ M 2 ′ : B<br />

4 <br />

⊢ M 1 M 2 ′ : A<br />

22


[1/4]<br />

<br />

<br />

24


[2/4]<br />

(λx.xx)(λx.xx)<br />

◮ <br />

◮ <br />

◮ <br />

?<br />

◮ <br />

?<br />

◮ <br />

◮ <br />

25


[3/4] <strong>—</strong> [1/2]<br />

β <br />

M ∈ NF β ⇐⇒ M β <br />

β <br />

M ⇓ β N ⇐⇒<br />

M = M 0 → β M 1 → β · · · → β M n = N ∈ NF β<br />

26


[3/4] <strong>—</strong> [2/2]<br />

Definition (<br />

)<br />

M , N <br />

M ⇓ β N.<br />

◮ <br />

1 ◮ <br />

Definition (<br />

SN)<br />

M , M <br />

M → β M 1 → β M 2 → β · · · <br />

.<br />

◮ <br />

27


[4/4]<br />

<br />

◮ <br />

◮ <br />

⇐⇒ <br />

<br />

28


[1/2]<br />

<br />

?<br />

◮ M, N SN MN SN?<br />

◮ M = λx.xx N = λx.xx SN<br />

◮ Ω = MN <br />

SN ◮ M, N <br />

?<br />

◮ OK<br />

◮ <br />

⇒ <br />

29


[2/2]<br />

<br />

◮ M = λx.xx SN MN SN <br />

◮ <br />

<br />

◮ M “ ” : MN “ ”<br />

30


1 “ ” <br />

◮<br />

◮<br />

◮<br />

<br />

SN<br />

<br />

<br />

SN 2 “ ” <br />

◮<br />

= <br />

2 <br />

31


1 “ ” <br />

2 “ ” <br />

◮ “ ”<br />

◮ “ ” → β “ ”<br />

◮ → β “ ” <br />

“ ”<br />

◮ <br />

3 <br />

“ ”<br />

32


[1/6] <strong>—</strong> <br />

R A<br />

⊢ M : α M SN<br />

R α (M)<br />

⊢ M : A → B M SN<br />

∀N.R A (N) ⇒ R B (MN)<br />

R A→B (M)<br />

◮ R A <br />

SN<br />

◮ R A <br />

A <br />

◮ cbv <br />

M SN<br />

M ⇓ cbv ∃ N<br />

34


[2/6] <strong>—</strong> 5.16 [1/2]<br />

Lemma (5.16)<br />

0 ≤ i ≤ n.R Ai (M i ) <br />

R A (x A 1→···→A n →A M 1 · · · M n ).<br />

◮ R A (x A ) <br />

◮ “ ” <br />

35


[2/6] <strong>—</strong> 5.16 [2/2]<br />

: A <br />

1 R Ai (M i ) M i SN<br />

2 x A 1→···→A n →A M 1 · · · M n SN<br />

3 R Ai (M i ) ⊢ M i : A i<br />

4 <br />

⊢ x A 1→···→A n →α M 1 · · ·M n : A<br />

5 ◮ A = α <br />

◮ R A (x A 1→···→A n →A M 1 · · ·M n )<br />

◮ A = B → C <br />

1 R B (N) N <br />

2 IH R C (x A 1→···→A n →B→C M 1 · · · M n N)<br />

3 R B→C (x A 1→···→A n →B→C M 1 · · ·M n )<br />

36


[3/6] <strong>—</strong> 5.15 [1/3]<br />

Lemma (5.15’)<br />

M → β M ′ R A (M) R A (M ′ )<br />

◮ ⇐= <br />

( : M = (λxy.y)(λz.Ω) → β λy.y = M ′ )<br />

◮ ⇐= <br />

◮ ⇐= <br />

◮ → cbv ⊢ M : A <br />

OK [3]<br />

37


[3/6] <strong>—</strong> 5.15 [2/3]<br />

: A <br />

◮ A = α <br />

1 R α (M) M → β M ′<br />

2 R α (M) ⊢ M : α M SN<br />

3 M ′ SN( M )<br />

◮ cbv <br />

4 <br />

⊢ M ′ : α<br />

5 R α (M ′ )<br />

38


[3/6] <strong>—</strong> 5.15 [3/3]<br />

: A <br />

◮ A = B → C <br />

1 R B→C (M) M → β M ′<br />

2 N R B (N) <br />

3 R B→C (M) R C (MN)<br />

4 MN → β M ′ N IH R B (M ′ N)<br />

5 R B (M ′ N) M ′ N SN<br />

6 M ′ SN( M ′ N )<br />

7 <br />

⊢ M ′ : B → C<br />

8 R B→C (M ′ )<br />

39


[4/6] <strong>—</strong> 5.17a [1/2]<br />

Lemma (5.17a)<br />

⊢ M 0 : A 1 → · · ·A n → α R B (L), R Ai (N i ) <br />

R α (M 0 [x B := L]N 1 · · · N n ) <br />

R α ((λx B .M 0 )LN 1 · · ·N n ).<br />

◮ <br />

◮ (λx B .M 0 )LN 1 · · ·N n (λx B .M 0 )LN <br />

40


[4/6] <strong>—</strong> 5.17a [2/2]<br />

<br />

1 R B (L), R Ai (N i ) ⊢ L : B, ⊢ N i : A i<br />

2 <br />

⊢ (λx B .M 0 )LN : α<br />

3 R B (L), R Ai (N i ) L, N i SN<br />

4 R α (M 0 [x B := L]N) M 0 [x B := L]N SN<br />

5 M 0 , λx B .M 0 SN(<br />

)<br />

6 M 0 → ∗ β M 0, ′ L → ∗ β L′ , N i → ∗ β N i ′ <br />

M 0, ′ L ′ , N i ′ <br />

◮ M 0[x ′ := L ′ ]N ′ SN<br />

◮ (λx B .M 0 )LN → ∗ β M 0[x ′ := L ′ ]N ′ <br />

7 (λx B M 0 )LN SN<br />

8 R α ((λx B .M 0 )LN)<br />

41


[5/6] <strong>—</strong> 5.17b [1/3]<br />

Lemma (5.17b)<br />

⊢ M 0 : A 1 → · · ·A n → A R B (L), R Ai (N i ) <br />

R A (M 0 [x B := L]N 1 · · ·N n ) <br />

R A ((λx B .M 0 )LN 1 · · ·N n )<br />

◮ <br />

◮ 5.17a α A <br />

42


[5/6] <strong>—</strong> 5.17b [2/3]<br />

: A <br />

◮ A = α <br />

◮ 5.17a OK<br />

43


[5/6] <strong>—</strong> 5.17b [3/3]<br />

: A <br />

◮ A = C 1 → C 2 <br />

1 M 1 R C1 (M 1 ) <br />

2 R C1 →C 2<br />

(M 0 [x := L]N) <br />

◮ ⊢ M 0 [x := L]N : C 1 → C 2<br />

◮ R C2 (M 0 [x := L]NM 1 )<br />

3 IH R C2 ((λx B .M 0 )LNM 1 )<br />

◮ ⊢ (λx B .M 0 )LNM 1 : C 2<br />

◮ (λx B .M 0 )LNM 1 SN<br />

4 <br />

⊢ (λx B .M 0 )LN : C 1 → C 2<br />

5 (λx B .M 0 )LN SN<br />

44


[6/6] <strong>—</strong> 5.17 [1/4]<br />

Lemma (5.17)<br />

⊢ M : A R A1 (N 1 ), . . . , R An (N n ) <br />

R A (M[x A 1<br />

1 := N 1 , . . ., x A n<br />

n := N n]).<br />

◮ x A 1<br />

1 := N 1 , . . ., x A n<br />

n<br />

:= N n x := N <br />

45


[6/6] <strong>—</strong> 5.17 [2/4]<br />

M <br />

◮ M = x i <br />

1 M[x := N] = N i<br />

2 R Ai (N i ) <br />

◮ M = y ≠ x i <br />

1 M[x := N] = y A<br />

2 5.16 <br />

46


[6/6] <strong>—</strong> 5.17 [3/4]<br />

M <br />

◮ M = M 1 M 2 <br />

1 <br />

⊢ M 1 : B → A ⊢ M 2 : B<br />

2 IH R B→A (M 1 [x := N]) <br />

R B (M 2 [x := N])<br />

3 R B→A <br />

R A (M 1 [x := N]M 2 [x := N])<br />

4 M 1 [x := N]M 2 [x := N] = (M 1 M 2 )[x := N]<br />

5 R A ((M 1 M 2 )[x := N])<br />

47


[6/6] <strong>—</strong> 5.17 [4/4]<br />

M <br />

◮ M = λx B .M 0 <br />

1 <br />

⊢ M 0 : C A = B → C<br />

2 <br />

⊢ M 0 [x := N] : C<br />

3 L R B (L) <br />

4 IH R C (M 0 [x := N, x B := L])<br />

5 5.17b R C ((λx B .M 0 [x := N])L)<br />

6 M 0 [x := N, x B := L] SN <br />

λx B .M 0 [x := N] SN<br />

7 R B→C (λx B .M 0 [x := N])<br />

48


Theorem (5.18)<br />

<br />

λ <br />

<br />

1 M ⊢ M : A <br />

2 5.17 R A (M) <br />

3 M SN<br />

50

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!