写这篇的原因是因为我在写计算理论作业的第一题时就被难住了……于是一怒之下就查到了一些扩展资料,在此分享给大家(文末有我找到的文章所叙述内容的 B B B站视频讲解!),希望对大家有帮助捏~
那么,让我们陆续请出今天的两位主角:计算历史和线性有界自动机~
计算历史:(其实不算是很新的概念了!)设 M M M是一个图灵机, ω \omega ω是一个输入串,若 M M M接受 ω \omega ω,则在这个过程中产生的格局序列 C 1 , C 2 . . . C l C_1,C_2...C_l C1,C2...Cl(其中 C 1 C_1 C1为起始格局, C l C_l Cl为接受格局)就被叫做 M M M在 ω \omega ω上的接受计算历史。反之,若 C l C_l Cl不为接受格局而为拒绝格局,则称该格局序列为 M M M在 ω \omega ω上的拒绝计算历史。
可以看出,计算历史都是有限序列。因为接受格局或者拒绝格局的存在意味着该图灵机必然停机(如果陷入循环则不存在接受/拒绝格局),所产生的格局总数自然是有限多的。这点对于我们后面的分析十分重要。
计算历史在处理 A T M A_{TM} ATM的归约问题时具有重要作用!接下来我们就用计算历史归约方法来解决几个判定实例!
在解决例子之前,我们先来看看一个全新的概念:线性有界自动机
线性有界自动机(LBA):是一种削弱版的图灵机,它不允许读写头离开包含输入的带子的区域,也就是从左端封口变成了左右端均封口。
尽管线性有界自动机的存储功能受限,但不要小看了它的能力!其实 A D F A A_{DFA} ADFA、 A C F G A_{CFG} ACFG、 E D F A E_{DFA} EDFA、 E C F G E_{CFG} ECFG的判定器都是 L B A LBA LBA哦~
另外, L B A LBA LBA所识别的语言是一种我们课上没有讲到的语言:上下文有关语言(CSL),对应的文法是上下文相关文法。但是这已经是支线任务的支线任务了,所以今天就不过多叙述这个上下文相关文法了www
接下来我们就来证明 A L B A = { ⟨ M , ω ⟩ ∣ M A_{LBA}=\{\langle M,\omega\rangle|M ALBA={⟨M,ω⟩∣M是一个接受串 ω \omega ω的 L B A } LBA\} LBA}是可判定的!
在证明之前,先要发现这么一个事实:对于一个输入长度为 n n n的、有 q q q个状态和 g g g个带子字母表中的字符的图灵机 M M M,可以求出 M M M的格局总数为 q n g n qng^n qngn(关键在于格局总数有限!)
我们姑且把 L B A LBA LBA看做一种弱一点的图灵机,仍然沿用了格局等图灵机概念。那么我们可以设计出判定 A L B A A_{LBA} ALBA的算法:
模拟 M ( ω ) M(\omega) M(ω),执行 q n g n qng^n qngn步,若中途或者到最后停机了,则该接受接受,该拒绝拒绝;若 M M M还没有停机,由于格局总数就 q n g n qng^n qngn这么多,说明必然会出现重复格局,也就是陷入循环,应当拒绝。
因此 A L B A A_{LBA} ALBA可判定!
接下来还有几个例子哦!
(1) E L B A = { ⟨ M ⟩ ∣ M E_{LBA}=\{\langle M\rangle|M ELBA={⟨M⟩∣M是一个 L B A LBA LBA且 L ( M ) = ∅ } L(M)=\empty\} L(M)=∅}是不可判定的
我们可以通过计算历史归约,证明 A T M A_{TM} ATM可归约到 E L B A E_{LBA} ELBA,也就是可以用 E L B A E_{LBA} ELBA构造 A T M A_{TM} ATM:
我们先构造这样的 L B A M 1 LBA\ M_1 LBA M1,它只接受 ⟨ M , ω ⟩ \langle M,\omega\rangle ⟨M,ω⟩的接受计算历史(为什么 L B A LBA LBA能够接受接受计算历史也是需要讨论的,这里包括下面的 P D A PDA PDA拒绝接受计算历史的问题都很复杂很复杂,纯文字叙述太过于费力了,建议看文末的B站视频的讲解)。再用 E L B A E_{LBA} ELBA对 M 1 M_1 M1进行判定,如果判定为空则拒绝(没有接受计算历史当然拒绝了呗),不为空则接受,这样就判定了 A T M A_{TM} ATM。
但是 A T M A_{TM} ATM不可判定呀,所以 E L B A E_{LBA} ELBA不可判定!
接下来还有一个问题,也贴近我们的作业了:
(2) A L L C F G = { ⟨ G ⟩ ∣ G ALL_{CFG}=\{\langle G\rangle|G ALLCFG={⟨G⟩∣G是一个 C F G CFG CFG且 L ( G ) = Σ ∗ } L(G)=\Sigma^*\} L(G)=Σ∗}是不可判定的
类似地,我们可以构造 P D A M 1 PDA\ M_1 PDA M1 它只拒绝 ⟨ M , ω ⟩ \langle M,\omega\rangle ⟨M,ω⟩的接受计算历史(上面说明了,想了解为什么能够构造出这样的 P D A PDA PDA请参考文末视频),然后用 A L L C F G ALL_{CFG} ALLCFG来判定, A L L C F G ALL_{CFG} ALLCFG接受则拒绝,拒绝则接受
有了 A L L C F G ALL_{CFG} ALLCFG的不可判定性,我们才能利用我们所学的归约解决 E Q C F G EQ_{CFG} EQCFG的不可判定问题(所以第一题就这么折磨人真的好吗……
有关本文章讨论问题的 B B B站视频:
【【北京大学】理论计算机科学基础(全70讲)】 https://www.bilibili.com/video/BV1m4411p7nS/?p=45&share_source=copy_web&vd_source=617e5dcd119202210b54ad9f264d5833