【笔记】可计算理论

下接 复杂性理论

计算模型

Def. 确定图灵机 (Deterministic Turing Machine, DTM)

7 元组,记作 M=(Q,Σ,Γ,δ,q0,B,F),其中

  • Q 是有穷状态集合
  • Σ 是有穷输入符号集合
  • Γ 是有穷带上符号集,ΣΓ
  • q0 是图灵机的起始状态
  • FQ 是停机(接受)状态集合
  • BΓ/Σ 是空字符
  • δ 是形如 (Q/F)×ΓQ×Γ×{L,R} 的转移函数
    例如,δ(p,a)=(q,b,L) 定义动作:当机器处于状态 p,并且带头指向格子内容为 a 时,执行:将 a 改成 b,进入状态 q,带头左移一格

M 停机,当且仅当 M 进入接收状态,或者找不到可用的转移规则

图灵机计算过程的瞬时描述 (ID),形如:X1X2Xi1qXiXi+1Xn,表示:

  • 图灵机的当前状态是 q
  • 图灵机带上的内容为 X1X2Xn
  • 图灵机的带头正在扫描 Xi

瞬时描述的移动,即图灵机的一步计算,表示为 ;多次移动(多步计算)可以表示为 ,M

Def. 图灵机 M 的语言(M 识别的语言)
给定图灵机 M 和字符串 wΣ,如果存在 M 的瞬时描述序列 ID1,ID2,,IDk,满足如下条件,则称 M 接受 w

  • ID1M 初始状态的瞬时描述,为 q0w
  • IDkM 的某个接受状态
  • IDiIDi+1,i[k1]

M 接受的字符串集合称为 M 的语言,或 M 识别的语言,记作 L(M)
显然,若 wL(M),则 M 要么停机且拒绝,要么永远不停机

图灵机有很多变种,它们彼此等价(所谓等价,指两者识别相同的语言类,或者证明它们可以互相模拟)
例如,我们可以令带头动作变为 {L,R,S},但它不能比原本的图灵机更好,因为我们可以简单地用 L+R 模拟 S
我们再介绍几个变种:

  • 多带图灵机:它有 k 个带,各自具有读写头;开始时我们的输入放在第一个带上,其他带是空白的,转移函数为 δ:Q×ΓkQ×Γk×{L,R,S}k
    显然,这 k 个带子可以视为在一个带子上用某个指定分隔符隔开的 k 个段;并且我们可以用一个技巧描述这个带上各段当前所指字符:只需为字符 a 引入 a˙ 即可,毕竟我们的字符集是有限的;于是我们可以用单带模拟多带,从而两者是等价的
    单带图灵机模拟多带图灵机时间代价:平方级别
  • 非确定图灵机:转移函数形如 (Q/F)×Γ2Q×Γ×{L,R};而字符串 w 被接受当且仅当存在转移序列使得 q0wαpβ,pF

在之后关于“可计算性”的讨论中,我们将“问题”视为一种“语言”,将“算法”视为一种“图灵机”,从而我们考虑的是“某个图灵机之于某个语言”
这是因为,我们总能将问题的输入对象进行编码(下文用 , 表示),并尝试在其上运行一个能识别它的图灵机(或者不存在、或者不停机)
算法又何以成为图灵机?我们直接认为,我们对算法的直观概念,等价于图灵机算法(丘奇-图灵论题),它的一个常见表述是:

丘奇-图灵论题
每个有效计算都可以由一台图灵机完成。

可计算理论 Theory of Computability

识别/判定

注意到图灵机语言的定义,并没有讨论永不停机的情况,从应用的角度,不停机就不是算法了;因此我们基于“识别”,引入不停机的条件,进一步提出“判定”概念

Def. 图灵机 M 的语言(M 识别的语言)
M 接受的字符串集合称为 M 的语言,或 M 识别的语言,记作 L(M)
Def. 图灵机 M 的语言(M 判定的语言)
如果图灵机 M 是始终停机的(称为判定器),那么也称 L(M) 为图灵机 M 判定的语言

进一步地,我们用图灵机的识别/判定行为,定义语言种类

Def. 图灵可识别语言 (Turing‐Recognizable Language)
如果存在图灵机 M 识别语言 L,那么 L 是一个图灵可识别语言 Turing-recognizable
Def. 图灵可判定语言 (Turing‐Decidable Language)
如果存在图灵机 M 判定语言 L,那么 L 是一个图灵可判定语言 Turing-decidable

