ラムダ計算

計算の実行を関数への引数評価としてモデル化した計算体系
Λ計算から転送)

: lambda calculus: evaluation: application (λ) 使19301936使LISPMLHaskell

11


歴史

編集

  λx.(xα) Y

非形式的な概説

編集

2 f f(x) = x+ 2  f λx. x+ 2  x λy. y+ 2 3 f(3)  (λx. x+ 2) 3  fxy= (f x) y3 λf. f32 (λf. f3) (λx. x+ 2) 

(λf. f3) (λx. x+ 2)        (λx. x+ 2) 3        3 + 2

3

1211 f(x, y) = x y λx. (λy. x y)  λxy. x y3

(λxy. x y) 7 2        (λy. 7  y) 2        7  2





 λ  y λx. y y (λxy. yx) (λx. y)  λy. y (λx. y)  λz.z (λx. y) 

定義

編集

 (identifier)  {a, b, c,, x, y, z,} BNF

(一)<expr> ::= <identifier>

(二)<expr> ::= (λ<identifier>. <expr>)

(三)<expr> ::= (<expr> <expr>)

232: lambda abstraction3: application2 ((λx. ((x x) x)) (λy. y))  (λx. xxx) λy. yMλx. (λy. M)λxy. M

: free variable λx. (x y)  y

(一) V V

(二) λV. E E V E V

(三) (E E)  E E 

 == 2α-β-3η-

α-変換

編集

 λx. x λy. y λx. λy. x x y λy. λy. y V, W E E V W

E[V := W]



λV. E  α   λW. E[V := W]

 E W V E W λx. (λx. x) x λy. (λx. x) y

β-簡約

編集



((λV. E) E)   β   E[V := E]

 E  E 

 == 2()

 ((λV. E) E) (β-redex): normal form

η-変換

編集

232

λV. EV  η   E

 E V



 a fa== ga a f g x fx== gx λx. fx== λx. gx f== g

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

諸概念のラムダ式での表現

編集

上で述べたように、ラムダ計算は計算可能な全ての関数を表現することができる。また、上では 2 + 3 のような算術をラムダ式の一部として用いた。 2 + 3 などは計算可能であるから、もちろんラムダ計算による表現が可能である。もちろん、 2 + 3 以外にも計算可能な全ての関数の表現が可能である。ここではそれらのうちの主なものを紹介する。

自然数と算術

編集

: Church numerals

0 := λf x. x

1 := λf x. fx

2 := λf x. f(f x)

3 := λf x. f(f (f x))

 n f n11 0 

 n n+ 1 

SUCC := λn fx. f(n fx)



PLUS := λm nfx. mf(n fx)

SUCC

PLUS := λm n. mSUCC n

PLUS 21 PLUS 23== 5

MULT := λm n. m(PLUS n) 0

 m n 0  n m

MULT := λm nf. m(n f)

 n PRED n= n 1 

PRED := λn fx. n(λg h. h(g f)) (λu. x) (λu. u)



PRED := λn. n(λg k. (g 1) (λu. PLUS (g k) 1) k) (λv. 0) 0

 (g 1) (λu. PLUS (g k) 1) k g(1)  k g(k) + 1 [1]

論理記号と述語

編集

TRUE  FALSE : Church booleans

TRUE := λx y. x

FALSE := λx y. y

 FALSE 



AND := λp q. pqFALSE

OR := λp q. pTRUE q

NOT := λp. pFALSE TRUE

IFTHENELSE := λp xy. pxy

使

AND TRUE FALSE
= (λp q. p q FALSE) TRUE FALSE β TRUE FALSE FALSE

= (λx y. x) FALSE FALSE β FALSE

 AND TRUE FALSE  FALSE 

 ISZERO  0 TRUE  FALSE 
ISZERO := λn. nx. FALSE) TRUE

2 TRUE  FALSE : Church pairs

CONS := λs bf. fsb

CAR := λp. pTRUE

CDR := λp. pFALSE

 FALSE  CONS 

リスト

編集

再帰

編集

使 f(n) 

f(n) := 1, if n= 0; and n× f(n  1), if n> 0

 f ng 

g := λf n. (1, if n= 0; and n× f(n  1), if n> 0)

 g1 n× f(n  1)  ISZERO  g

 g g g f f g gf 

 f g( f) g f f g( f) f= g( f) g Y -- Y:

Y = λg. (λx. g(x x)) (λx. g(x x))

 Y g  g g(Y g) == Y g  n g(Y g) n n

n = 5 

(λn.(1, if n= 0; and n·((Y g)(n  1)), if n> 0)) 5
1, if 5 = 0; and 5·(g(Y g)(5  1)), if 5 > 0

5·(g(Y g) 4)

5·(λn. (1, if n= 0; and n·((Y g)(n  1)), if n> 0) 4)

5·(1, if 4 = 0; and 4·(g(Y g)(4  1)), if 4 > 0)

5·(4·(g(Y g) 3))

5·(4·(λ n. (1, if n= 0; and n·((Y g)(n 1)), if n> 0) 3))

5·(4·(1, if 3 = 0; and 3·(g(Y g)(3  1)), if 3 > 0))

5·(4·(3·(g(Y g) 2)))

...

 Y

計算可能性とラムダ計算

編集

 F: N N X, Y F(X) = Y fx== y f x, y X, Y-

同値性の決定不可能性

編集

2使

 e e

     2  

 

 

          

 

         

 

 

 

 

                              

チャーチ・ロッサー性

編集

β-β-β-

稿

停止性

編集

β-

(λx. xx) (λx. xx) β (λx. xx) (λx. xx) β 

β-β-β-β-β-




ラムダ計算とプログラミング言語

編集

1965A Correspondence between ALGOL 60 and Church's Lambda-notation

Funarg

LispLispLisp

PascalCC++SmalltalkEiffelC#Eiffel
agent (x: REAL): REAL do Result := x * x end

 λx. x* x square  square  aβ- square.item([a]) 

並行性

編集

β-CSPCCS

参考資料

編集

     ()  ISBN 4764901846 (1991)

 2000ISBN 4-8947-1163-X

2008111Free On-line Dictionary of ComputingGFDL 1.3RELICENSING() 

脚注

編集
  1. ^ チャーチ数とpred関数”. kimiyuki.net. 2018年10月6日閲覧。

関連項目

編集