ラムダ計算入門 - cs.gunma-u.ac.jpfujita/research/intro-lambda05.pdf ·...
TRANSCRIPT
ラムダ計算入門Introduction to λ-calculus
Ken-etsu FUJITA
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)
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)を含まない式
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
∵©
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 ]
[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
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