Th. 判定 识别
如果图灵机 M 判定 L,那么 M 一定识别 L
如果语言 L 是图灵可判定的,那么 L 一定是图灵可识别的

现在我们回到所谓“可计算”上:对于某个问题,它具有无穷个实例 instance,而我们关注的是这个问题是否有算法。
而现在,我们将问题视作语言 language,将实例视作字符串 string,那么,这个问题能否计算,就转化为是否存在一个(某种)图灵机能判定这个语言
当然,所谓 “给定一个(某种)图灵机,能否判定一个语言” 本身也是一个问题,也能用语言描述,因此我们引入一般的表达形式:
我们用 , 表示编码,它只需要我们事先约定即可,关于它的细节一般不再赘述,下文同理

Def. 问题 语言
考虑一个问题:“检测对于一个特定的图灵机 M 和一个给定的串 w,命题 Cond(M,w) 是否成立”
对它,先将所有成立的二元组 (M,w) 的编码的集合视作语言 ATM

ATM={M,w:M 是 TM,满足条件 Cond(M,w)}

从而,证明命题 Cond(M,w) 成立,等价于证明 M,wATM,从而我们用语言 ATM 等价描述了上述的问题

例如,可以令命题为 Cond(M,w) 为 “M 接受 w”;进而,要证明该命题可计算(即 M 判定 w 可以在有限时间得出该命题是否成立;这和 M 判定 w 还是有区别的),等价于证明 ATM 是可判定的
此外,图灵机就是算法,图灵机可以调用图灵机(实现方法为模拟被调用图灵机的运行),这个思路需要多加强调
例如,现在有一个问题:“给定一个 DFA D 和一个串 w,判断 D 是否接受 w
现在考虑语言 ADFA={D,w:DDFAw}
那么:

  • 该问题判断 “D 是否接受 w”,等价于判断 D,w 是否属于 ADFA
  • 要证明该问题是可解的,等价于证明 ADFA 是可判定的(证明只需设计图灵机 Mw 上模拟 D 运行即可,这个图灵机就是这个问题的算法)

我们再为可识别/可判定介绍等价概念:递归可枚举的、递归的

