ラムダ計算入門 - cs.gunma-u.ac.jpfujita/research/intro-lambda05.pdf ·...

68
Introduction to λ-calculus Ken-etsu FUJITA [email protected] http://www.comp.cs.gunma-u.ac.jp/fujita/ Department of Computer Science Gunma University – p.1/65

Upload: others

Post on 03-Sep-2019

0 views

Category:

Documents


0 download

TRANSCRIPT

ラムダ計算入門Introduction to λ-calculus

Ken-etsu FUJITA

[email protected]

http://www.comp.cs.gunma-u.ac.jp/∼fujita/

Department of Computer Science

Gunma University

ラムダ計算入門 – p.1/65

ラムダ計算:Church’32,’36, ’40; Curry’34

1. 論理・数学の基礎付け,Universal Language無矛盾性の証明,Martin-Löf’s Type Thoery

2. 計算理論,EntscheidungsproblemTuring Machine, recursive function,表示的意味D∞

3. プログラミング言語,Abstract Prog. Lang.関数型言語 (Lisp, ML, etc.),操作的意味,プログラム変換,抽象機械

4. 型理論,Logical Framework型付きラムダ計算 (PTS),Curry-Howard同型,定理証明系

ラムダ計算入門 – p.2/65

Church’41: The Calculi ofLambda-Conversion

Underlying the formal calculi which we shall develop is theconcept of a function, . . . . . .

A function is a rule of correspondence by which whenanything is given (as argument) another thing (the value ofthe function for that argument) may be obtained. That is, afunction is an operation . . . . . .

ラムダ計算入門 – p.3/65

Church’41: The Calculi ofLambda-Conversion

Underlying the formal calculi which we shall develop is theconcept of a function, . . . . . .

A function is a rule of correspondence by which whenanything is given (as argument) another thing (the value ofthe function for that argument) may be obtained. That is, afunction is an operation . . . . . .

In particular it is not excluded that one of the elements ofthe range of arguments of a function f should be thefunction f itself. This possibility has frequently beendenied, . . . . . . . . . Here, however, we regard the operationor rule of correspondence, which constitutes the function,as being first given, and . . . . . .

ラムダ計算入門 – p.4/65

Barendregt’81: The LambdaCalculus

The lambda calculus is a type free theory about functionsas rule, rather than a graphs. “Functions as rules” is theold fashioned notion of function and refers to the processof going from argument to value, a process coded by adefinition. · · · · · · · · · the λ-calculus regards functions againas rules in order to stress their computational aspects.The functions as rules are considered in full generality. · · ·· · ·

ラムダ計算入門 – p.5/65

Barendregt’81: The LambdaCalculus

The lambda calculus is a type free theory about functionsas rule, rather than a graphs. “Functions as rules” is theold fashioned notion of function and refers to the processof going from argument to value, a process coded by adefinition. · · · · · · · · · the λ-calculus regards functions againas rules in order to stress their computational aspects.The functions as rules are considered in full generality. · · ·· · · · · · This is the starting point of the type free λ-calcuus.In particular a function can be applied to itself. For theusual notion of function in mathematics (as in ZF settheory), this is impossible (because of the axiom offoundation).

ラムダ計算入門 – p.6/65

λ記法 (λ-Abstraction,Application)

表現 “x + 1”の使われ方

自然数の意味

“x + 1は 1以上である”

関数の意味

“f : x 7→ x + 1は帰納的関数”

ラムダ計算入門 – p.7/65

λ記法 (λ-Abstraction,Application)

表現 “x + 1”の使われ方

自然数の意味

“x + 1は 1以上である”

関数の意味

“f : x 7→ x + 1は帰納的関数”

λ記法 f = λx.(x + 1)

ラムダ計算入門 – p.8/65

λ記法 (λ-Abstraction,Application)

表現 “x + 1”の使われ方

自然数の意味

“x + 1は 1以上である”

関数の意味

“f : x 7→ x + 1は帰納的関数”

λ記法 f = λx.(x + 1)

λ抽象 λx.M

引数N に対するその値は,M 中の xに引数N を代入し

た結果の値 M [x := N ]

