5

相互再帰の不動点コンビネータ

236
1

型無しラムダ計算において,Yコンビネータ
Y:=λf. (λx. f (x x)) (λx. f (x x))
によりラムダ項Fの不動点Y F=F (Y F)が得られ,再帰関数が実現できることはよく知られている.実は,Yコンビネータを用いることでラムダ項F,Gに対し
{M=F M NN=G M N
なる相互再帰の不動点の組(M,N)を作ることができる.そのためにはタプルが必要なので,型無しラムダ計算の枠組みの中でタプルを扱うためにいくつかのエイリアスを定義する.
[a,b]:=λp. p a bproj1:=λt. t (λa. λb. a)proj2:=λt. t (λa. λb. b)
これでproj1 [a,b]=a, proj2 [a,b]=bと書ける.続いて,F,Gのタプルを受け取るバージョン
F:=λt. F (proj1 t) (proj2 t)G:=λt. G (proj1 t) (proj2 t)
を用意する.これらを用い,F,Gをタプルにまとめて不動点を取ればよい.すなわち,
P:=Y (λt. [F t,G t])
とすると,
proj1 P=proj1 ((λt. [F t,G t]) P)=proj1 [F P,G P]=F Pproj2 P=proj2 ((λt. [F t,G t]) P)=proj2 [F P,G P]=G P
なので,M:=proj1 P, N:=proj2 Pとおけば,
{M=F P=F M NN=G P=G M N
を得る.これは直ちにn個のラムダ項F1,,Fnの相互再帰に一般化できる.n個のタプルを
[a1,,an]:=λp. p a1anproji:=λt. t (λa1.  λan. ai)
とし,
Fi:=λt. F (proj1 t)(projn t)
とおいて
P:=Y (λt. [F1 t,,Fn t]) Mi:=proji P
とすれば,
{M1=F1 M1MnMn=Fn MnMn
なる不動点の組(M1,,Mn)を得る.ここでタプルに対するmap関数を
map:=λf. λt. [f (proj1 t),,f (projn t)]
で定義すると,Yコンビネータを用いてPを計算する部分は
Y=λg. Y (λt. map (λf. f t) g)[M1,,Mn]:=Y [F1,,Fn]
と書ける.このYをY*コンビネータと言う(らしい).

投稿日:202197
OptHub AI Competition

この記事を高評価した人

高評価したユーザはいません

この記事に送られたバッジ

バッジはありません。
バッチを贈って投稿者を応援しよう

バッチを贈ると投稿者に現金やAmazonのギフトカードが還元されます。

投稿者

minerva
11
1577

コメント

他の人のコメント

コメントはありません。
読み込み中...
読み込み中