为什么递归可枚举的语言不是不可判定的

时间:2012-02-26 14:30:51

标签: computer-science turing-machines formal-languages

这是来自维基百科的可判定的定义

  

在可计算性理论中,一个不可判定的问题由一个家庭组成   例如,需要特定的是/否答案的实例   没有计算机程序,给出任何问题实例   输入,终止并输出有限的所需答案   步数。更正式地说,一个不可判定的问题是一个问题   其语言不是递归集

递归集是递归可枚举的一个子集。在递归集之外有一些递归可枚举的语言。那么为什么递归上不可识别的语言不可判断?

3 个答案:

答案 0 :(得分:12)

递归可枚举的语言/集也称为半可判定的。它们不是可判定的,因为没有一台机器可以查看输入并说是或否(正确)。半可判断意味着你可以编写一个查看输入的机器,如果输入在集合中则表示是,或者如果输入不在集合中则不能停止。 半可判定可递归相同,与可判定等同于递归的方式相同: -

如果您有一个枚举递归可枚举语言的图灵机R,您可以创建一个新机器D,它接受可能在语言/集合中的输入,也可能不在其中。 D运行R直到R输出该组的第一个元素,然后D将其与其输入进行比较。如果匹配,则返回“是”结果。如果它们不匹配,它将继续运行R直到它获得下一个元素,依此类推。由于R从不停止(因为语言只是递归可枚举,而不是递归),D将回答是或不停止。

相反,如果你的图灵机D回答是或者没有停止,你可以制作一台新的机器R,它使用通常的技术一步一步地运行几个D的实例,各种输入:所有可能会或可能不会在集合中的元素。每次D的并行执行之一以“是”答案停止时,R输出D的输入,并继续对所有剩余输入执行D. R永远不会停止(因为有些输入D不会停止),但最终会输出D回答“是”的每个元素,即集合/语言中的每个元素。

不要混淆思考有三种(不相交的)种类:可判定的,半可判定的和不可判定的。有两种:可判定和不可判定的。所有可判定的套装也都是半可判定的(尽管这样说很不寻常)。一些不可判断的套装也是半可判定的。这就像说所有可枚举集都是递归可枚举的,并且一些非可枚举集是递归可枚举的。

答案 1 :(得分:6)

半自由的问题(或等效的递归可枚举问题)可能是:

  1. <强>可判定:如果问题及其补均为semidecidable(或递归可枚举),那么问题是可判定的(递归)

  2. <强>不可判定:如果问题是semidecidable及其互补不semidecidable(即,不递归可枚举)

  3. 重要提示:请记住,可判定的(递归)问题也是半可否的(递归可枚举)。相反,如果问题不是递归可枚举的(半可除),则不是递归的(可判定的)。

    维基百科条目所说的是:

      

    调用部分可判定的问题不可判定   判定的。

    一般来说,半可解决的问题(递归可枚举)可以是可判定的(递归的)或不可判定的(非递归的可枚举的)。

    还要注意一个问题及其补充可能(或者只是其中一个)甚至不是半可判定的(非递归可枚举)。另请注意,如果问题是递归的,那么它的补码也是递归的。

答案 2 :(得分:0)

我认为问题集的图形表示在这里可能更有帮助(不同集合的大小在这里没有意义)。

总结一下:

  1. 每个可判定(递归)问题也是半可判定的(递归可枚举)。
  2. 每个不可判定(递归)的半可判定(递归可枚举)问题都是不可判定的。
  3. 有一些不可判断的问题,不是半可判定的(递归可枚举)。
  4. decidable, semi-decidable and undecidable