関数適用 (λx.(x + 1))(0)

f(0) = 0 + 1 (λx.(x + 1))(0) = 0 + 1 ラムダ計算入門 – p.9/65

Curry化 (Schonfinkel)

多引数関数の場合

(x, y) 7→ f(x, y)

ラムダ計算入門 – p.10/65

Curry化 (Schonfinkel)

多引数関数の場合

(x, y) 7→ f(x, y)

1引数関数 (高階関数)f ∗ = λx.λy.f(x, y)

ラムダ計算入門 – p.11/65

Curry化 (Schonfinkel)

多引数関数の場合

(x, y) 7→ f(x, y)

1引数関数 (高階関数)f ∗ = λx.λy.f(x, y)

(f ∗)(a) = (λx.λy.f(x, y))(a)

= λy.f(a, y)

(f ∗(a))(b) = (λy.f(a, y))(b)

= f(a, b)

ラムダ計算入門 – p.12/65

λ式 (Var, Abst, App)

Def. (λ-terms Λ) 1. 変数 x0, x1, . . .は λ式である.

2. M と N が λ式のとき (MN)は λ式である.

3. M が λ式で xが変数のとき (λx.M)は λ式である.

Λ ∋ M ::= x | (MM) | (λx.M)

ラムダ計算入門 – p.13/65

λ式 (Var, Abst, App)

Def. (λ-terms Λ) 1. 変数 x0, x1, . . .は λ式である.

2. M と N が λ式のとき (MN)は λ式である.

3. M が λ式で xが変数のとき (λx.M)は λ式である.

Λ ∋ M ::= x | (MM) | (λx.M)

(λx.x) λx.x ≡ λy.y

(λx.((x y) z)) λx.xyz

(x(λx.(λy.(λz.z)))) x(λx.λy.λz.z)

application MN

λ−abstraction λx.Mラムダ計算入門 – p.14/65

Examples

λy.y(y x)

xが指している対象に関数を 2回適用

(λy.y(y x))f = f(f x)

任意の λ式 f に対して両辺は同じ値を指している

λf.λx.f(fx), λf.λx.f(f(fx))

関数を 2回適用,関数を 3回適用

ラムダ計算入門 – p.15/65

Examples

λy.y(y x)

xが指している対象に関数を 2回適用

(λy.y(y x))f = f(f x)

任意の λ式 f に対して両辺は同じ値を指している

λf.λx.f(fx), λf.λx.f(f(fx))

関数を 2回適用,関数を 3回適用

計算規則 (β-contraction, β-reduction)

(λy.y(y x))f ⊲β (y(y x))[y := f ]

≡ f(f x)

ラムダ計算入門 – p.16/65

β変換 β-reduction ⊲β

Def. (β 変換 (⊲β))1-1. (λx.M)N ⊲β M [x := N ]

1-2.M ⊲β N

λx.M ⊲β λx.N

M ⊲β N

MP ⊲β NP

M ⊲β N

PM ⊲β PN

ラムダ計算入門 – p.17/65

β変換 β-reduction ⊲β

Def. (β 変換 (⊲β))1-1. (λx.M)N ⊲β M [x := N ]

1-2.M ⊲β N

λx.M ⊲β λx.N

M ⊲β N

MP ⊲β NP

M ⊲β N

PM ⊲β PN

2. ⊲∗βdef= ⊲βの反射・推移閉包

ラムダ計算入門 – p.18/65

β変換 β-reduction ⊲β

Def. (β 変換 (⊲β))1-1. (λx.M)N ⊲β M [x := N ]

1-2.M ⊲β N

λx.M ⊲β λx.N

M ⊲β N

MP ⊲β NP

M ⊲β N

PM ⊲β PN

2. ⊲∗βdef= ⊲βの反射・推移閉包

(λy.y(yx))N ⊲β (y(yx))[y := N ] ≡ N(Nx)

(λy.x)N ⊲β x[y := N ] ≡ x

(λx.(λy.yx)z)v ⊲β (λy.yv)z

⊲β zv

(λx.xxy)(λx.xxy) ⊲β (λx.xxy)(λx.xxy)y . . . etc. ラムダ計算入門 – p.19/65

