丢失图片,没有渲染后的pdf版。。。
FLA Final Review
Slides Review
lect1
字母表,形式符号的非空有限集合
字符串或字
字母表的0次方为{epsilon},递推定义

语言:任何字母表星闭包的子集
证明:逆否证明,反证、互归纳,提出多个原子命题互相证明,一般具有某正对称性和推论关系
归纳定义:基础、归纳递推规则、极小声明
lect2
上下文无关文法 T V S P 自下而上递归推理叫归约,自上而下叫推导
推导传递闭包,通过归纳定义,递归基是自己推自己 最左:总是替换最左非终结符,推导加*
句型:能够由S推出来的状态,有左右句型之分,全是终结符叫句子
def 上下文无关文法的语言为上下文无关语言
构造:对称拆分不等关系变大于小于 控制范围的可以两边夹
计数题:找唯一分割点 count a=b S->aSbS|bSaS|epsilon 差2的找轴点切分 计数不等于:第一次a比b多停下,前面相等,中间a,后面a不少于b(通过可以单增a实现
证明文法和语言等价:归纳w的长度和推导步数(讨论第一步所使用的产生式)
经常互归纳一些中间状态的含义。。

chomsky 0:图灵机 α推β α中至少一个非终结符
1 α长度小于等于β(可以S推epsilon) S不出现在任何P右边 上下文有关 线性有界自动机
2 一个非终结符号推β 上下文无关 下推自动机
3 A推aB 或者A推a 正规文法 正规语言 有限状态自动机
语法分析树,内部非终结 叶子可终结可不终结or空 产生式是父子关系 果实是连接叶子的句型
可归约 存在推导 存在最左 存在最右 存在根节点A分析树果实为w 等价

归约:归纳步数讨论其最后一步产生式(其实为推导的第一个产生式)
归纳分析树的高度,递归的时候归纳第一层的产生式 证明推导到归约 归纳于步数

二义性文法:对某个w存在两颗不同的分析树or存在两个不同的最左推导,二者等价
不可判定的,不存在算法
如果语言的所有文法都是二义的,则L是固有二义的 什么是最左推导?


lect3
正规表达式的语言是正规语言 可以联合并集+ 连接· 星闭包
定义正规表达式集合:字母表都是,空字符和空集都是,变量(可以包含任意的其他变量和递归基础符号和字母)都是 归纳:可+ 接 星闭包和括号
?是空+L L零次方为空字符
定义正规语言 {epsilon}和空语言是正规的,单字母正规,正规之间的并 接和星闭包正规
设计时一定考虑边界情况,讨论结尾,关注长度限制!空,单0单1等等 利用空字符达成位置的位移“前x位至少包含x个1”
代数定律:语言之间的运算可以直接全部替换成简单符号表达式。


应该不考的证明。。
推论:
应用:证明语言运算之间的代数定律直接用具体字符替换之后证明即可
lect4
有限状态自动机PDA 状态集、输入符号集、转移函数、开始态、终态集合
记得转移图、转移表上标Start、箭头,终态双圈、星号 对每个状态都要有全部的接受符号转移
这里的转移函数只有q和a=新q,拓展到多步a变w。定义拓展时候w=xa拆开的最后一个符号
可以证明DFA的语言是正规语言:一般可以互归纳证明中间状态的含义,从初态到某个状态当且仅当转移函数的w包含,需要证两个方向。。
构造PDA:不包含就把包含的终态调换,箭头调换为回文,设置垃圾桶节点
非确定自动机NFA,可以转多个或不转,转移函数的值是状态集合,扩展转移函数是所有可能在的状态尝试转移之后再并集。所以w转移之后与F交不为空即可接受。
设计:随时都可以尝试xxx
NFA DFA的等价性:D转N把每个转移函数的结果都加上{}变成集合 两者都是归纳于字长
N转D 子集构造法 一定想着标记开始和结束。从起始状态开始走到哪写哪。意义在于可能到达的状态,正确性证明:任意w代入初态开始的转移函数在两个自动机中得到的值都一样。最坏2^n个状态
文本搜索的NFA和转DFA规则??借题复习
带空转移的NDA,可以用转移图、转移表表示 特殊的空闭包ECLOSE就是自己和自己空转移的可达状态,转移函数则为每一步都要ECLOSE闭包,算的时候闭包和转移间隔着算
语言:仍然和DFA等价:DFA转空NFA—没有空转移则但可接受空字符到自己,每一个转移函数结果变为集合 空NFA转DFA:自己构造法,每一步都需要做闭包。证明正确性归纳于字长:


构造空NFA处理那种“前几个里面至少有一个x” 合理运用空转移等价于(0+1+epsi)^x
特定子串情况时尤其考虑好子串的重叠
填表法确定状态偶对,如果状态可区别则其共同前驱可区别,先区别所有终态非终态。之后看表的疏密程度选择由转移表填图还是按图找转移表。在题目里面复习

优化DFA:删除不可达,填表找偶对,删除该删除的等价类只保留一个,构造
lect5
证明DFA是正规语言:给DFA转re和RE转空NFA
Thompson构造:相加:左边两空右边两空,新增两个状态四条边
拼接:新增一条空转移边
星闭包:画飞碟上回下进,新增四条空转移和两个新状态
DFA转RE:KLEENE构造和路径消去
Kleene:计算Rkij,k=0为中间不经过任何节点,不同节点没弧线为空集,有弧线为a,多条相加 ij相同空加所有a
迭代Rkij在k!=0时候:一步过不经过k和经过k转几圈再过去
状态消去:消去两入两出带自环的中间态:到该节点转几圈过去,对每一个终态都消到只剩下该终态以及初态。最后要么剩两个要么剩一个。剩一个就是自环的星闭包,剩两个就是(自转+过去转几圈回来)*过去在终态转圈* 这两种都是n^3 * 4^n的复杂度
Lect6
Pumping 用来证明不是正规语言
pumping特性,任何一个长度不小于状态数目的字符串所标记的路径上必然出现重复状态,n长度涉及n次转移共n+1个状态。
引理:正规语言L,存在常数n>=1,使得任意长度不小于n的字符串w在L中,都可以分成三个部分满足以下条件:y不是空,xy小于等于n,对任何k>=0都有xykz在L中
证明不是正规语言:如果是正规语言,则存在一个n,随便取一个长度大于等于n的串,证明其任意符合y非空,xy<=n的分割,都没有xykz一定属于L
一些判定算法
- 判定是否非空:DFA递推求出所有可达状态,若包含任何终态则非空 RE 特殊的空语言的0次方应该是空语言 根据正规的四种运算从小的判定起,复杂度On
- 判断是否包含特定字符串:DFA:处理看在不在终态,NFA转化DFAor处理看集合中有没有终态 RE:转化空NFA执行
- 判定两个正规语言相等:都转DFA之后重命名使之不重名,两个相并,终态仍终态,转移边不变。取任何状态为初态??填表算法看原来的初态是否可区别 On4可降On2
正规封闭运算:并星闭包连接都可以由RE证明
补:也是正规语言,DFA的所有终态和非终态对调即可
交:也是正规语言,就是L补并上M补再整体取补orDFA:使用状态的笛卡尔二元积,

差:也是正规语言,是M取补再和L交
反向:也是正规语言:分别对RE中的三个基础(空语言 空字符和单字符)四种运算证明or构造DFA把转移弧反向,初态为终态,所有终态空字符连接至超起点
同态:正规语言同态后依然是正规语言 这个T*是嘛玩意?

归纳证明于RE的三个基础与四种运算

反同态w为什么不直接是字母表而是星闭包??仍然也是正规语言,用DFA证明:

构造一个状态集合以及始末都相同的DFA B,字母表改成h的定义域表,转移函数为这边的a是那边的h(a)构造好DFA即可,可以归纳与w字长证明正确性 q0经过w==q0经过h(w)
构造反同态dfa相当于构造原集合的转移,先按字母表讨论再去DFAA中找这条路径能到哪
Lect7
Push Down Automaton PDA带有堆栈的有限状态自动机 七元组{状态集合,接受字符,堆栈符号,转移函数,起始状态,开始堆栈符号,终态集合} 其中状态转移可以接受epsilon,不用给全所有可能(默认不写的转移函数值为空集),但栈顶和输入符号确定时值唯一
状态转移函数接受δ(状态、字符、栈顶)=状态+栈顶 新压入的放左边(左边栈顶)
ID表达格局(q,w,γ)状态,剩余串和栈内容 定义ID推导关系

定义自反传递闭包* ,自己推自己,且可传递。。 这里可以归纳于步数证明,自反传递闭包的推导中字符后面带东西和栈底有东西都不影响
终态接受语言:ID处理完w后能到终态,栈无所谓
空战接受语言:ID处理完能到空栈,可以不规定终态
从空栈到终态:新增栈底元素X0,增加超起点用来压入原空栈的栈底元素并进入空栈PDA的起始点。对空栈PDA的每个状态都增加一个空转移可以把新栈底元素无偿弹出成空连接到超收点。
相当于:在原来空栈接受的栈低下垫了一层新的栈底元素,原来的栈只要空了就有机会从任意状态直接弹出新栈底干到终态去。
从终态到空栈:同样增加新的栈底元素,新起点连接老起点负责压入原栈底,在每个终态都可以直接空转移弹出所有到超收点。超收点也是无条件空转移弹出所有栈元素
构造PDA:“任意前缀中a至少是2倍b:a压1个b弹两个才能回来

a数目和b数目的累计:记录栈中是a多还是b多多几个,a每多一个栈多一个X,b Y,b遇到X弹出…… 最后要求栈里面不空就空字符+X(Y)才能转到终态。
a=b且不含连续c:处理连续c—不入栈但把状态拐出去下一个一定得是a或者b
思考:对于计数来说多用栈解决,对于正规就能搞定的连续之类的问题多用状态(包括压栈时候的一些二倍关系)搞定。最后检测栈里面必须只剩下Z0
可以一次性压入两个但是不能弹出两个,因为只能更换栈顶那L7P23压两个不行吗?
三个阶段的时候比如一定是若干a若干b若干c,阶段间转移建议用空字符+不变栈顶 为了表示“随时可以开始下一阶段”比如判断回文,不知道中点的时候需要尝试
lect08
从CFG到EPDA
一个状态,接受Terminals,栈里面非终结终结都有,开始符号就是栈底元素
所有的产生式都是空转移读栈顶替换成新的,所有的终结符都可以与栈顶对应之后消掉。非终结符只处理栈,终结符的处理字符串同时消栈直到非终结符在栈顶
“PDA的转移函数右端可以是个集合有多个不同结果吗???空字符看来一定可以,具体字符呢?”
证明正确性:归纳于最左推导的步数n ,讨论第一步所用的产生式
归纳于ID推导的步数n,讨论第一步产生式
- 从EPDA到CFG


初态能到任何[初态,栈底符号,any状态]
对原PDA中任何产生式,都有[p X pk]–>a[q X1 any] [any X2 any]…… [any Xk pk] 每个转移函数对应:新栈顶*状态总数
特别的 弹出操作新栈顶为epsilon时only a on right
特别的 新栈为空+转移字符为空时候左边为空
证明正确性:



LEct9 确定下推自动机
默认是终态接受的DPDA 确定的栈顶、字符转移函数的值只有一个元素即集合只有一个元素但仍为集合+如果有非空字符的转移则不能有相同状态相同栈顶的空转移
判断回文的经典自动机DPDA的话中间得有个标志,不然没法实现“随时都可以尝试进入下一阶段的处理”中的随时。但是虽然确定也不用每个状态写满
结论:正规语言一定存在DPDA的表示,从对应的DPA继承过来即可,可以对w的字长归纳证明

归纳时候拆成了w=x a ,先用归纳假设干掉x之后 根据继承产生式干掉a
DPDA的能力强于DFA 如WcWR不是正规语言(by pumping)
前缀性质:不存在互异的x y串在L中且x是y的前缀 L$一定具有前缀性质
一个语言L是某个空栈接受的EDPDA P的语言 iff L具有前缀性质且是某个FDPDA P‘ 的语言?比如经典的回文,具有前缀性质且L是某个DPDA的语言,则L也一定是某个空战接受的EDPDA的语言
存在上下文无关语言不是任何DPDA的语言(确定的上下文无关语言)不需证明 例: WWR
语言是空栈接受的DPDA的语言时L存在一个无二义文法(参考空栈PDA构CFG的方法,且有唯一的最左推导。。)
L是某个DPDA P的语言则L存在一个无二义的文法
Proof:使用L$构造一个具有前缀性质的语言,根据上一性质得到无二义的G’,把$作为非终结符加上产生式$推epsilon
由上两条:固有二义语言不是任何DPDA的语言 但是也有非固有二义语言不是任何DPDA的语言比如WWR

Lect 10 CFG简化与chomsky范式
符号(包括V和T):生成符号(能推出w)、可达符号 (能被S推出的一部分)在一起是有用符号?不一定,可能有一个生成又可达的但是和一个无用绑定在一起被生成,为无用符号
消去所有非生成 再消去所有非可达,就剩下都是有用且与原文法等价。计算生成,删除,计算可达,删除。
如何计算生成符号?所有T都是生成符号,如果右面都生成则前面的A一定生成。不重不漏Proof?
计算可达?S可达,左面可达则右面所有皆可达 不重不漏 Proof?
可以为了简洁把V换名字
消去epsilon产生式,可致空符号能推导出epsilon:基础,右边都是可致空则左边也是 不重不漏 先计算所有可致空符号 在可致空符号出现的地方讨论其出现或者不出现。特别的,单推空的直接删去。这样的与原来相比不能产生epsilon别的不受影响4
Unit产生式 A-》B unit偶对当且仅当A能在*步推出B且该推导只使用了unit产生式 需要计算所有unit偶对:每个字母和自己一定是unit偶对;如果AB是偶对,B-》C则AC也是偶对。不重不漏
计算偶对;对每个偶对找到最后那个非偶对的V比如A-》B B-》α 则加入A-》α删去unit产生式
但是保留B推α,可能产生不可达! 最后在偶对的推导链上把前面的都连到最后一个
简化CFG:消除空产生式、消除Unit产生式、消除非生成符号、消除非可达符号。这样的与原G只差空字符
Chomsky范式:任何不含空字符的非空上下文无关语言都存在一个CFG G产生式只有两种:一推二非终结符、非终结符推终结符。这样的文法叫做。。。
对前文的工作(右边长度1的只有终结符)之后再:
如果有非终结符a出现在右边长度大于1的,则引入新的非终结符替换掉,并加上A->a 至此右边长度大于1的产生式只有非终结符
对于右边长度大于2的采用级连cascade方法转变为——对A推出k个,引入k-2个新V替换掉
实质上是对此在二叉化。。 与原L只差空字符
CKY算法:判断某个串 属于某个CFG和分析树

先左再上,手指指着更新的时候(紧下列向下滑,右下向左上滑)
Lect 11 上下文无关语言的计算
Pumping引理:设非终结符数量m,取字长不小于n=2^m的字符串z,考察其分析树:
CNF后为二叉,叶节点为n个,则h-1>=log2,|z|>=m,设从根节点S的一条最长路径S A1……Ak 至少为m+1 必有重复节点在A这条路中。划分为uvwxy,
则一定可以pump v和x,其i次方都应该合格理解为某个广义产生式(推导关系)可以递归
Lemma:存在正常数n,使得任意长度不小于n的字符串z在L内,都可以分成uvwxy五部分且满足:vx不空,|vwx|<=n 对任何k>=0 都可以pump v与x
用来否定
- 假设是CFG,则存在一个整数n满足pumping引理,取一个串>n
- 讨论符合规则的五段划分,证明其都不能pump起来(都存在一个pump次数k使得串不再是L中)
判定CFL是否为空:计算生成符号之后看S在不在,On方降On
判定是否包含特定字符串:chomsky之后CKY On3
不可判定问题:无二义?固有二义?两个CFG相交为空?相等?给定CFG是否是字母表*
封闭运算
替换:如果任何字母表中的a,s(a)是CFL且L是CFL则替换后s(L)也是上下文无关。
证明:分析树每个叶节点a替换成s(a)的分析树
映射每一种字母表中字符到一个语言称为替换,可以替换a,w(拼接替换字符)甚至L(w的替换并集)
并:两个CFL并也是CFL 替换{0,1}中0为L1,1为L2 ,即得
*闭包和+闭包:都是CFL 也是替换掉{1*}中的1为L则得
连接:{01}分别替换为L1 L2
同态:替换s(a)={h(a}},则s(L)=h(L)
反向:L是则LR也是(每一个都Reverse),证明:构造G后尝试构造G’
产生式中每个右端都reverse掉,这样的G‘就是LR 归纳于推导长度证明?
交 补 差 都不一定 交出0^n 1^n 2^n后不是CFL但是n n i 和 i n n都是
CFL与RL正规语言的交一定是CFL 、
根据DFA和FPDA构造

反同态仍然是CFL:

Lect 12 Turing Machine
基本图灵机:带与带头,空白符B 七元组{状态集合,接受字符集合、带符号集合、转移函数集合、开始状态、空白符、终态集合} 转移函数为偏函数从状态和带符映射到状态、带符和方向
ID表达格局:带头表示为当前状态,后面是正在扫描的单元格cell 前后需要空白之中的符号串但是也可以有B串
ID推导,特殊的可以往两边推,如果带头到了B上则写B,如果把最右/左端写成B则可以省略
一般计数的思想为匹配:从左往右跑一趟就是匹配了一组数,再回去再跑。。
可被图灵机接受的是递归可枚举语言REL 定义TM的语言是使得q0w 推出 终态的串w集合
halt:不存在下一个移动,与原来的图灵机语言相通但是接受w之后停机不再移动。总是假定图灵机到达终态之后停机(对于可接受的w)
递归语言:当且仅当存在TM M使得LM=L且如果语言中的w,M接受自然会停机,非语言中的w输入M中也会停机(但是无法到达终态) ——对应的问题是可判定的
带存储区的状态:状态有有限个取值,其实是带头有个存储区可以在移动的时候改变。适用于一些分类的情况如 与经典图灵机等价(状态变成了二元组而已)

多道图灵机:也是基本图灵机但是纸带是原来的三倍宽,即每个带单元格可以表示为三元组
编程技巧:在图灵机中融入子例程干一件特定的事情
多带图灵机:初始输入符号串在第一条带上,其他所有带的单元格都是B;有限控制位于初态;第一条带头在输入串最左,其余不定。可以有3(多个)带头。每一个move中,控制进入新的状态,每条带上正在被扫描的符号被替换为新带符,每个带头独立的向左、右、不动。
其能力等价于单带图灵机:用2k道模拟k带图灵机。

非确定TM:转移函数右边是三元组的集合,仍与确定图灵机等价。双带图灵机可以模拟非确定。广度优先的方式模拟非确定性图灵机的整个ID‘s空间树

受限图灵机(都与基本TM等价):半无穷带(双道半无穷即为双无穷)、多栈机(k个下推栈可以用k+1条带的多带TM模拟(一条扫描,剩下k条下推),两个下推栈就可以模拟一般图灵机,其中一个是带头左边单元格,另一个是当前以及右边单元格)、k计数器机(多个非负整数的计数器,控制时只知道是否非零——特殊k多栈机,一个计数器就是DPDA,两个以上就是TM



普通计算机模拟图灵机,说明计算机不弱于图灵
以多带图灵机模拟普通计算机(TM不弱于现行冯诺依曼计算机):

Lect 13 Computing Theory
图灵机与输入串的二进制编码:假定输入01串,有限状态1~k,规定始末态12,带符号X1到Xm且X1为0 X2为1 X3为B 假定带头移动为D1D2分别LR

单1间隔转移规则中的元素,双1间隔转移规则,三1前面是输入串编码(前面需要加个1?)后面是图灵机编码
编码01串:任何01串编码为1w比如 / 空:1/ 1:11 / 0:10 / 00:100 L13P6?

对角语言——不是递归可枚举
按照上述编码每个TM对应整数i 即其二进制编码是第i个0 1字符串,但不是每个整数都有图灵机对应。认为第j个图灵机不接受任何串,这样定义对角语言:

递归语言补运算封闭,递归语言的补也是递归语言。

递归可枚举语言的补运算不封闭:反例:通用语言
如果语言和语言的补都是递归可枚举的,则一定都是递归的

通用语言——递归可枚举但是非递归,


语言对应的问题:“任意给一个串w在字母表*内,判定w是否是L内?”
通用语言对应的问题:“任给图灵机M和输入串w,判定w是否被M接受?“
图灵机停机问题:任给TM M,以及输入串w试问对w,M是否停机?——

如果问题所对应语言是递归的,则该问题可判定,否则不可判定。语言递归可枚举贼该问题部分可判定,否则非部分可判定
问题的归约?





TM的时间复杂度,最多T(n)步停机,无论是否有w是M的语言。则为Tn
非确定的时间复杂度:任何转移序列









