停止使用非图灵完整的语言

时间:2009-01-24 02:23:57

标签: theory turing-complete halting-problem

图灵完整语言无法解决暂停问题,对于某些非TC语言(例如始终停止的正则表达式),可以解决这个问题。

我想知道是否有任何语言都能够暂停和不停止但是允许一种算法可以确定它是否会停止。

3 个答案:

答案 0 :(得分:16)

halting problem不会对语言起作用。相反,它作用于机器 (即程序):它询问给定程序是否在给定输入上停止。

也许你想问一下它是否可以解决其他型号的问题 计算(就像正则表达式,你提到,但也喜欢 push-down automata)。

通常,在具有有限资源的模型中可以检测到暂停(例如 正则表达式,或等价地,有限自动机,具有固定的 状态数量,没有外部存储)。这很容易实现 枚举所有可能的配置并检查机器是否进入 相同的配置两次(表示无限循环);有限的 资源,我们可以在必须看到之前的时间量上限 如果机器没有停止,则重复配置。

通常,具有无限资源的模型(例如,无限制的TM和PDA), 不能停止检查,但最好调查模型和 他们个人的开放性问题。

(对不起所有的维基百科链接,但它实际上是一个非常好的资源 这类问题。)

答案 1 :(得分:13)

是。这类中的一个重要类别是primitive recursive functions。这个类包括你期望能够用数字做的所有基本的东西(加法,乘法等),以及像@adrian所提到的一些复杂的类(正则表达式/有限自动机,无上下文语法/下推)自动机)。但是,存在不是原始递归的函数,例如Ackermann function

实际上很容易理解原始递归函数。它们是你可以在没有真正递归的编程语言中获得的函数(因此函数f不能直接调用自身,或者通过调用另一个函数g然后调用f等)并且没有while循环,而是有限制的循环。有界for循环就像“for i from 1 to r”,其中r是一个已经在程序中早先计算过的变量;另外,我不能在for循环中修改。这种编程语言的意义在于每个程序停止。

我们编写的大多数程序实际上是原始的递归(我的意思是,可以翻译成这样的语言)。

答案 2 :(得分:7)

简短的回答是肯定的,这些语言甚至可以非常有用。

几个月前在LtU上讨论过它: http://lambda-the-ultimate.org/node/2846