β正規形 β-normal form

Def. (β 正規形 (β-nf) )(λx.M)N の形の式 (β-redex)を含まない式

ラムダ計算入門 – p.20/65

β正規形 β-normal form

Def. (β 正規形 (β-nf) )(λx.M)N の形の式 (β-redex)を含まない式

1. zv is β-nf of (λx.(λy.yx)z)v

2. L ≡ (λx.xxy)(λx.xxy) has no β-nfL ⊲β Ly ⊲β Lyy ⊲β . . .

ラムダ計算入門 – p.21/65

β正規形 β-normal form

Def. (β 正規形 (β-nf) )(λx.M)N の形の式 (β-redex)を含まない式

1. zv is β-nf of (λx.(λy.yx)z)v

2. L ≡ (λx.xxy)(λx.xxy) has no β-nfL ⊲β Ly ⊲β Lyy ⊲β . . .

3. 二通り以上の方法で β変換できる場合がある

(λu.v)L ⊲β v

(λu.v)L ⊲β (λu.v)(Ly) ⊲β . . .

4. (λx.(λy.yx)z)v ⊲β (λy.yv)z ⊲β zv

(λx.(λy.yx)z)v ⊲β (λx.zx)v ⊲β zvラムダ計算入門 – p.22/65

Church-Rosserの定理

Thm. (Church-Rosser Theorem for ⊲β)P ⊲∗β M and P ⊲∗β N =⇒ ∃T ∈ Λ. M ⊲∗β T and N ⊲∗β T

ラムダ計算入門 – p.23/65

Church-Rosserの定理

Thm. (Church-Rosser Theorem for ⊲β)P ⊲∗β M and P ⊲∗β N =⇒ ∃T ∈ Λ. M ⊲∗β T and N ⊲∗β T

Cor. (Uniqueness of β-nf if exists)P has β-nfs M and N =⇒ M ≡ N

ラムダ計算入門 – p.24/65

Church-Rosserの定理

Thm. (Church-Rosser Theorem for ⊲β)P ⊲∗β M and P ⊲∗β N =⇒ ∃T ∈ Λ. M ⊲∗β T and N ⊲∗β T

Cor. (Uniqueness of β-nf if exists)P has β-nfs M and N =⇒ M ≡ N

Lem. (β-NF) 1. atom ∈ β-NF

2.M1, . . . ,Mn ∈ β-NF x ∈ Atom

xM1 . . . Mn ∈ β-NFM ∈ β-NF

λx.M ∈ β-NF

λx1.λx2. . . . λxn.xM1M2 . . . Mm ∈ β-NF for Mi ∈ β-NF

λx1.λx2. . . . λxn.xM1M2 . . . Mm ∈ HNF, Solvableラムダ計算入門 – p.25/65

β-equal,β-convertible

Def. (β-equal ( =β)) P =β Qdef=

∃P0, . . . , Pn(n ≥ 0).

1. P0 ≡ P

2. ∀i ≤ (n − 1). Pi ⊲β Pi+1 or Pi+1 ⊲β Pi

3. Pn ≡ Q

ラムダ計算入門 – p.26/65

β-equal,Church-Rosserの定理

Def. (β-equal ( =β)) P =β Qdef=

∃P0, . . . , Pn(n ≥ 0).

1. P0 ≡ P

2. ∀i ≤ (n − 1). Pi ⊲β Pi+1 or Pi+1 ⊲β Pi

3. Pn ≡ Q

Thm. (Church-Rosser for =β)P =β Q =⇒ ∃T ∈ Λ. P ⊲∗β T and Q ⊲∗β T

ラムダ計算入門 – p.27/65

β-equal,Church-Rosserの定理

Def. (β-equal ( =β)) P =β Qdef=

∃P0, . . . , Pn(n ≥ 0).

1. P0 ≡ P

2. ∀i ≤ (n − 1). Pi ⊲β Pi+1 or Pi+1 ⊲β Pi

3. Pn ≡ Q

Thm. (Church-Rosser for =β)P =β Q =⇒ ∃T ∈ Λ. P ⊲∗β T and Q ⊲∗β T

