计算理论
Regular Languages
略
DFA
略.
NFA
考虑一个五元组
利用NFA容易证明当
GNFA
考虑一个五元组
证明比较平凡,直接考虑每次删掉一个点,然后把其它的所有点两两配对考虑经过这个点的情况,把相应的边concat起来.然后如果有自环就加
显然DFA可以转为一个GNFA(接收状态稍微收集一下),这也证明了RE的表达能力不弱于DFA.
Pumping Lemma
如果
. . .
也就是足够长的串总会在不任意靠后的地方出现非平凡循环体.
证明办法的话,考虑先转为DFA,这个DFA总共就这么几个结点,不妨直接设
我依稀记得我在coq中用induction技巧不途径DFA证明过这个,但我忘了咋搞的了x.
Context-Free Languages
考虑一个四元组
是variables. 是terminals 是rules 是start variable
PDA
考虑一个五元组
转移现在成为了两串
.- 当
时,需要有 . .
现在我们来证明CFL和PDA等价.
先看如何证明能被CFL生成的都能被PDA识别.问题显然仅仅在于我不知道我当前在匹配哪条规则,所以我们直接把这个压入栈中就行了.后面匹配完成后再逐渐把后半部分的字符消灭掉,毛估估一下.
再看怎么证明PDA能识别的都能被CFL生成.我们先改造这个PDA满足:
- 只有一个接收节点.
- 接受的时候必须清空堆栈.
- 每次转移要么进行压入,要么进行弹出.
显然这些都可以做一些平凡的转化得到.
定义
- 对于状态
,如果遇到 字符, 会压入 ;遇到 字符, 会弹出 .则将 . - 对于状态
,直接添加规则 . - 对于状态
,直接添加规则 .
其实还是在做括号序列.我们来看为何能被PDA识别的都能被CFL生成.原因是如果能被PDA识别,去看它的括号序列,就可以反映出上面的这些部分.
Pumping Lemma
如果
. . .
接下来我们考虑最简的一种推理方式,即运用最少次规则推导出来.
由于
现在来看(2),如果
最后来看(3),只需要找最靠下的
Turing Machine
一个
作为状态集. 作为输入字符表. 作为tape字符表.
一般而言,输入的字符在第一个纸带上.
我们说一个图灵机接受一个
我们称一个语言是Turing-recognizable的,当且仅当存在一个图灵机接受它(可以不停机或者拒绝).我们称一个图灵机是decidable的,当且仅当它永远不会陷入死循环,一定会到达一个Halt状态.
现在我们想要探索这些东西的边界:
- 是否存在一个语言不可被recognized.
- 是否存在一个语言可以被recognized,但是不可被decided.
对于(1)是一个很自然的事.图灵机的数量是可数的,但是语言的集合显然是不可数的.这就完蛋了.
称一个语言
- 如果
是decidable的,那么 一定是decidable的. - 如果
是undecidable的,那么 一定是undecidable的. 当且仅当 .
来看:
. . .
我们可以证明:
. . . 都是undecidable的. 都是recognizable的.
现在需要搞定
引理: 一个语言
这条引理可以证明
而
而显然
Time Complexity
设
定义
另一种定义NP的方式是用NDTM来定义,定义NP为所有可以被NDTM在多项式时间内判定的问题的集合.
下面我们来证明这两种定义等价.不妨设它们分别是NP1和NP2.
先证明
对于
Time Hierarchy Theorem
如果
包含关系是显然的.问题在于找一个语言在
现在考虑一个
P-NP
定义多项式时间归约当且仅当存在一个多项式时间计算的
定义一个语言
定义一个语言
Cook-Levin Theorem
考虑一个Bool表达式(只包含原子变量和与或非),定义一个
下面我们证明SAT和3-SAT都是NPC.
显然SAT和3-SAT都是NP的(只要给一组赋值就行).下面我们来证明对于任意
我们想要搞一个多项式时间可计算的函数
考虑转化为对configuration序列进行判断,考虑搞一个
唯一的问题在于层数.考虑你需要先读一下指针所指的位置,再用
下面来看怎么证明
评论