研究算法在求解问题上的能力。有些问题算法上可解,有些问题算法上不可解。
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 与上下文无关语言的可判定问题

5.2 停机问题
算法上不可解的问题是存在的。
不可判定:检查一个图灵机是否接受一个给定串的问题。
检查一个图灵机是否接受一个给定串的问题:
定理5.9 是不可判定的。
是图灵可识别的。下面的图灵机U识别
:
U = “对于输入<M, >,其中M是一个TM,
是一个串:
-
再输入输入
上模拟M;
-
如果M进入接受状态,则接受;如果M进入拒绝状态,则拒绝。”
如果M在上循环,则机器U在输入<M,
>上循环,这就是U不判定
的原因。
也被称为停机问题。
图灵机U是通用图灵机的一个例子。通用:可以模拟任何其他图灵机,前提是知道其描述。
5.2.1 对角化方法
存在语言是图灵不可识别的。
5.2.2 停机问题是不可判定的
证明 假设是可判定的,下面将由之导出矛盾。设H是
的判定器。令M是一个TM,
是一个串,再输入<M,
>上,如果M接受
,则H就停机且接受
;如果M不接受
,则H也会停机,但拒绝
。换句话说,H是一个TM使得:
现在来构造一个新的图灵机D,它以H作为子程序。当M被输入它自己的描述<M>时,TM D就调用H,以了解M将做什么。一旦得到这个信息,D就反着做,即:如果M接受,它就拒绝;如果M不接受,它就接受。下面是D的描述:
D=“对于输入<M>,其中M是一个TM:
-
再输入<M, <M>>上运行H。
-
输出H输出相反的结论,即,如果H接受,就拒绝;如果H拒绝,就接受。”
不要被“在一个机器上运行它自己的描述”这个想法所困扰,这类似与以一个程序本身作为输入来运行这个程序,这在实际中确实时有发生。例如,编译器是翻译其他程序的程序。Pascal语言的编译器也许其自身就是以Pascal写的,所以“在一个程序本身上运行这个程序”是有意义的。
总而言之:
当以D的描述<D>作为输入来运行D自身时,结果会怎样呢?我们得到:
不论D做什么,她都被迫相反地做,这显然是一个矛盾。所以,TM D和TM H都不存在。
5.2.3 一个图灵不可识别语言
如果一个语言是图灵可识别语言的补集,则称它是补图灵可识别的。
**定理5.16 ** 一个语言是可判定的当且仅当它和它的补都是图灵可识别的。
网友评论