∵© By induction on the number n

IH: ∃Tn ∈ Λ. P ⊲∗β Tn and Pn ⊲∗β Tn

Show: P =β Pn+1 =⇒ ∃Tn+1 ∈ Λ. P ⊲∗β Tn+1 ∧ Pn+1 ⊲∗β Tn+1

Take Tn+1 ≡ Tn or Tn+1 ≡ T from C-R for ⊲βラムダ計算入門 – p.28/65

不動点定理

Thm. (Fixed point theorem )∀M ∈ Λ. ∃X ∈ Λ. MX =β X

ラムダ計算入門 – p.29/65

不動点定理

Thm. (Fixed point theorem )∀M ∈ Λ. ∃X ∈ Λ. MX =β X

∵©

Let X ≡ Y M ,where Y ≡ λf.(λx.f(xx))(λx.f(xx)).Then

Y M =β (λx.M(xx))(λx.M(xx))

=β M((λx.M(xx))(λx.M(xx)))

=β M(Y M)

ラムダ計算入門 – p.30/65

不動点定理

Thm. (Fixed point theorem )∀M ∈ Λ. ∃X ∈ Λ. MX =β X

∵©

Let X ≡ Y M ,where Y ≡ λf.(λx.f(xx))(λx.f(xx)).Then

Y M =β (λx.M(xx))(λx.M(xx))

=β M((λx.M(xx))(λx.M(xx)))

=β M(Y M)

CF. YTuring ≡ (λx.λf.f(xxf))(λx.λf.f(xxf))

YTuringM ⊲∗β M(YTuringM)ラムダ計算入門 – p.31/65

計算可能性 FunctionalProgramming (1/4)

t ≡ λx.λy.x, f ≡ λx.λy.y

And ≡ λx.λy.xyf, Or ≡ λx.λy.xty, Not ≡ λx.xft

And t B ⊲∗β B, Or f B ⊲∗β B,Not(And P Q) =β Or(Not P )(Not Q)

if B then P else Q ≡ BPQ

ラムダ計算入門 – p.32/65

計算可能性 FunctionalProgramming (1/4)

t ≡ λx.λy.x, f ≡ λx.λy.y

And ≡ λx.λy.xyf, Or ≡ λx.λy.xty, Not ≡ λx.xft

And t B ⊲∗β B, Or f B ⊲∗β B,Not(And P Q) =β Or(Not P )(Not Q)

if B then P else Q ≡ BPQ

〈M,N〉 ≡ λx.xMN

fst ≡ λx.xt, snd ≡ λx.xf

fst〈M,N〉 ⊲∗β M , snd〈M,N〉 ⊲∗β N

〈M1,M2, . . . ,Mn〉 ≡

M1, for n = 1

〈M1, 〈M2, . . . ,Mn〉〉, for n > 1ラムダ計算入門 – p.33/65

計算可能性:自然数(2/4)

n ≡ 〈f, f, . . . , f︸ ︷︷ ︸

n

, I〉, where I ≡ λx.x

0 ≡ 〈I〉 ≡ I, 1 ≡ 〈f, I〉, 2 ≡ 〈f, f, I〉, n + 1 ≡ 〈f, n〉

ラムダ計算入門 – p.34/65

計算可能性:自然数(2/4)

n ≡ 〈f, f, . . . , f︸ ︷︷ ︸

n

, I〉, where I ≡ λx.x

0 ≡ 〈I〉 ≡ I, 1 ≡ 〈f, I〉, 2 ≡ 〈f, f, I〉, n + 1 ≡ 〈f, n〉

succ ≡ λx.〈f, x〉

succ n ⊲β 〈f, n〉 ≡ n + 1

pred ≡ λx.xf

pred 0 ⊲∗β f, pred (n + 1) ⊲∗β n

IsZero ≡ λx.xt

IsZero 0 ⊲∗β t, IsZero (n + 1) ⊲∗β f

n ∈ β-NF

ラムダ計算入門 – p.35/65

計算可能性 λ-definable(3/4)

Def. (λ表現 (λ-definable) )

λ式 Gは自然数関数 g の λ表現であるdef=

