Lambda微积分功能大于“>”

时间:2018-08-16 22:48:06

标签: logical-operators lambda-calculus

我最近开始研究Lambda微积分作为分配的一部分,我的任务是为逻辑运算符>编写一个函数,我们使用的语法与this video中所示的语法相同。 允许我们使用基本的数学运算(+,-,/,*)和equals运算符(=),如下所示:

λx.λy.(x - y)
λx.λy.(x = y) TRUE FALSE

我发现this website用小于或等于0并将其与零进行比较来解释它,问题在于负数也不同于零。

有没有办法编写像这样的GT运算符一样工作的Lambda Calculus函数?

我尝试将第二个数字减去第一个数字,然后以某种方式将结果除以自身,这样如果1可以得到>,如果-1可以得到<但是我总是以<>对数字为负或正。

1 个答案:

答案 0 :(得分:0)

前言

我能想到的最好的方法是只使用非负整数,或者允许平方根运算符

不带负整数

如果您没有使用负数,则可以使用递归(使用Y组合器)对以下函数建模(使用Python语法):

def lt(x, y):
  if y == 0:
    return False
  elif x == 0:
    return y != 0
  else:
    return lt(x - 1, y - 1)

由于这还不错,我让您自己弄清楚Y组合器的应用。如果有任何问题,请随时发表评论。

具有负整数和平方根运算符

定义

如果您有负数,我能想到的最好的就是这个。我不会使用lambda微积分符号,因此您可以自己转换这些符号:

ABS(x) = if (x == 0) then 0 else sqrt(x * x)
SIGN(x) = ABS(x) / (x + (x == 0))
LT(x, y) = (-1 == SIGN(x - y))

注意:我很自由地让布尔表达式返回整数10而不是函数TRUEFALSE ,如您发布的Collected Lambdas链接中所示。如果存在问题,则可以编写将TRUE映射到1并将FALSE映射到0的函数。

说明

如果仅查看LT的最后一个等式,那么很清楚它为什么起作用。您首先计算x - y。然后,使用该表达式的符号。如果x - y -1为真,则x < y的符号。

SIGN的解释是,当x == 0时,我们将得到表达式0/1,这是正确的。如果为x != 0,则将有|x|/x,根据-1的符号,它们将是1x