图灵完备语言的停机问题无法解决,但对于某些非图灵完备语言(例如正则表达式),其总是停机的停机问题可以轻松解决。
我想知道是否有一些语言既有停机又没有停机的能力,但却能够采用算法来确定它是否会停机。
图灵完备语言的停机问题无法解决,但对于某些非图灵完备语言(例如正则表达式),其总是停机的停机问题可以轻松解决。
我想知道是否有一些语言既有停机又没有停机的能力,但却能够采用算法来确定它是否会停机。
停机问题不限于语言,而是针对机器(即程序):它询问一个给定的程序在给定输入上是否停止。
也许您想问的是,它能否被解决应用于其他计算模型(例如您提到的正则表达式,还有下推自动机)。
在具有有限资源的模型中(如正则表达式或等价的有限状态自动机,其具有固定数量的状态和没有外部存储),通常可以检测到停机问题。这可以通过枚举所有可能的配置并检查机器是否进入同一配置两次(指示无限循环)轻松实现;对于有限资源,我们可以对在机器不停机之前必须看到重复配置的时间量进行上限估计。
通常,具有无限资源的模型(例如无限图灵机和下推自动机)不能进行停机检查,但最好分别研究这些模型及其开放性问题。
(对于所有维基百科链接表示抱歉,但它实际上是这类问题非常好的资源。)
是的。这类函数中一个重要的类别是原始递归函数。这个类别包括你期望能够用数字做的所有基本操作(加法、乘法等),以及像@adrian提到的一些复杂的类别(正则表达式/有限状态自动机,上下文无关文法/下推自动机)。然而,存在着一些不是原始递归的函数,例如阿克曼函数。
实际上,理解原始递归函数相当容易。它们是在没有真正递归(因此函数f不能直接或通过调用另一个函数g再调用f等方式调用自身)和没有while循环的编程语言中可以得到的函数,而是有界for循环。有界for循环是指像“for i从1到r”这样的循环,其中r是在程序中已经计算出来的变量;此外,在for循环中i不能被修改。这种编程语言的重点是每个程序都会停止。
我们编写的大多数程序实际上都是原始递归的(我的意思是可以转换为这样的语言)。