证明特定语言不是半可否的

时间:2017-05-28 14:01:20

标签: computation-theory turing-machines computability decidable

我必须证明语言L = {< M>:| L(M)| < = 2016}不是半可判定的。现在我想这样做:

取一个随机的alfabet E.现在E中有无数个单词。我们只能得出结论| L(M)| < = 2016将E *中的每个单词作为输入传递给M.但是因为有无数个单词,这意味着我们必须无限次地将输入传递给M.但这意味着执行这些检查的图灵机最终会进入无限循环,因此永远不会返回接受,也不会拒绝它的输入。因此,语言L不是半可判定的。

但我认为这可能不够正式?主要是因为我只是假设检查这种语言的图灵机会让M在E *上的每个单词上运行。这个假设是有效的,还是我应该更正式?

1 个答案:

答案 0 :(得分:0)

考虑L的补充:图灵机编码的语言,其语言包含超过2016年的字符串。我们可以很容易地证明这种语言是半可判定的。鉴于这一事实,假设L也是半可判定的。因为L及其补码都是半可判定的,所以我们有一个有效的程序来决定每一个:交替运行TM及L和它的补码,最终将列出输入。

为了看到L的补码是半可判定的,想象一个TM在每个可能的输入上执行M的一步,交替移动,以便每个字符串最终由TM的任意多次移动处理。它访问输入的顺序如下:

e,
e, 0,
e, 0, 1,
e, 0, 1, 00, 
e, 0, 1, 00, 01, ...

显然,任何输入字符串最终都会被处理掉很多次。我们的机器模拟M在所有可能的输入字符串上运行,一次一步,最终会发现2017字符串导致M停止接受,或者它将永远运行。如果它找到2017年有效的字符串,它就会停止接受。