我的程序Turing-complete?

时间:2012-06-04 09:10:15

标签: haskell turing-complete

我花了一两个星期编写一个简单的逻辑解算器。构建它之后,我发现自己想知道它所解决的语言是否是图灵完备的。因此,我编写了一小组方程式,它们接受SKI组合子演算中的任何有效表达式,并生成包含该表达式的正常形式的结果集。由于SKI 图灵完成,证明我的语言可以执行SKI将证明其图灵完整性。

然而,有一个小故障。解算器不会按正常顺序减少表达式。实际上它的作用是尝试每个可能的减少订单。这意味着解决方案集通常 huge 。如果存在普通表单,它将在某处,但很难告诉 where

这让我有两个问题:

  • 我的语言图灵完整吗?或者我需要找到更好的证据吗?

  • 解决方案的数量是输入的可计算函数吗?

(起初我假设解决方案集的大小在输入大小中是指数或因子。但仔细观察,这不是真的。你可以写出已经处于正常形式的巨大表达式,以及微小的表达式不要终止。我有一种感觉,确定解决方案集的大小可能等于解决停机问题,但我不完全确定......)

2 个答案:

答案 0 :(得分:5)

A)正如奥古斯特所说,你的系统显然是完整的。

B)确定解决方案大小与暂停问题相同是正确的。如果序列没有终止,那么您将获得无限的解决方案集。因此,要确定集合是否为无限,您需要确定缩减序列是否终止。但那正是停止问题!

C)我记得,一个给图灵机提供一套指令的系统,只说他们采取了多少步骤来终止(我认为,你的解决方案集的基数)或者未能终止如果指令本身无法终止本身 turing完成。所以这应该有助于直觉。

答案 1 :(得分:2)

回答我自己的问题......我发现通过调整源代码,我可以做到这一点,如果输入的SKI表达式具有普通形式,那么普通形式将始终是解决方案#1。因此,如果您忽略任何进一步的解决方案,该程序会将任何SKI表达式降低为正常形式。

我认为这构成了“更好的证明”。 ; - )