Def. 枚举图灵机
枚举图灵机 (enumerator) 是一个多带图灵机:

  • 初始状态,工作带为空,即无输入
  • 有一条特殊输出带,带头只能右移,在输出带上顺序打印有穷长度的字符串,字符串的数目可能是无穷的,字符串可以重复打印
    例如,可以按照如下方式工作:
    • 运行中进入一个特殊的状态 qprint,该状态将工作带上的内容复制到输出带上,利用 # 字符分隔
    • 复制后,机器返回常规状态继续运行
  • 枚举图灵机 E 的语言 L(E)={x:E 输出 #x#},也称为 E 枚举 L(E)

实际上,枚举图灵机 E 和图灵机 M 可以互相模拟;分类讨论:

  • 与一般图灵机(非判定器)相互模拟的枚举图灵机,它不能按字典序输出字符串(否则存在判定器判定它的语言,原因见下):
    • 若有 E 枚举 A,则构造 M,对于输入 w:运行 E,并将其每次的输出与 w 比较,若匹配则接受,否则继续(显然若 wA,则 M 无法停机)
    • 若有 M 识别 A,则构造 E,按字典序依次枚举 Σ 的所有字符串 s1,s2,;如果我们简单地依次对每个字符串运行 M,那要是 M 不停机了怎么办呢?我们可以限制 M 的运行次数,让其强行停机——迭代,每次对前 i 个字符串 s1,,si,依次送入 M 且分别至多运行 i 步,若某个字符串被接受则输出——此时每个 sjA 会被输出无穷次(当然,输出前扫一遍之前的输出,可以令只输出一次)
  • 与判定器相互模拟的枚举图灵机,它可以按字典序输出字符串:
    • 若有 E 枚举 A,则构造 M 同上,此时由于 E 按字典序输出,则 M 只需多加判断字典序大小并及时退出,故必定能停机
    • 若有 M 识别 A,则构造 E,按字典序依次枚举 Σ 的所有字符串 s1,s2,,并依次对每个字符串运行 M,且 M 必定停机

根据上述方法,我们又证明了两组等价关系:

Def. 递归可枚举语言 (recursively enumerable, r.e.)
如果存在枚举图灵机 E 满足 L=L(E),那么 L 是递归可枚举语言
Th. 递归可枚举 图灵可识别
语言 L 是递归可枚举的,当且仅当 L 是图灵可识别的

Def. 递归语言 (recursive)
如果存在枚举图灵机 E 满足 L=L(E)并且 E 以字母序打印 L(E),则称 L 是递归语言
Th. 递归 图灵可判定
语言 L 是递归的,当且仅当 L 是图灵可判定的

因此,从问题看,有等价关系:可计算 可判定 递归语言
现在让我们回到可判定、可识别语言上,我们考虑一下运算封闭性:

Th. 可判定(可识别)语言的运算封闭性
已知语言 AB 是可判定(可识别)的,则如下语言是可判定(可识别)的:

  • ABAB
  • AB=AB={xy:xA,yB}
  • A=n=0An,A0={ϵ},An=AAn1
  • 关于补操作 A¯
    • 可判定语言对补操作封闭
    • 可识别语言对补操作不封闭(无法停机无法对应构造使得对该字符串停机)
      但是倘若 A,A¯ 均为可识别,则 A(A¯) 均为可判定,证明显然,只需同时运行 A,A¯,至少有一个停机;事实上有定理:

Th. 图灵可判定等价条件
语言 L 是图灵可判定的,当且仅当 L 及其补语言 L¯ 均是图灵可识别的

总结一下,现在我们根据可识别、可判定,对一个语言 L 做出如下分类:

  • LL¯ 都是图灵可识别的,即都是图灵可判定的
  • L 是图灵可识别的,L¯ 不是图灵可识别的
  • L¯ 是图灵可识别的,L 不是图灵可识别的
  • LL¯ 都不是图灵可识别的

对这些类别,接下来我们分别讨论

不可识别

首先,是否存在不可识别语言呢?

从计数可以证明是存在的:语言的个数为 |2Σ|,是不可数的(Σ 可数);而可以对图灵机进行编码,使得每个图灵机至少与一个 01 串对应,故图灵机可列,等价于自然数,是可数的;因此语言数量远多于图灵机数量,一定存在某个语言不对应任何一个图灵机,证毕
另外,介绍一种图灵机编码方式(编码只是到 Σ 的一种映射罢了)
M=({q0,q1,,qn},{0,1},{0,1,B},δ,q0,{q1}) 为例:
X1=0,X2=1,X3=B,D1=L,D2=R
δ(qi,Xj)=(qk,Xl,Dm) 编码为 code=0i+110j10k+110l10m
假设图灵机 Mr 条转移规则,则将 M 编码为 code111code21111coder111
显然,每个图灵机对应有限个 01 串,每个 01 串不一定是一个合法图灵机

既然存在,那么又如何证明一个语言的不可识别呢?可以考虑对角化方法,或者归于某个已知不可识别语言的可识别性
给出一个不可识别语言的例子:

Def. 对角化语言 Ld
Mi 表示按字典序第 i 个字符串 wi 编码的图灵机,又即 wi=Mi ;若 wi 不是合法的编码,则 L(Mi)=(一种编码方法很容易存在不合法的编码)
对角化语言定义为

Ld={wi:wiL(Mi)}

Th. 对角化语言 Ld 不可识别(进而不可判定)

证明
显然,不合法编码的存在使得 Ld 非空,现在我们来证明 Ld 不可识别
重温经典:对角化方法
假设存在 Mj 能够判定 Ld=L(Mj),那么当我们考察 wj 时,会发现假设 wjL(Mj),则 wjLd=L(Mj),矛盾;假设 wjL(Mj),则 wjLd=L(Mj),又矛盾,故原假设不成立
之所以叫做“对角线语言”,是因为以下图为例,两个取反的序列会在右下角相撞:

M0M1M2wjM0011M1101M2001Mj110?

证明其他一些问题不可识别,可以尝试对角线方法;或者反证法,假设其可识别,从而通过将一些已知不可识别语言的识别任务交给这个代证语言,得到矛盾

Exercise.wi 表示第 i 个字符串,Mi 为对应编码的图灵机,证明语言 {wj:w2jL(Mj)} 是非递归可枚举的(图灵可识别的)
(提示:考虑 L={w2j:w2jL(Mj)} 是否递归可枚举)

可以证明 {w2j:w2jL(Mj)} 是不可识别的,因为假设 Mk 识别该语言,则 w2kL(Mk)w2kL(Mk),w2kL(Mk)w2kL(Mk),都矛盾
接下来证明 {wj:w2jL(Mj)} 不可识别,假设可识别且图灵机 M 识别之,则可证明 {w2j:w2jL(Mj)} 也可识别,因为只需对于输入的 w2j,判断 [wjL(M)] 即可,故矛盾,故得证

或者利用定理:L 可判定当且仅当 L,L¯ 可识别的;从而要证明 L 不可识别,可以考虑证明 L 不可判定、L¯ 可识别

不可判定

那么,是否存在可识别但不可判定的语言呢?如何证明不可判定呢
先介绍几个基本问题。LACC 是一个很重要的问题,后面也 turns out 是个重要模板的组成部分

Def. 图灵机接受问题 LACC

LACC={M,w:M 是图灵机,M 接受 w}

Th. LACC 是图灵可识别的

证明很简单,构造“通用图灵机” Mu 为一个能够模拟图灵机运行的图灵机:对于输入 M,w(任何可以表示的方法,不要总想着 01 编码),执行:

  1. 检查 M 的合法性
  2. w 上模拟 M 运行(只需多带记录 M 的当前状态和转移即可)
  3. M 接受 w,则 Mu 接受 M,w
    M 拒绝 w,则 Mu 拒绝;不停机不做定义

后文中我们提到“模拟 Mw 上运行”,都是指这个实现方式。于是 Mu 识别 LACC;显然 Mu 不足以判定 LACC,实际上 LACC 不可判定,即图灵机接受问题不可计算

Th. LACC 不是图灵可判定的
Co. LACC¯ 不是图灵可识别的

采用对角线法证明:
假设图灵机 H 判定 LACC,对于输入 M,wH 总能停机,且输出 H(M,w) 为根据 M 是否接受 w 也输出接受与否
接下来构造图灵机 D,并认为其输入的字符串为图灵机编码 M,调用 H(M,M) 并且总是输出和 H 相反的结果:D(M)=1H(M,M)
由于编码可列,图灵机是可列的,将其列成 M-M 的矩阵,并考虑 H(M,M)D(M) 的真值,它们在右下角相撞:

M0M1M2DM0011M1101M2001D110?

因此产生矛盾,D,H 不存在,从而得证

Def. 图灵机停机问题 LHALT={M,w:M 是图灵机,M 在 w 上停机}
Th. LHALT 是图灵可识别的
Th. LHALT 不是图灵可判定的
Co. LHALT¯ 不是图灵可识别的

证明。显然是可识别的;现在证明不可判定:假设 MHALT 判定 LHALT,即 MHALT 能判定 M,w 是否停机;
那我们可以构造图灵机完成对 LACC 的判定:给定 M,w,先调用 MHALT(M,w) 判断是否停机,如果不停机则不接受;否则模拟 M(w),从而给出结果;这与 LACC 不可判定矛盾,故得证

如上所示,将待证明的可判定性归于 LACC 的可判定性,是一个常见的证明方法;下文再举几例:

Def. Le={M:M 是图灵机,L(M)=}
Th. Le 不是图灵可判定的
Co. Le¯ 是图灵可识别的,Le 不是图灵可识别的

乍一看,Le 拒绝所有字符串,似乎是个非常直白的问题;但是从算法的角度,我们找不到一个判定器,能够判断一个图灵机是否是拒绝所有非空字符串的
证明:假设存在 Me 判定 Le;构造图灵机判定 LACC,给定 M,w
考虑在 M 上运行 Me,如果接受,则 wL(M)=;否则只能说明 L(M)
现在考虑构造修改图灵机 M,先判断输入是否为 w,否则拒绝,是则调用 M,于是 L(M)={w}L(M);现在我们在 M 上运行 Me,如果接受,说明 wL(M)=;如果拒绝,说明 wL(M)={w}
从而构造出 LACC,矛盾!从而得证
这就把矛盾卡出来了,总结来说,是因为考虑 Me(M)=[L(M)=],而 wL(M){w}={w}L(M)L(M),所以判断 Me(M) 就能说明问题了
这又一次提示我们,可以将我们手头有的东西归于 LACC 的功能

快速再给几个例子,接下来请额外注意下面这些解法的共同点:

Exercise. 换种方法证明 Le 不是图灵可判定的

证明,假设存在 Me 判定 Le;构造图灵机判定 LACC,给定 M,w
构造图灵机 M,为对于任意输入 xM 都模拟 Mw 上运行,若接受则拒绝,否则接受
L(M)=MLeM,wLACC,故运行 Me(M) 即可判定 [M,wLACC],与 LACC 不可判定矛盾,故得证

Exercise. LACCALL={M:M 是图灵机,M 接受所有字符串} 不是图灵可判定的

MACCALL(M)=[ΣL(M)],而我们要判断 [wL(M)]
对给定 M,w
M(x)[wL(M)],为对任意 xΣ,总是模拟 Mw 上运行,并返回模拟结果,即 [xL(M)]=[wL(M)],这一步是利用 MACCALL 的能力直接预知了模拟结果
[xL(M)]=MACCALL(M)
则构造图灵机 MACC:在 MACCALL 上运行 M,并返回结果即可;故矛盾

这个证明告诉我们直接通过 “返回模拟结果/返回运行结果” 可以建立判定式之间的相等联系,就如 deeppink 颜色式子所示

Exercise. LREG={M:M 是图灵机, 且接受正则语言} 不是图灵可判定的

这个的证明和 LACCALL 差不多,限制一下某个正则语言即可:
M(x)[x=0n]&[wL(M)],为先判断是否为 0n,再模拟 M(w) 并返回运行结果,则 L(M)={0n;wL(M);wL(M)
LREG(M)=[L(M)=REG]=[L(M)=0n]=[wL(M)]
可见这里是把 [wL(M)] 作为条件加入的,这不失为一种模板,后面规约中会进行总结

Exercise. Lpalindrome={M:L(M)={w:w 是回文串}} 不是图灵可判定的

M(x)[x=00]&[wL(M)],为先判定是否为 00,再模拟 M(w) 并返回运行结果,则 L(M)={00;wL(M);wL(M)
Lpalindrome(M)=[L(M) 回文]=[L(M)=00]=[wL(M)]

Exercise. LR={M:L(M)=(L(M))R} 不是图灵可判定的(即若 wL(M),则 wRL(M)

M(x)[x=01]&[wL(M)]
LR(M)=[L(M)=(L(M))R]=[L(M)=]=[wL(M)](这里我认为 =R,所以这么设计)

Exercise. LR={M:L(M)=(L(M))R} 不是图灵可识别

可以考虑证明 LR 不可判定、LR¯ 可识别,前者上题已经证了,考虑证明 LR¯ 可识别。构造图灵机 M,对于输入 M,按字典序枚举字符串 w,在 w,wR 上分别运行 M,若结果不同则接受。可见 M 识别 LR¯,得证

再小提一句,之所以这个方法不能用在 LR 上,是因为我们无法定义什么时候接受(接受状态)——在 w,wR 上分别运行 M,若结果相同,我们还得继续运行下去
这个小问题让我想到,如果一开始我们对图灵机的定义里,把“接受状态”改为“拒绝状态”,是不是会有一类问题的结论变成补集了呢?

映射规约

上述问题都具有一个相同的过程:将一个问题归于另一个问题,这提示我们,问题彼此之间是否具有某种可以“归约”的关系?

归约(reduction)支持将问题按计算难度分层(排序)。例如,问题 A 可以归约到问题 B,记作 AB,直观表示 A 不会比 B 更困难

Def. 可计算函数(Computable functions)
函数 f:Σ1Σ2 被称作是可计算的,若存在图灵机 M 使得 wΣ1Mw 上停机且输出带上是 f(w)
其实就是存在图灵机能有限时间计算出 f

Def. m,映射规约(Mapping reduction)
AΣ1BΣ2 是两个语言,A 被称作可映射归约到 B,记作 AmB,若存在可计算函数 f:Σ1Σ2,使得 wΣ1wAf(w)B
这里的函数 f 被称作从问题 AB 的映射归约
映射规约具有如下性质,从而映射规约是个很有用的方法/方向:

Th. m 的性质

  • AmB,则:
    • B 可判定,则 A 可判定
      A 不可判定,则 B 不可判定(逆否命题)
    • B 可识别,则 A 可识别
      A 不可识别,则 B 不可识别(逆否命题)
  • AmBA¯mB¯
  • AmB,BmCAmC

例如:
Ld={M:ML(M)},则 MLdML(M)M,MLACC¯,故映射规约 f:MM,M 是映射规约,从而 LdmLACC¯,所以 Ld 是不可识别的
又比如,MLACCALLM,ΣLACC,则 f:MM,Σ 是映射规约,从而 LACCALLmLACC,所以 LACCALL 是不可判定的
反过来,M,wLACCMLACCALL,其中 M 定义为对任意输入,都模拟 Mw 上运行,接受则接受,否则拒绝(如上文提到),则 LACCmLACCALL

Remark. 模板

  • 要证明语言 Lsome 不可识别,可以考虑证明 LACC¯mLsome,即证明 LACCmLsome¯
  • 要证明语言 Lsome 不可判定,可以考虑证明 LACCmLsome

因此,很多问题都可以归于证明 LACCLsome(无论是利用取补或者逆否),大概证明思路都是 M,wLACCM(,)Lsome
这个 M 先让自己限定在满足 Lsome 条件(的某个子集)内;然后模拟 Mw 上运行,若 wL(M) 则实现这个条件,否则不实现
这样的话,M wL(M) 为唯一条件、以满足 Lsome 的条件,于是 M,wLACCMLsome

Exercise. LHALT={M,w:M 是图灵机,M 在 w 上停机} 不可判定

证明,考虑 LACCLHALT,也就是要构造映射规约 f:M,wM,w,使得 M,wLACCM,wLHALT,如何令 M 停机以 wL(M) 为唯一条件?很简单,对任意 w,都令 M 先模拟 Mw 上运行,若接受则直接停机,否则就进入一个永不停机的状态,这样就完成证明了

还记得我们之前怎么证明的吗?我们利用 LHALT 造出了一个判定 LACC 的玩意,从而导出矛盾。这两个证明应该还是有区别的

利用这个方法,我们可以证明这样一个语言——本身和补集都是不可识别的:LEQ

Th. LEQ={M1,M2:L(M1)=L(M2)} 不是图灵可识别的
Th. LEQ¯ 不是图灵可识别的

证明 LEQ:可以考虑证明 LACC¯mLEQ,取补 LACCmLEQ¯,这就是经典结构了。取 M1,M2,如何让 wL(M)M1,M2LEQ¯L(M1)L(M2) 呢?令 L(M1)= 也就是拒绝所有输入,L(M2) 接受当且仅当模拟 Mw 上运行且接受,这样就得到了 f:M,wM1,M2
证明 LEQ¯:可以考虑证明 LACC¯mLEQ¯,取补 LACCmLEQ,这和上面不是一样嘛,让 M1 接受所有输入就行了

下面再介绍一个更一般的规约:图灵归约

Def. 神谕图灵机(Oracle Turing machine)
一个图灵机变种,可以查询某个语言判定问题的结果是 1 或者 0MB 表示可以查询语言 B 的 oracle 图灵机,即判定 MB(w)=[wB]
Def. T,图灵规约(Turing reduction)
AΣ1BΣ2 是两个语言,A 被称作可图灵归约到 B,记作 ATB,若存在 Oracle 图灵机 MB 判定 A
Th. AmBATB

证明,按照如下方式构造 MB:对于查询 [xA],利用映射规约 f,计算 f(x) 并在 MB 上查询 [f(x)B],返回查询的结果

莱斯定理(Rice's theorem)

现在让我们回过头观察这些不可判定问题,为什么很多情况它们的证明如此相似(比如那个模板)?
本质上,这是“图灵机识别语言”的性质,我们从一些更上层的角度观察
介绍莱斯定理(Rice's theorem),它表明任何图灵机识别语言的非平凡性质都是不可判定的

Def. 图灵机识别语言的非平凡性质(Nontrivial properties)
P 是图灵机识别语言的非平凡性质,或者说是具备某个性质的语言集合,当且仅当

  • 存在图灵机 M1 使得 L(M1)P
  • 存在图灵机 M2 使得 L(M2)P

它的等价形式为:

  • 存在某个图灵可识别的语言 L1P
  • 存在某个图灵可识别的语言 L2P

显然,非平凡性质 P 的补集 P¯ 依然是非平凡性质
例如,我们上面讨论的语言都是具有非平凡性质的

Th. 莱斯定理(Rice's theorem)
P 是图灵可识别语言的任意一个非平凡性质,并且语言 LP={M:L(M)P},那么 LP 是不可判定的

能有如此结论真是 amazing 啊!这样的话,我们试证不可判定,只需考虑证明性质非平凡就行了

证明其实就是我们上面发现的模板,咱也属于是站在巨人肩膀上发现风景了
试证明 LACCmLP,回顾模板分析一下:目标就是构造使得 M,wLACCf(M,w)=MLP,意味着某个图灵机 M,它以 wL(M) 为条件、接受满足条件 P 的输入
考虑构造个例 M1,使得 M1LP,显然 M1 接受的输入都满足 P
那么考虑令 M 在输入 x 上,以 wL(M) 为条件运行 M1(x),若 M1 接受则接受,具体为两步过程:先模拟 Mw 上运行,若接受则模拟 M1x 上运行,若接受则接受;其他情况拒绝或者不停机
当然,还有个大前提是判定的是 [M,wLACC],如果输入不是 M,w 的合法形式呢?当然这时我们也绝不能让 f()LP,不妨假设 LP 不包含空语言 LP(否则令 PP¯,依然是非平凡性质),然后让此时 f()=M,其中 L(M)= 即可

综上,我们构造的 f() 如下:

  1. 不是 M,w 的合法形式,则 f(x)=M
  2. 形如 M,w,则 f(x)=M,其中:M 对于输入 x,先模拟 Mw 上运行,若接受则模拟 M1x 上运行,若接受则接受;其他情况则拒绝或者不停机

于是 LACCf()LPLACCmLP,得证

给一些课后习题:

Exercise. 证明 LR={M:L(M)=(L(M))R} 不可识别

这个我们之前证明过,这里利用规约再证一次(当然,用 Rise 更轻松):
可证明 LACC¯mLR,则 LACCmLR¯
对于 M,w,构造图灵机 M,对于输入 x,先判定是否为 01,不是则拒绝,若是则模拟 Mw 上运行,若接受则接受,否则拒绝;则:
wL(M)M,wLACCL(M)={01}MLR¯
f:M,wM 是映射规约,从而 LACCmLR¯,得证

Exercise. Lstop={M:M}
(1) 利用 Rice 定理证明 Lstop 不可判定;
(2) 证明 Lstop 非递归可枚举(提示:利用归约技术);
(3) 证明 Lstop¯ 非递归可枚举(提示:利用归约技术)。

(1) M1 仅有起始节点且无转移,则 M1 必定停机;M2 仅有起始节点且有每个符号到自己的转移,没有接受节点,则 M2 必定不停机。则 “在所有输入上均停机” 是图灵机识别语言非平凡性质,得证
(2) 可证明 LACC¯mLstop,则 LACCmLstop¯。对于 M,w,构造图灵机 M,对于输入 x,模拟 Mw 上运行,若接受则运行 M2,否则停机。则
wL(M)M,wLACCMLstop¯
f:M,wM 是映射规约,从而 LACCmLstop¯,得证
(3) 同 (2),令 M 为:对于输入 x,模拟 Mw 上运行,若接受则停机,否则运行 M2

其他问题

后面就是一些其他问题了

Def. 波斯特对应问题(Post correspondence problem)
给定两个序列

A=(α1,α2,,αk)ΣB=(β1,β2,,βk)Σ

询问是否存在有限下标序列 (i1,,im),使得 αi1αi2αim=βi1βi2βim

Th. 波斯特对应问题 PCP 是不可判定的。

证明为建立一个修改后的波斯特问题 MPCP,然后证明 LACCmMPCPmPCP,还差两天考试了在此省略

Th. 文法相关问题
如下问题都是不可判定的:

  • 给定文法 G,是否 ϵL(G)
  • 给定文法 G 和字符串 w,是否 wL(G)
  • 给定文法 G,是否 L(G)=
  • 给定文法 G1G2,是否 L(G1)=L(G2)
  • 给定字符串 w,是否存在一个特定的文法 G0 使得 wL(G0)

Th. 上下文无关文法相关问题
如下问题都是可判定的:

  • 给定上下文无关文法 G,是否 ϵL(G)
  • 给定上下文无关文法 G 和字符串 w,是否 wL(G)
  • 给定上下文无关文法 G,是否 L(G)=

如下问题都是不可判定的:

  • 给定上下文无关文法 G,是否 LG=Σ
  • 给定上下文无关文法 G1G2,是否 L(G1)=L(G2)
  • 给定下推自动机 M1M2,是否接受相同语言
  • 给定下推自动机 M,计算一个等价的下推自动机 M,使得 M 的状态最少
posted @   zrkc  阅读(356)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示