自然数関数 g : Nk → Nに対して次の閉 λ式 Gが存在:

G n1 . . . nk ⊲∗β

n, for g(n1, . . . , nk) = n

unsolvable, for g(n1, . . . , nk) undefined

関数 g は λ表現可能である.

ラムダ計算入門 – p.36/65

計算可能性 λ-definable(3/4)

Def. (λ表現 (λ-definable) )

λ式 Gは自然数関数 g の λ表現であるdef=

自然数関数 g : Nk → Nに対して次の閉 λ式 Gが存在:

G n1 . . . nk ⊲∗β

n, for g(n1, . . . , nk) = n

unsolvable, for g(n1, . . . , nk) undefined

関数 g は λ表現可能である.

Thm. (recursive ⇐⇒ λ-definable )g : N

k → N is a recursive functioniff g is λ-definable

ラムダ計算入門 – p.37/65

計算可能性:帰納的関数 (4/4)

原始帰納法

g(x, 0) = h(x)

g(x, y + 1) = f(x, y, g(x, y))

自然数 mの表現 (λ式によるコード)を ⌈m⌉とも書く

帰納的関数 の 表現 は次を満す

関数 の 表現 とは?

表現 は次の式 の不動点 で与えられる

ラムダ計算入門 – p.38/65

計算可能性:帰納的関数 (4/4)

原始帰納法

g(x, 0) = h(x)

g(x, y + 1) = f(x, y, g(x, y))

自然数 mの表現 (λ式によるコード)を ⌈m⌉とも書く

帰納的関数 h, f の λ表現 H, Fは次を満す

H m ⊲∗β ⌈h(m)⌉, F m n k ⊲∗β ⌈f(m,n, k)⌉

関数 の 表現 とは?

表現 は次の式 の不動点 で与えられる

ラムダ計算入門 – p.38/65

計算可能性:帰納的関数 (4/4)

原始帰納法

g(x, 0) = h(x)

g(x, y + 1) = f(x, y, g(x, y))

自然数 mの表現 (λ式によるコード)を ⌈m⌉とも書く

帰納的関数 h, f の λ表現 H, Fは次を満す

H m ⊲∗β ⌈h(m)⌉, F m n k ⊲∗β ⌈f(m,n, k)⌉

関数 g の λ表現 Gとは?

G x y ⊲∗β if (IsZero y) then (H x) else (F x (predy) (G x (predy)))

ラムダ計算入門 – p.39/65

計算可能性:帰納的関数 (4/4)

原始帰納法

g(x, 0) = h(x)

g(x, y + 1) = f(x, y, g(x, y))

自然数 mの表現 (λ式によるコード)を ⌈m⌉とも書く

帰納的関数 h, f の λ表現 H, Fは次を満す

H m ⊲∗β ⌈h(m)⌉, F m n k ⊲∗β ⌈f(m,n, k)⌉

関数 g の λ表現 Gとは?

G x y ⊲∗β if (IsZero y) then (H x) else (F x (predy) (G x (predy)))

λ表現 Gは次の式M の不動点 Y M で与えられる

ラムダ計算入門 – p.40/65

計算可能性:帰納的関数 (4/4)

原始帰納法

g(x, 0) = h(x)

g(x, y + 1) = f(x, y, g(x, y))

自然数 mの表現 (λ式によるコード)を ⌈m⌉とも書く

帰納的関数 h, f の λ表現 H, Fは次を満す

H m ⊲∗β ⌈h(m)⌉, F m n k ⊲∗β ⌈f(m,n, k)⌉

関数 g の λ表現 Gとは?

G x y ⊲∗β if (IsZero y) then (H x) else (F x (predy) (G x (predy)))

λ表現 Gは次の式M の不動点 Y M で与えられる

M ≡ λg.λx.λy.if (IsZero y) then (H x) else (F x (predy) (g x (predy)))

G ≡ YTuringM ⊲∗β MGラムダ計算入門 – p.41/65

タイプ,型,Types

関数の定義域,値域

length : List(N) → N [0, 1] : List(N)

length [0, 1] : N

関数の (部分的)仕様

member : N → List(N) → B

