可判定性

研究算法在求解问题上的能力。有些问题算法上可解,有些问题算法上不可解。

5.1 可判定语言

算法上可判定的语言。

5.1.1 与正则语言相关的可判定性问题

检测一个有穷自动机是否接受一个串;一个有穷自动机的语言是否为空;两个有穷自动机是否等价。

DFA接受问题:

定理5.1 是一个可判定语言。

NFA接受问题:

定理5.2 是一个可判定语言。

空性质测试:

定理5.4 是一个可判定语言

检查两个DFA是否识别同一个语言:

定理5.5 是一个可判定语言

用定理5.4来证明定理5.5

证明:构造如下语言L(C):

5.1.2 与上下文无关语言的可判定问题

image.png

5.2 停机问题

算法上不可解的问题是存在的。

不可判定:检查一个图灵机是否接受一个给定串的问题。

检查一个图灵机是否接受一个给定串的问题:

定理5.9 是不可判定的。

是图灵可识别的。下面的图灵机U识别:

U = “对于输入,其中M是一个TM,是一个串:

  1. 再输入输入上模拟M;

  2. 如果M进入接受状态,则接受;如果M进入拒绝状态,则拒绝。”

如果M在上循环,则机器U在输入上循环,这就是U不判定的原因。也被称为停机问题

图灵机U是通用图灵机的一个例子。通用:可以模拟任何其他图灵机,前提是知道其描述。

5.2.1 对角化方法

存在语言是图灵不可识别的。

5.2.2 停机问题是不可判定的

证明 假设是可判定的,下面将由之导出矛盾。设H是的判定器。令M是一个TM,是一个串,再输入上,如果M接受,则H就停机且接受;如果M不接受,则H也会停机,但拒绝。换句话说,H是一个TM使得:

现在来构造一个新的图灵机D,它以H作为子程序。当M被输入它自己的描述时,TM D就调用H,以了解M将做什么。一旦得到这个信息,D就反着做,即:如果M接受,它就拒绝;如果M不接受,它就接受。下面是D的描述:

D=“对于输入,其中M是一个TM:

  1. 再输入>上运行H。

  2. 输出H输出相反的结论,即,如果H接受,就拒绝;如果H拒绝,就接受。”

不要被“在一个机器上运行它自己的描述”这个想法所困扰,这类似与以一个程序本身作为输入来运行这个程序,这在实际中确实时有发生。例如,编译器是翻译其他程序的程序。Pascal语言的编译器也许其自身就是以Pascal写的,所以“在一个程序本身上运行这个程序”是有意义的。

总而言之:

当以D的描述作为输入来运行D自身时,结果会怎样呢?我们得到:

不论D做什么,她都被迫相反地做,这显然是一个矛盾。所以,TM D和TM H都不存在。

5.2.3 一个图灵不可识别语言

如果一个语言是图灵可识别语言的补集,则称它是补图灵可识别的

**定理5.16 ** 一个语言是可判定的当且仅当它和它的补都是图灵可识别的。

你可能感兴趣的:(可判定性)