递归和递归可枚举语言有什么区别

What is the difference between recursive and recursively enumerable languages

我想知道递归语言和递归可枚举语言在停机和图灵机方面的区别是什么。我知道递归可枚举语言是递归语言的一个子集,但我不确定除此之外的区别。

你有 RRE 之间的反向关系: R 是一个(正确的) RE 的子集。基本上,递归语言是您拥有总决策者的语言。

回想一下递归可枚举语言的定义,其中存在部分决策者;也就是说,一个图灵机,在你的字母表中输入一个单词,它会根据你的语言正确地accept/reject这个单词,或者如果这个单词不在你的语言中,它可能会永远循环。

相比之下,递归语言是一种存在 总决策者 的语言,即永远不会循环,并且总是停止在接受或拒绝状态的语言。

将这两个定义并排放置,显然递归语言也是递归可枚举的,因为总决策器也是部分决策器(它永远不会 "chooses" 循环而不是停止正确答案)。

主要区别在于,在递归可枚举语言中,机器会停止输入语言 L 中的字符串。但对于不在 L 中的输入字符串,它可能会停止也可能不会停止。

当我们谈到递归语言时,无论是否被机器接受,它总是会停止。如果它接受它到达 (q accept) 并停止。如果机器不接受,它会直接到达 (q halt)。

停机问题是 RE 而非 R 问题的典型示例

尝试拆分复杂性时 类,最好记住一个属于一个而不属于另一个的示例。

在这种情况下,规范示例是对应于 halting problem 决策问题的语言:

HALT = All Turing Machine/input pairs that halt

众所周知,任何图灵机都无法确定地解决停机问题,因此 HALT 语言不在 R 中。

但 HALT 显然在 RE 中。

我们回忆一下递归可枚举语言的定义:

A RE language is a language such that there exists a Turing machine that halts on every member of the language with a yes output, and possibly runs forever on non-members

所以我们只需要一个模拟另一个图灵机的图灵机(universal Turing machine)。然后该机器将在 HALT 的每个成员上停止,因此 HALT 在 RE 中。

这个事实本身就应该突出 RE 比 R 难得多:RE 包含 undecidable problems,为此设计算法是不可能的! R,作为其定义的直接结果,没有。

非 RE 问题

查看绑定两者的示例也很有帮助:

规范示例是 HALT 的补充:所有非停止 TM/input 对的语言。