可判定性和递归可枚举性

Posted

技术标签:

【中文标题】可判定性和递归可枚举性【英文标题】:Decidability and Recursive Enumerability 【发布时间】:2012-03-27 12:04:54 【问题描述】:

假设存在图灵机 M1、M2、M3,它们识别的语言分别是 L(M1)、L(M2) 和 L(M3)。以下语言 L = (M1, M2, M3) : L(M1), L(M2), 和 L(M3) 不相等 语言是可判定的吗?递归可枚举?还是两者都没有?

【问题讨论】:

也许重新定位到理论计算机科学?这是作业吗? 这不是“两个自动机等价”的问题吗? NP难? 我认为图灵机等价问题表明语言必须是平等的?在这种情况下,它是不可判定的。在这个问题中,语言是不平等的。 【参考方案1】:

设 MMi,I 是一台机器,它在输入 I 上模拟运行其他机器 Mi 并返回 @987654322 @ if Mi 最终在I 处停止,否则永远循环。

设 M 是一个简单地永远循环的平凡机器。

那么,(MMi,I, M, M) 在 L iff Mi 在输入 I 时停止。

这将停止问题的可判定性降低为 L 的可判定性,因此 L 是不可判定的。

=============

接下来,我们来证明 L 不是递归可反枚举的。

假设L是递归可枚举的,所以存在图灵机M使得如果Mi, Mj, and Mk是三个各自语言不相等的图灵机,那么M最终会吐出三元组(Mi, Mj, Mk) .

现在让我们考虑对 M 进行修改,称为 M',它是通过取 M 并将值 (M, M', M') 与 L(M') 相加来定义的。 要问的重要问题是 (M, M', M') 是否在 L 中?好吧,如果 (M, M', M') 在 L 中,那么 L(M) 一定不等于 L(M') (否则它不符合在 L 中的定义),所以 L(M)不得包括 (M, M', M') (因为这是我们所做的唯一修改)。相反,如果 (M, M', M') 不在 L 中,则 L(M) != L(M') (因为我们将那个牛肚添加到 L(M') 中),因此它必须在 L (M),因为语言不一样。

因此,我们遇到了一个悖论,这意味着 M 不存在,因此 L 不是递归可枚举的。

【讨论】:

嗯...有趣。你会说这种语言 L 是递归可枚举的吗? 我更新了响应以解决递归可枚举的问题。这是一个非常有趣的问题:) 哦,你的解决方案很有趣,我学到了很多关于递归可枚举性和可判定性的知识。我很高兴你玩得开心。不过,我确实有一个问题,如果一种语言不是 RE,那不是自动意味着它是不可判定的吗?还是我错过了什么? 是的,你是对的。从技术上讲,我只需要证明它不是 RE,我只是一开始不知道该怎么做,并想确保它是不可判定的。 您的证明似乎适用于两台图灵机的类似问题。我想知道为什么教练用了三个?

以上是关于可判定性和递归可枚举性的主要内容,如果未能解决你的问题,请参考以下文章

C++ 是一种递归可枚举的语言吗?

递归语言的属性

非上下文无关的递归可枚举语言示例

干货 - 一文搞定Python 枚举

如何确定一种语言是递归的还是递归可枚举的?

js对象中什么是可枚举性(enumerable)?