Well-typed member 0 [1, 2, 3]

プログラムの最適化

plus : N → N → N, plus : R → R → R

Curry-Howard同型,Formulae-as-Types, Proofs-as-Programs

A ⊃ B AB

(⊃ E)f : A → B a : A

fa : B(app)

ラムダ計算入門 – p.42/65

型付きラムダ計算 λ→

Simply typed λ-calculus

Def. (型 (Types) )

A ::= α | (A → A)

(α → α) α → α

(α → (β → α)) α → β → α

((α → (β → γ)) → ((α → β) → (α → γ))) (α → β → γ) → (α → β) → α → γ

ラムダ計算入門 – p.43/65

型付きラムダ計算 λ→

Simply typed λ-calculus

Def. (型 (Types) )

A ::= α | (A → A)

(α → α) α → α

(α → (β → α)) α → β → α

((α → (β → γ)) → ((α → β) → (α → γ))) (α → β → γ) → (α → β) → α → γ

Def. (項 (Terms) ) à la Church CF. à la Curry

M ::= x | (λx :A.M) | (MM)

ラムダ計算入門 – p.44/65

型付きラムダ計算 λ→

Simply typed λ-calculus

Def. (型 (Types) )

A ::= α | (A → A)

(α → α) α → α

(α → (β → α)) α → β → α

((α → (β → γ)) → ((α → β) → (α → γ))) (α → β → γ) → (α → β) → α → γ

Def. (項 (Terms) ) à la Church

M ::= x | (λx :A.M) | (MM)

Def. (型宣言 (Context) )

Γ ::= x1 :A1, x2 :A2, . . . , xn :An

ラムダ計算入門 – p.45/65

λ→型付け規則Derivation rules

Def. (型付け規則 Γ ⊢ M : A)

x :A ∈ ΓΓ ⊢ x : A

Γ, x :A ⊢ M : B

Γ ⊢ λx :A.M : A → BΓ ⊢ M : A → B Γ ⊢ N : A

Γ ⊢ MN : B

ラムダ計算入門 – p.46/65

λ→型付け規則Derivation rules

Def. (型付け規則 Γ ⊢ M : A)

x :A ∈ ΓΓ ⊢ x : A

Γ, x :A ⊢ M : B

Γ ⊢ λx :A.M : A → BΓ ⊢ M : A → B Γ ⊢ N : A

Γ ⊢ MN : B

x :A ⊢ x : A⊢ λx :A.x : A → A

x :A, y :B ⊢ x : A

x :A ⊢ λy :B.x : B → A

⊢ λx :A.λy :B.x : A → B → A

ラムダ計算入門 – p.47/65

λ→型付け規則Derivation rules

Def. (型付け規則 Γ ⊢ M : A)

x :A ∈ ΓΓ ⊢ x : A

Γ, x :A ⊢ M : B

Γ ⊢ λx :A.M : A → BΓ ⊢ M : A → B Γ ⊢ N : A

Γ ⊢ MN : B

x :A ⊢ x : A⊢ λx :A.x : A → A

x :A, y :B ⊢ x : A

x :A ⊢ λy :B.x : B → A

⊢ λx :A.λy :B.x : A → B → A

λx :A.x has type A → A

A → B → A is inhabited by λx :A.λy :B.x

(A → A) → A is not inhabited

ラムダ計算入門 – p.48/65

Static Properties

Type checking problemGiven Γ, M , and A, does one have Γ ⊢ M : A?

Typability problemGiven Γ and M , does there exists Γ ⊢ M :?

Inhabitation problemGiven A, does there eixists closed ⊢? : A

ラムダ計算入門 – p.49/65

Static Properties,Formulae-as-Types (1/2)

Type checking problemGiven Γ, M , and A, does one have Γ ⊢ M : A?

Typability problemGiven Γ and M , does there exists Γ ⊢ M :?

Inhabitation problemGiven A, does there eixists closed ⊢? : A

x1 :A1, . . . , xn :An ⊢ M : A

1. M is a program of output-type A from input-typesA1, . . . , An

2. M is a proof of formula A from assumptions A1, . . . , An

ラムダ計算入門 – p.50/65

