我有一个关于λ微积分的哲学问题。
当您探索λ微积分时,您会惊讶地看到在那里可以做的所有事情。您可以定义整数,算术运算,布尔值,if-then-else语句,循环,递归函数等。我相信它已经被证明在计算上是完整的。
但另一方面,如果考虑使用λ微积分中的函数,您会意识到唯一可以做的就是向它提供一个函数,然后它返回另一个函数。这个过程永无止境。
那么如何从计算中提取结果呢?
假设表达式的结果是function f
。您要检查是否f
符合您的期望。您可以对其进行测试,采用您知道的功能,应用于f
它并接收g
。但是要检查g
是否正确,您现在需要验证是什么g
。然后您从头开始。那么,您如何得知f
?
在我看来,您可以用一个函数,身份函数替换λ演算中的所有函数I = λx.x
,并且一切仍然按λ演算中所述工作。教堂数字3
给定f
并x
返回f(f(f(x)))
。但是由于f
并且x
只能是I
,它返回I
。 I
应用于I
并且I
还返回I
。因此I
满足的定义3
。在“布尔” (λxy.x)
和(λxy.y)
需要2个参数,这将是I
与I
这样两个布尔值将会返回I
。尽管它们完全按照其定义运行,但每个都等同于标识。
那么,您如何发挥作用呢?您如何证明λ微积分处理的不仅仅是一个函数?
有身份的概念吗?您可以立即识别功能而不进行评估吗?我相信已经证明没有办法测试2个函数是否相等。
还是λ微积分不是功能,而是功能的形式描述?这将意味着λ表达式不仅定义函数的功能,而且还定义函数操作的数据。所以,当你写A B
,你并不适用A
于B
,但你申请由字符串描述的功能A
的函数的正式定义包含在B
返回另一正式定义。
λ演算中实际上发生了什么?它处理的数学对象是什么?
跟进:
好的,从下面的答案看来,λ演算似乎不是关于数学意义上的函数,而是关于可以表示为λ表达式的函数子集。甚至更多关于操纵λ表达的信息。