Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 实用的非图灵完全语言?_Regex_Finite Automata_Turing Complete_Halting Problem - Fatal编程技术网

Regex 实用的非图灵完全语言?

Regex 实用的非图灵完全语言?,regex,finite-automata,turing-complete,halting-problem,Regex,Finite Automata,Turing Complete,Halting Problem,几乎所有使用的编程语言都是,虽然这提供了表示任何算法的语言,但它也有自己的一套算法。鉴于我编写的所有算法都打算停止,我希望能够用一种能够保证它们停止的语言来表示它们 用于匹配字符串并在何时使用,但我想知道是否有一种更通用、更广泛的语言不是图灵完备的 编辑:我应该澄清,通过“通用”我不一定希望能够用这种语言编写所有停止算法(我认为这种语言不存在)但我怀疑在停止证明中有一些共同的线索,可以推广到产生一种语言,在这种语言中,所有算法都保证停止 还有另一种解决这个问题的方法——消除对理论上无限内存的需求

几乎所有使用的编程语言都是,虽然这提供了表示任何算法的语言,但它也有自己的一套算法。鉴于我编写的所有算法都打算停止,我希望能够用一种能够保证它们停止的语言来表示它们

用于匹配字符串并在何时使用,但我想知道是否有一种更通用、更广泛的语言不是图灵完备的

编辑:我应该澄清,通过“通用”我不一定希望能够用这种语言编写所有停止算法(我认为这种语言不存在)但我怀疑在停止证明中有一些共同的线索,可以推广到产生一种语言,在这种语言中,所有算法都保证停止


还有另一种解决这个问题的方法——消除对理论上无限内存的需求。一旦您限制了机器允许的内存量,机器所处的状态数是有限且可计数的,因此您可以确定算法是否会停止(通过不允许机器进入以前的状态)任何非图灵完整语言作为通用语言都不会很有用。你也许可以找到一些不需要图灵机就可以作为通用语言的东西,但我从未见过。

问题不在于图灵机,而在于“算法”。无法预测算法是否会停止的原因是:

function confusion()
{
    if( halts( confusion ) )
    {
        while True:
            no-op
    }
    else
        return;
}
任何不能进行递归或循环的语言都不是真正的“通用语言”

正则表达式和有限状态机是一回事!词法分析和字符串匹配是一回事!FSM停止的原因是它们从不循环;他们只是一个字符一个字符地传递输入,然后退出

编辑:

对于许多算法来说,它们是否会停止是显而易见的

例如:

function nonhalting()
{
    while 1:
        no-op
}
这一功能显然从未停止过

而且,此功能明显停止:

function simple_halting_function()
{
    return 1;
}
所以底线是:你可以保证你的算法停止,只要设计它,使它停止


如果您不确定算法是否会一直停止;然后,您可能无法用任何保证“停止”的语言实现它。

事实证明,图灵完成是相当容易的。例如,您只需要8条指令,更多的是您真正需要的


这些语言的核心是循环构造,一旦有了无限循环,就有了固有的停顿问题。循环何时结束?即使在一种支持无界循环的非图灵完全语言中,您仍然会遇到停顿问题

如果希望所有程序都终止,那么只需仔细编写代码即可。一种特定的语言可能更符合您的喜好和风格,但我认为任何语言都不能绝对保证生成的程序会停止。

(缩写为Boundedloop)是一种有趣的非图灵完整语言。它本质上是一种图灵完全语言,有一个(主要)警告:每个循环必须包含迭代次数的一个界。不允许无限循环。因此,BlooP程序的暂停问题可以解决。

“消除了对理论上无限内存的需求。”--是的。任何物理计算机都受到宇宙熵的限制,甚至在此之前,还受到光速(=信息传播的最大速率)的限制

更简单的是,在一台物理上可实现的计算机中,只需监视资源消耗并对其进行一些限制。(即,当内存或时间消耗>我的_限制时,终止进程)


如果你问的是一个纯粹的数学/理论解决方案,你如何定义“通用”呢

不要听反对者的话。如果您希望保证终止,或者简化代码(例如通过消除运行时错误的可能性),那么在某些上下文中,您可能会更喜欢非图灵完整语言,这有很好的理由。有时候,仅仅忽略一些事情可能是不够的

这篇论文或多或少有说服力地指出,事实上,我们几乎应该总是喜欢这样一种受限语言,因为编译器的保证要强大得多。能够证明一个程序停止本身是很重要的,但实际上这是更简单的语言所能提供的更简单的推理的产物。作为不同能力语言层次结构中的一个组成部分,非通用语言的实用范围相当广泛

另一个更全面地解决这个分层概念的系统是。对系统及其五层语言进行了全面描述,这五层语言逐渐变得更完整,但也逐渐变得不安全


最后,别忘了。它有点抽象,但对于一种有用但不是通用的编程语言来说,它也是一种非常有趣的方法,它直接基于范畴理论中的概念。

不是图灵完备的,但它不仅在理论上、教学上很有趣(范畴理论),而且可以解决实际问题(Hanoi towers)。它的力量如此强大,甚至可以表达。

正确的方法是,IMHO,拥有一种图灵完备的语言,但要提供一个可以由证明检查器处理的语义陈述系统

然后,假设您有意编写一个终止程序,您脑海中有一个很好的论点,说明它为什么会停止,使用这种新的语言,您应该能够表达这个论点,并得到证明

作为我的产品编译器的一部分,我知道递归肯定不会在某些输入上停止..我使用了一个讨厌的方法来阻止它:一个具有“合理”限制的计数器.仅供参考,实际的