我一直在试图绕过 -calculus 的内容,原因和方式,但是我无法理解“它为什么起作用”?
“直观地”,我得到了Turing Machines(TM)的可计算性模型。但是这个抽象只是让我感到困惑。
让我们假设,TM不存在-那么如何才能“直观”地相信 -calculus捕获这种可计算性概念的能力。对所有事物拥有一堆功能及其可组合性如何暗示可计算性?我在这里想念什么?我读过阿隆佐·丘奇(Alonzo Church)的论文,但我仍然感到困惑,并希望对此有更“模糊的理解”。
我一直在试图绕过 -calculus 的内容,原因和方式,但是我无法理解“它为什么起作用”?
“直观地”,我得到了Turing Machines(TM)的可计算性模型。但是这个抽象只是让我感到困惑。
让我们假设,TM不存在-那么如何才能“直观”地相信 -calculus捕获这种可计算性概念的能力。对所有事物拥有一堆功能及其可组合性如何暗示可计算性?我在这里想念什么?我读过阿隆佐·丘奇(Alonzo Church)的论文,但我仍然感到困惑,并希望对此有更“模糊的理解”。
Answers:
你陪伴很好 库尔特·哥德尔(KurtGödel)批评演算(以及他自己的一般递归函数理论)不是令人满意的可计算性概念,因为它不直观,或者不能充分解释正在发生的事情。相反,他发现图灵对可计算性的分析以及随之而来的机器概念完全令人信服。所以,不用担心。
另一方面,要对可计算性模型的工作原理有所了解,最好在其中编写一些程序。但是,尽管它很有趣(以与走火相同的方式),但您不必用纯 -calculus来做。您可以使用 -calculus 的现代后代,例如Haskell。λ
您在其中编程!看一下教堂的编码。您会看到几乎可以执行所有算术,这也许会让您相信它非常强大。我想看看清单上的操作。您可以根据对数据结构执行最重要操作的函数来定义大多数数据结构。
例如,列表的编码是将其折叠的折叠功能。请注意,这不是Church的编码,而是我从Percie的类型和编程语言中获得的编码。Church的对编码不会给我们递归,我们必须使用某种递归组合器将其重新添加回自己。
因此,列表需要两个参数,一个用于执行折叠的函数,以及一个在某个点插入到折叠中的初始值。
cons x xs = lam f. lam a. f x (xs f a)
nil = lam f. lam a. a
现在我们可以给定一个加法函数来定义一个求和(请参见上面的教堂编码)
sum xs = xs add 0
我们可以做更多的事情并定义一个地图函数
consApply f x xs = cons (f x) xs
map f xs = xs (consApply f) nil
如果您仍然不相信此处正在进行计算,并且想要确保可以执行任何计算,请检查定点组合器。有时想一下会有点伤脑筋,所以我不确定我会称其为直觉,但是如果您使用一些参数手动对其进行评估,则可以看到发生了什么。