有穷自动机(FA)对有限存储量设备是比较好的模型,下推自动机对无限存储设备是较好的模型(但是其存储只能用后进先出的栈模式来使用。)这两个模型过于局限,不能作为通用模型。
和FA相似,但是图灵机有无限的存储。图灵机可以作实际计算机做的所有事情。但是也有图灵机解不了的事情(这些问题就超越了计算的理论极限。)
图灵机模型使用无限长度的纸带作为无限存储,并且它具有可以读取,写入和移动磁带的读/写头。
开始时,纸带上只有输入字符串,纸带的其他部分都是空的。图灵机有读写头,可以在带子上左右移动。如果需要保存信息,它可能会将该信息写入纸带。要阅读书面消息,它可能会将读/写头移回消息所在的纸带位置。
机器不断计算,直到产生输出。机器事先设置为两种状态:接受或拒绝。如果进入这些状态中的任何一种,则会产生输出接受或拒绝。如果未进入任何接受或拒绝状态,则执行将继续且永不停止。
有穷自动机(FA)和图灵机的区别:
图灵机在很多情况下是“针对某个算法的”图灵机。根据问题和算法的不同,会出现解决各种问题的图灵机。
这里的算法,意味着状态转移函数 δ \delta δ的不同。
状态转移函数 δ \delta δ是映射:
(当前状态,纸带当前位置字母) → \rightarrow → (下一个状态,纸带字母改写结果,读写头移动方向)
图灵机的格局:包括现在读写头的位置、当前的状态、当前纸带的内容。
我们可以基于格局对图灵机的计算进行形式化。如果图灵机可以合法地从格局C1一步到格局C2,则称格局C1产生格局C2。
起始格局(读写头在纸带最左端)、接受格局(接受状态)、拒绝格局(拒绝状态)。
图灵机M接受的所有字符串全体成为M的语言,记为L(M)。
定义: 如有图灵机识别(接受)一个语言,那么称此语言是图灵可识别的。
图灵机在跑的时候,可能在有限步后接受或者拒绝,也可能无限地运行下去而不停机(称为循环,但是和for/while之类的循环不同,它只是不停机)
于是我们更喜欢对所有输入都停机的图灵机,称其为判定器(不会陷入循环的图灵机)。
定义: 语言是可判定的,如果有图灵机判定它。
可判定 => 可识别,但是可识别不一定意味着可判定。
可判定和可识别性的区别。比如,给定一个单变量多项式 p p p,计算它有无整数根。那么图灵机可依次考察0,1,-1,2,-2,…来找整数根。这意味着,它确实可以识别出整数根,但是没有整数根的话,这个算法就得无休无止地跑。
无限制访问无限的存储器,有这个特点的模型在计算能力上都是等价的,只需要满足一些合理的必要条件。
这两个人给出了算法的定义。其中,Church给出了 λ \lambda λ演算方法,Turing给出了图灵机。这两个定义是等价的。
在接下来的内容中,我们不去思考图灵机的基本构建,可以直接认为算法能用图灵机实现。
有一些问题是计算机不能解(不可判定)的。
典型的例子是:给定一个图灵机和一个串,判断图灵机是否接受这个串。这个问题是不可判定的。
首先,这个问题是可以识别的。我们只需要模拟这个图灵机的状态演变。
这么做的话,确实可以把接受、拒绝态完成。问题是,如果进入循环,他就不停机了。如果它知道自己不停机,那么它可以拒绝串。问题是它不知道。
这样的模拟用图灵机称为通用图灵机,可以模拟任何其他图灵机的行为。
对于有限元素的集合,很容易判断他们的元素个数(称为势)是否相等。显然,3元素集的元素个数小于5元素集。
对于无限元素集,通过能否构造双射判断是否等势。
比如,整数集和有理数集等势,记其势为 ℵ 0 \aleph_0 ℵ0。
实数集和有理数集不等势,记其势为 ℵ \aleph ℵ。
2 ℵ 0 = ℵ 2^{\aleph_0} = \aleph 2ℵ0=ℵ。其证明思路是考虑区间[0,1)中所有数的二进制编码。
通过幂的构造方式,可以证明没有最大的势。此即,假设集合A的势为 c c c,则 2 c > c 2^c > c 2c>c。
推论: 存在语言不是图灵可识别的。
证明. 所有图灵机构成的集合是可数的。
或者可以考虑给图灵机进行序列化,具体地,对七元组里的东西进行序列化,可以得到图灵机的编码(有限长度编码)。它是二进制自然数的子集。
但是,语言数是不可数的,因为 2 ℵ 0 = ℵ 2^{\aleph_0} = \aleph 2ℵ0=ℵ。
首先,定义停机问题
A T M = { < M , w > ∣ M 为图灵机, M 接受 w } A_{TM} = \{
其中, < > <> <>代表某种编码。
这个问题是不可判定的。
证明 假设可判定,则存在图灵机 H H H可以判定 A T M A_{TM} ATM。此即
H ( < M , w > ) = a c c e p t , M H(
H ( < M , w > ) = r e j e c t , M H(
构造一个新的图灵机 D D D,它包含了 H H H的逻辑。具体地, D D D的输入为图灵机的编码 < M >
D ( < M > ) = a c c e p t D(
D ( < M > ) = r e j e c t D(
于是当M=D时即为矛盾。
注. 这个做法就像罗素的理发师悖论。理发师说:“我给且仅给不给自己理发的人理发”。于是这个理发师如果不给自己理发,那么他就给自己理发。如果他给自己理发,那么他不给自己理发。
**定理. **一个语言是可判定的,当且仅当它是图灵可识别的,也是补图灵可识别的(补集也是图灵可识别的)。
这就把所有循环的情况排除掉了。证明思路是,考虑用两个图灵机并行地判定语言集和其补。
于是,停机问题的补不是图灵可识别的。
略,准备看看P和NP问题之后再回来补…