Recursion 递归lambda演算函数

Recursion 递归lambda演算函数,recursion,functional-programming,lambda-calculus,y-combinator,Recursion,Functional Programming,Lambda Calculus,Y Combinator,我想创建一个lambda演算函数p,使得(pxyz)给出((xy)(xp)(pz))。我曾尝试使用Y组合子/图灵组合子的变体,即λg.(g)形式的函数,因为我需要复制函数本身,但我看不到任何前进的方向。任何帮助都将不胜感激。将帮助您创建一个自引用lambda抽象 这里是Ω,最小的非终止程序,很好地展示了U组合符 ((λf. (f f)) (λf. (f f))) 如果你能给它起个名字 Ω := λf.(f f) 下面是您的抽象可能的样子 ((λP. (P P x y z)) (λP. λ

我想创建一个lambda演算函数p,使得
(pxyz)
给出
((xy)(xp)(pz))
。我曾尝试使用Y组合子/图灵组合子的变体,即
λg.(g)
形式的函数,因为我需要复制函数本身,但我看不到任何前进的方向。任何帮助都将不胜感激。

将帮助您创建一个自引用lambda抽象

这里是Ω,最小的非终止程序,很好地展示了U组合符

((λf. (f f))
 (λf. (f f)))
如果你能给它起个名字

Ω := λf.(f f)
下面是您的抽象可能的样子

((λP. (P P x y z))
 (λP. λx. λy. λz. ((x y) (x P) (P z))))
或使用Ω

λx. λy. λz. Ω (λP. λx. λy. λz. ((x y) (x P) (P z))) x y z

基本上你想要解“β方程”
pxyz=(xy)(xp)(pz)
。 有一种求解形式为
M=。。。M…
。 您只需将右侧包裹在lambda中,形成术语
L
,其中所有出现的
M
均替换为
M

L = λm. ... m ...
然后使用定点组合器,你得到你的解。让我用你的例子来说明

L = λp. (λxyz. (x y) (x p) (p z)),
    where λxyz. is a shorthand for λx. λy. λz.   
然后,
p=yl
,展开
Y
L
我们得到:

P = (λf. (λg. f (g g)) (λg. f (g g))) (λp. (λxyz. (x y) (x p) (p z)))
  ->β
(λg. (λp. (λxyz. (x y) (x p) (p z))) (g g)) (λg. (λp. (λxyz. (x y) (x p) (p z))) (g g))
// the previous line is our "unfolded" P
让我们检查
p
是否符合我们的要求:

P x y z
    =   // unfolding definition of P
(λg. (λp. (λxyz. (x y) (x p) (p z))) (g g)) (λg. (λp. (λxyz. (x y) (x p) (p z))) (g g)) x y z
    ->β
((λp. (λxyz. (x y) (x p) (p z))) ((λg. (λp. (λxyz. (x y) (x p) (p z))) (g g)) (λg. (λp. (λxyz. (x y) (x p) (p z))) (g g)))) x y z
    ->β
(λxyz. (x y) (x ((λg. (λp. (λxyz. (x y) (x p) (p z))) (g g)) (λg. (λp. (λxyz. (x y) (x p) (p z))) (g g)))) (((λg. (λp. (λxyz. (x y) (x p) (p z))) (g g)) (λg. (λp. (λxyz. (x y) (x p) (p z))) (g g))) z)) x y z
    ->β
(x y) (x ((λg. (λp. (λxyz. (x y) (x p) (p z))) (g g)) (λg. (λp. (λxyz. (x y) (x p) (p z))) (g g)))) (((λg. (λp. (λxyz. (x y) (x p) (p z))) (g g)) (λg. (λp. (λxyz. (x y) (x p) (p z))) (g g))) z)
    =   // folding 1st occurrence of P
(x y) (x P) (((λg. (λp. (λxyz. (x y) (x p) (p z))) (g g)) (λg. (λp. (λxyz. (x y) (x p) (p z))) (g g))) z)
    =   // folding 2nd occurrence of P
(x y) (x P) (P z)
Q.E.D