Static Properties,Formulae-as-Types (2/2)

Type checking problem = Is M a proof of A under Γ?Given Γ, M , and A, does one have Γ ⊢ M : A?

Typability problem = Find a formula with proof M

Given Γ and M , does there exists Γ ⊢ M :?

Inhabitation problem = Find a proof of formula A

Given A, does there eixists closed ⊢? : A

x1 :A1, . . . , xn :An ⊢ M : A

1. M is a program of output-type A from input-typesA1, . . . , An

2. M is a proof of formula A from assumptions A1, . . . , An

ラムダ計算入門 – p.51/65

Examples:Formulae-as-Types

λx :A → B → C.λy :A → B.λz :A.xz(yz) : (A → B → C) → (A → B) → A → C

ラムダ計算入門 – p.52/65

Examples:Formulae-as-Types

λx :A → B → C.λy :A → B.λz :A.xz(yz) : (A → B → C) → (A → B) → A → C

[A ⊃ B ⊃ C] [A]

B ⊃ C(⊃ E)

[A ⊃ B] [A]

B(⊃ E)

C(⊃ E)

A ⊃ C(⊃ I)

(A ⊃ B) ⊃ A ⊃ C(⊃ I)

(A ⊃ B ⊃ C) ⊃ (A ⊃ B) ⊃ A ⊃ C(⊃ I)

ラムダ計算入門 – p.53/65

Examples:Formulae-as-Types

λx :A → B → C.λy :A → B.λz :A.xz(yz) : (A → B → C) → (A → B) → A → C

[A ⊃ B ⊃ C] [A]

B ⊃ C(⊃ E)

[A ⊃ B] [A]

B(⊃ E)

C(⊃ E)

A ⊃ C(⊃ I)

(A ⊃ B) ⊃ A ⊃ C(⊃ I)

(A ⊃ B ⊃ C) ⊃ (A ⊃ B) ⊃ A ⊃ C(⊃ I)

[x : A → B → C] [z : A]

xz : B → C(app)

[y : A → B] [z : A]

yz : B(app)

xz(yz) : C(app)

λxA.xz(yz) : A → C(abst)

λyA→B .λxA.xz(yz) : (A → B) → A → C(abst)

λxA→B→C .λyA→B .λxA.xz(yz) : (A → B → C) → (A → B) → A → C(abst)

ラムダ計算入門 – p.54/65

β-reduction

Def. (β変換 ⊲β)

(λx :A.M)N ⊲β M [x := N ]

ラムダ計算入門 – p.55/65

β-reduction

Def. (β変換 ⊲β)

(λx :A.M)N ⊲β M [x := N ]

[x : A]Π1

M : Bλx :A.M : A → B

Π2

N : A(λx :A.M)N : B ⊲β

Π2

N : AΠ′

1

M [x := N ] : B

ラムダ計算入門 – p.56/65

β-reduction, Cut-elimination

Def. (β変換 ⊲β)

(λx :A.M)N ⊲β M [x := N ]

[x : A]Π1

M : Bλx :A.M : A → B

Π2

N : A(λx :A.M)N : B ⊲β

Π2

N : AΠ′

1

M [x := N ] : B

[A]Π1

BA ⊃ B

(⊃ I) Π2

AB

(⊃ E)⊲

Π2

AΠ1

B

ラムダ計算入門 – p.57/65

Fundamental Properties ofλ→: SN, CR

Uniqueness of typesΓ ⊢ M : A and Γ ⊢ M : B =⇒ A ≡ B

ラムダ計算入門 – p.58/65

Fundamental Properties ofλ→: SN, CR

Uniqueness of typesΓ ⊢ M : A and Γ ⊢ M : B =⇒ A ≡ B

Subject reductionΓ ⊢ M : A and M ⊲∗β N =⇒ Γ ⊢ N : A

ラムダ計算入門 – p.58/65

Fundamental Properties ofλ→: SN, CR

Uniqueness of typesΓ ⊢ M : A and Γ ⊢ M : B =⇒ A ≡ B

Subject reductionΓ ⊢ M : A and M ⊲∗β N =⇒ Γ ⊢ N : A

