輪講 — 論理と計算のしくみ 5.3 型付きλ計算 (前半)
輪講 — 論理と計算のしくみ 5.3 型付きλ計算 (前半)
輪講 — 論理と計算のしくみ 5.3 型付きλ計算 (前半)
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