Strong normalizationΓ ⊢ M : A

=⇒ Every reduction sequence M ⊲∗β . . . is finite

ラムダ計算入門 – p.58/65

Fundamental Properties ofλ→: SN, CR

Uniqueness of typesΓ ⊢ M : A and Γ ⊢ M : B =⇒ A ≡ B

Subject reductionΓ ⊢ M : A and M ⊲∗β N =⇒ Γ ⊢ N : A

Strong normalizationΓ ⊢ M : A

=⇒ Every reduction sequence M ⊲∗β . . . is finite

Terms may get larger, multiplied

(λx.λy.x(xy))M ⊲β λy.M(My)

New redexes may be created

(λx.λy.x(xy))(λz.M) ⊲β λy.(λz.M)((λz.M)y)ラムダ計算入門 – p.59/65

Strong Normalization

Γ ⊢ M : A =⇒ M ∈ SN

ラムダ計算入門 – p.60/65

Strong Normalization

Γ ⊢ M : A =⇒ M ∈ SN

By induction on the derivation?

x :A ∈ ΓΓ ⊢ x : A

Γ, x :A ⊢ M : B

Γ ⊢ λx :A.M : A → BΓ ⊢ M : A → B Γ ⊢ N : A

Γ ⊢ MN : B

IH: M ∈ SN is too weak!

ラムダ計算入門 – p.61/65

Strong Normalization

Γ ⊢ M : A =⇒ M ∈ SN

By induction on the derivation?

x :A ∈ ΓΓ ⊢ x : A

Γ, x :A ⊢ M : B

Γ ⊢ λx :A.M : A → BΓ ⊢ M : A → B Γ ⊢ N : A

Γ ⊢ MN : B

IH: M ∈ SN is too weak!

A set of SN terms closed under head β-expansion

SATdef= “set of all saturated sets”

Interpret type A by saturated set [[A]] ∈ SAT

[[A → B]] = {M ∈ Λ | ∀N ∈ [[A]]. MN ∈ [[B]]}

M : A =⇒ M ∈ [[A]] ⊆ SN ラムダ計算入門 – p.62/65

Tiny Demo: ML, Agda

関数型プログラミング言語 ML

> fn x => fn y => x;

val it = fn : ’a -> ’b -> ’a

> fn x => fn y => fn z => x z (y z);

val it = fn : (’a -> ’b -> ’c) -> (’a -> ’b) -> ’a -> ’c

Martin-Löf’s Type Theory Agda

data (\/) (A,B::Set) = inl (a::A) | inr (b::B)

or_elim (A,B,C::Set) :: A \/ B -> (A -> C) -> (B -> C) -> C

or_elim p q r = case p of (inl a)-> q a

(inr b)-> r b

data (/\) (A,B::Set) = pair (a::A) (b::B)

and_elim (A,B,C::Set) :: A /\ B -> (A -> B -> C) -> C

and_elim p f = case p of (pair a b)-> f a bラムダ計算入門 – p.63/65

参考文献

1. 高橋正子:計算理論 計算可能性とラムダ計算,近代科学社

2. J.R. Hindley and J.P. Seldin: Introduction to Combinators

and λ-Calculus, Cambridge Univ.

3. H.P. Barendregt: Lambda Calculi with Types, Handbook of

Logic in Computer Science Vol. 2, Oxford Univ.

4. J.-Y. Girard, P. Taylor and Y. Lafont: Proofs and Types,

Cambridge Univ.

5. H.P. Barendregt: The Lambda Calculus Its Syntax and

Semantics, North-Holland

ラムダ計算入門 – p.64/65

参考システム

1. Poly/ML http://www.polyml.org/

2. Agda http://www.cs.chalmers.se/Cs

/Research/Logic/TypesSS05/software.html

3. Coq http://coq.inria.fr/

4. Isabelle

http://www.cl.cam.ac.uk/Research/HVG/Isabelle/

5. Mizar http://mizar.uwb.edu.pl/

6. PVS http://pvs.csl.sri.com/

7. The Seventeen Provers of the World

http://www.cs.ru.nl/∼freek/comparison/

ラムダ計算入門 – p.65/65