本文已参与「新人创作礼」活动,一起开启掘金创作之路。
有限字的自动机(Automata on Finite Words)
不确定的有穷自动机(Nondeterministic Finite Automaton,简称NFA)
- NFA是一个五元组:A=(Q,Σ,δ,Q0,F)
- Q:一组有限的状态,例如下图NFA的q0,q1,q2
- Σ:代表26个字母,例如下图NFA用到了A、B两个字母
- δ:Q×Σ→2Q,是一个变迁函数,例如下图NFA中的有箭头的线段,线段上面的字母,表示从一个状态读到这个字母,可以跳转到另一个状态
- Q0:Q0∈Q,是初始状态集合,例如下图NFA的q0,NFA可能有多个初始状态
- F:F∈Q,是可接收(最终)状态,例如下图NFA的q2
- 一个简单的NFA
- 字(word,简写w):w=A1⋯An∈Σ∗,是一串字母组成的字符串,表示一个NFA所要接收的一组输入(也叫做可接收的执行)。例如上图的NFA,可以接收w=ABA或w=AABB这样的字
- Σ∗表示的是一组有限字,比如Σ={a,b},则Σ∗={∅,a,ab,aa,aaa,⋯},只要是有限的字,都在这个集合里面,但集合内的字的数量可以是无限的
- Σ∗Σ=ΣΣ∗=Σ
- 状态变迁:
- 公式说明:q0∈Q0 and qiAi+1qi+1 for all 0⩽i⩽n,and qn∈F
- 文字解释:
- q0是一个初始状态(可能存在多个初始状态,q0只是其中一个)
- qi状态下,读取字母Ai+1后,移动到状态qi+1,其中0⩽i⩽n
- 最后一个状态qn为最终状态,也叫可接收状态
- L(A):表示自动机所有可接收的字的集合,称为自动机A的语言,例如:L(A)={ABA,AABB,ABABBB,AABBA,⋯}
- 如果两个NFA可接收的语言相同,则他们是等价的,即L(A)=L(A′)
正则表达式(Regular expressions)
-
语法:E::=∅∣ε∣A∣E+E′∣E.E′∣E∗
- ∅表示空集,长度为零
- ε表示空字母,也就是一个没有任何字母的输入,比如ABεAA,长度为一
- A是字母表Σ里的一个字母
- E+E′表示两个正则表达式相加
- E.E′表示两个正则表达式连接
- E∗表示正则表达式E的有限次连接,如E.E.E,其中包含零次连接,零次连接的结果为∅
-
语义:自动机可以接收的语言,用L表示,L(A)={AAB,ABBBA}表示自动机A可以接收的语言为AAB和ABBBA。具体规则如下
- L(∅)=∅
- L(ε)=ε
- L(E+E′)=L(E)∪L(E′)
- L(E.E′)=L(E).L(E′)
- L(E∗)=L(E)∗
例如L(E)={a,ab},L(E′)={b,ab},则L(E.E′)=L(E).L(E′)={ab,aab,abb,abab}
关于正则语言和有限自动机之间的关系
-
有限自动机所接收的语言和正则表达式所接收的语言是等价的,有相同的表达能力,都是正则语言
-
他们的交(∩)和补(complementation)是封闭的
- 封闭性表示两个正则语言的交,结果仍然为正则语言,两个正则语言的补,结果也仍然为正则语言
- NFA的A⊗B等于正则语言L(A)∩L(B)
- 确定的有穷自动机(Deterministic Finite Automaton,简称DFA)的A等于语言L(A)=Σ∗\L(A),解释:Σ∗里去掉L(A),就是L(A)的补
-
基于确定性的封闭性:有限自动机可以用正则表达式来表示,正则表达式可以用有限自动机来表示
- 用KS来表示一个系统,用NFA来表示一个性质,如果KS⊗NFA的结果为∅,则表示该KS没有字能够满足NFA的性质,否则,结果表示为该KS存在满足该NFA的字。
- NFA是我们对性质的一种图形表示
无限字的自动机(Automata on Finite Words)
ω正则表达式(ω-Regular expressions)
-
语法:G=E1.F1ω+⋯+En.Fnω
- 正则表达式表示有限字的语义,ω正则表达式表示无限字的语义
- Σω表示的是一组无限字,比如Σ={a,b},则Σω={a⋯a,aba⋯aaa,⋯},只要是无限的字,都在这里面(不可能是0字),同时,集合内的元素也是无限的
-
范例:(B∗.A)ω展开后为B∗.A.B∗.A⋯
-
语义:Lω(G)=L(E1).L(F1)ω∪⋯∪L(En).L(Fn)ω
- L⊆Σ∗
- L(G)⊆Σω
- Lω={w1w2w3⋯∣∀i⩾0,wi∈L}
如果G1和G2所接收的语言相等,即Lω(G1)=Lω(G2),则这两个ω正则表达式G1和G2等价,即G1≡G2
-
举例:Σ={A,B}的情况下
- 一个包含无限多个A的语言:(B∗.A)ω
- 一个包含有限多个A的语言:(A+B)∗.Bω
- 空语言:∅ω
关于交并补都是封闭的,也就是两个ω正则语言交的结果仍然为ω正则语言,并的结果仍然为ω正则语言,补的结果仍然为ω正则语言
非确定性Bu¨chi自动机(Nondeterministic Bu¨chi Automaton,简称NBA)
- NFA和DFA自动机只能接收有限字的自动机,Bu¨chi自动机可以接收无限字的自动机
- NBA是一个五元组A=(Q,Σ,δ,Q0,F),字σ=A0A1A2⋯∈Σω
- A可接收的字是无限序列q0q1q2⋯
- q0∈Q0
- 对于所有i⩾0,都有qiAi+1qi+1
- 存在无限经常次出现的qi∈F
- 一个NBA自动机可接收的语言为可接收语言对应的无限字的集合,即A可以被接收的语义为:Lω(A)={σ∈Σω∣存在可接收的语言A,A由σ组成}
- 如果两个NBA可以被接收的语言相同,则他们是等价的
有环的情况下的NBA和NFA
- 性质1:从NFA的相等,并不能推出NBA的相等
- 上图分析
L(A1)=AA∗=A∗
L(A2)=A∗A=A∗
Lω(A1)=AAω=Aω
Lω(A2)=∅
- 虽然 L(A1)=L(A2),但 Lω(A1)=Lω(A2)
Lω(A2)=∅的原因是,NBA只能接收无限字的自动机,如果接收A∗A,那么不满足无限字的情况,如果接收AωA,那么Aω永远也不会结束,不属于自动机了,所以Lω(A2)
- 性质2:从NBA的相等,并不能推出NFA的相等
- 上图分析
L(A1)={∅,AA,AAAA,⋯}
L(A2)={A,AAA,AAAAA,⋯}
Lω(A1)=AAω=Aω
Lω(A2)=AωA=Aω
- 虽然 Lω(A1)=Lω(A2),但 L(A1)=L(A2)
NBA和ω-正则语言
- 关系:NBA可接收的语言为ω-正则语言,他们具有相同的表达能力
- 任何ω-正则语言都可以被一个NBA自动机所接收
- 对于任何一个NBA:A,它可接收的语言Lω(A)都是ω-正则语言
对于任何一个ω-正则语言,都存在一个可接收它的NBA
如何为一个ω-正则语言寻找一个可接收它的NBA呢
- ω-正则表达式的构成:G=E1.F1ω+⋯+En.Fnω,其中,Ei和Fi都是在字母表Σ上的正则表达式,且ε∈/Fi
Ei是正则表达式,Fiω是一个ω-正则表达式,他们俩连接运算后形成了一个ω-正则表达式:Ei.Fiω
- ω-正则表达式,得到一个可接收它的NBA的过程
- 加法运算:两个NBA可接收语言的加法是:Lω(A1)∪Lω(A2)
- 这两个NBA是A1和A2,他们可接收的语言分别是Lω(A1)和Lω(A2)
- 多个求加法运算和两个也是一致的,先求出两个的加法运算结果,再进行下一次加法运算
- ω次方运算:对于任意的正则表达式L,如果ε∈/L,则存在NBA可接收Lω
Lω表示无限次重复,也就是存在NBA可以接收LLL⋯
- 连接运算:对于正则表达式L和NBA:A′,存在另一个NBA可接收L.Lω(A′)
通过ω方法将NFA转换为NBA
-
目的:让一个可接收有限字的NFA:A=(Q,Σ,δ,Q0,F)构造成一个可接收无限字的NBA
-
A需满足的条件:A中的所有的初始状态都没有摄入转移,并且Q0∩F=∅
- 如果上述条件不满足,则要进行如下转移
- 增加一个新的初始状态qnew∈/F,
- 增加边:对于一些q0∈Q0,当且仅当q0Aq,则qnewAq
- 其他的变迁不用变
- 转移完成后,得到了一个新的NFA,初始状态无摄入转移,此时NFA满足上述条件了
Q0∩F=∅表示初始状态和可接收状态是不能相交的
基本原则:原来初始状态能到达的状态,新的状态也要能到达
- 转移范例:
下图的NFA中,初始状态S1有一条摄入边,需要进行转移
所以我们要创建一个新的状态Snew作为新的初始状态,并且取代S1接收字所能达到的状态,也就是需要加上SnewAS2和SnewBS3,再删除掉S1的摄入边,此时的 NFA则满足上述条件:A中的所有的初始状态都没有摄入转移,并且Q0∩F=∅

-
构造NBA的过程:构建一个新的NBA:A′=(Q,Σ,δ′,Q0′,F′),规则如下
- 如果存在qAq′且q′∈F,则加上一条路径qAq0,且对于任意的q0∈Q0
- 其他的变迁不用变
- Q0′=Q0且F′=Q0
基本原则:原来能到达可接收状态的,也要能到达新的状态
-
构建NBA范例:用接收(A∗B)的NFA构造一个接收(A∗B)ω的NBA

-
因为初始状态q0有两种能到达的状态:q0Aq0,q0Bq1,所以,需要以qnew为初始状态,加这两种情况:qnewAq0,qnewBq1
比较复杂的解释:
- 这是一个NFA,q0有摄入边,但我们构造的时候不能有涉入边,所以我们要进行转换,增加一个新的状态qnew和两个新的转移qnewBq1,qnewAq0
- 根据“对于一些q0∈Q0,当且仅当q0Aq,则qnewAq”,将性质中的A换成了B,q换成了q1得到qnewBq1,将性质中的q0换成了q得到qnewAq0
- 此时q0读A到q0,qnew读A到q0,q0读B到q1,qnew读B到q1,对于这个状态来说,就没有涉入边了,该对它进行转换了

-
因为有两种情况可以转换到可接收状态q1:q0Aq1,qnewBq1,所以,需要加两种情况将他们转换到qnew:q0Aqnew,qnewBqnew
比较复杂的解释:
- 先看qnew读B转换到q1,q1是可接收状态,那我们再增加一条边,qnew读B转到初始状态,也就是qnew本身,增加了一个自回路
- 根据性质“如果qAq′且q′∈F,则加上一条路径qAq0,且对于任意的q0∈Q0”,把性质里的A换成了B,把q和q0换成了qnew,得到qnewBqnew这条边
- 我们再看q0,q0读B到q1,q1是可接收状态,那我们再增加一条边,q0读B到初始状态qnew
- 根据性质“对于一些q0∈Q0,当且仅当q0Aq,则qnewAq”,把性质里的A换成了B,把q和q0换成了qnew,得到q0Bqnew这条边

-
最后再把可接收状态转换为
可接收状态从q1换到qnew的原因:q1的存在其实已经毫无意义,他被qnew完全取代,所以将可接收状态转移给qnew即可,但我们不能把他删掉,即便已经不需要用了。具体依据性质“Q0′=Q0且F′=Q0”
- 增加了两条边之后,这个就是可接收Fω=(A∗B)ω的NBA了
加法运算
对于任意的NBA:A1和A2
- A1+A2=(Q1∪Q2,Σ,δ,Q0,1,F1∪F2)
- δ(q,A)=δi(q,A)
δ是一个变迁函数,之前怎么变迁的,合并后还是怎么进行变迁
- Q1∩Q2=∅
- Lω(A1+A2)=Lω(A1)∪Lω(A2)
连接运算
对于正则表达式L和NBA:A′,存在另一个NBA可接收L.Lω(A′),A和A′满足如下条件:
- NFA:A=(Q,Σ,δ,Q0,F)
- FBA:A′=(Q′,Σ,δ′,Q0′,F′)
- 在Q∩Q′=∅的前提下,A′′=A.A′=(Q′′,Σ,δ′′,Q0′′,F′′)
- Q0′′的取值:
- 如果Q0∩F=∅,则:Q0′′=Q0
- 否则:Q0′′=Q0∪Q0′
- F′′=F′
- δ′′(q,A)的取值:
- 如果q∈Q且δ(q,A)∩F=∅,则δ′′(q,A)=δ(q,A)
- 如果q∈Q且δ(q,A)∩F=∅,则δ′′(q,A)=δ(q,A)
- 如果q∈Q′,则δ′′(q,A)=δ′(q,A)
- 两个NBA进行连接的范例:
L(A)=(AB)∗
L(A′)=(A+B)∗BAω
则L(A.A′)=(AB)∗(A+B)∗BAω

Generalized NBA(简写为GNBA)
- NBA具有和ω正则表达式一样的表达能力,NBA的变体也有着相同的表达能力,比如Muller,Rabin,Streett automata,Generalized Büchi automata(GNBA)
- GNBA和NBA很相似,只有可接收状态不相同,也就是下面的F
- 一个GNBA可以无限次接收多组F1,⋯,Fk(k≥0)
- 对于每一次k=0,所有的运行都可接收,对于每一次k=1,它和NBA类似
F是可接收状态集合,Fi是Q的子集
- GNBA对于线性时间和自动机有一些作用
- GNBA是一个五元组:G=(Q,Σ,δ,Q0,F)
- Q,Σ,δ,Q0和NBA一样
- F={F1,⋯,Fk}是2Q的子集(k≥0),即Fn⊆Q(k≥n≥0)
- 可接收的字σ=A0A1A2⋯∈Σω
- 对于G每一个σ都有一个可接收的运行q0q1q2⋯,这是一个无限序列,且满足:
- q0∈Q0且qiAiqi+1,0⩽i
q0是初始状态
- F∈F:qi∈F,qi无限经常次出现
- GNBA可识别的语言Lω(G)={σ∈Σω存在一个针对G中的σ的一个可接收的运行}
- GNBA的一个范例:
- 此GNBA的F={{q1},{q2}},即F是由q1组成的集合和q2组成的集合构成
- 当crit1和crit2无限经常次想要接收时,q1和q2会无限经常次被访问
GNBA转NBA
-
对于任何一个GNBA G来说,都存在一个NBA A,使得他们的接收语言是相同的,即Lω(G)=Lω(A)
GNBA和NBA的表达能力是一样的
-
思想:将F分成k块,从初始状态出发,当我们到达F1的某个状态之后,找的到达F1的某个状态,⋯,一直到找Fk的某一个状态,当我们到达Fk的某一个状态后,回去,再找F1中的某一个状态,这样以来,我们依次把他都经过了F1到Fk个状态无线经常次重复,根据这种思想,进行变换,从GNBA到NBA的一个转换

我们怎么知道我当前要经过哪一个F ?
我们要通过增加一个变元的方式,把经过的F记录下来
-
公式:
- GNBA:G=(Q,Σ,δ,Q0,F)
- NBA:A=(Q′,Σ′,δ′,Q0′,F′)
- Q′=Q×{1,⋯,k}
k的值就是上面思想上的k块
- Q0′=Q0×{1}={⟨q0,1⟩∣q0∈Q0}
- F′=F1×{1}={⟨qF,1⟩∣qF∈F1}
- δ′(⟨q,i⟩,A)={⟨q′,i⟩∣q′∈δ(q,A)⟨q′,i+1⟩∣q′∈δ(q,A)if q∈/Fiotherwise}
-
GNBA转NBA范例:
- GNBA:
F={F1,F2}
F1={q1}
F2={q2}
由上述可知
这个GNBA的F分成2块,所以k=2
所以Q′=Q×{1,2}
因为Q={q1,q2}
所以Q′={⟨q0,1⟩⟨q0,2⟩⟨q1,1⟩⟨q1,2⟩⟨q2,1⟩⟨q2,2⟩}
F′=F1×{1}={q1}×{1}={q1,1}
δ到δ′的变化就不一一列举了,具体根据上述的公式都可以得出,举一个吧:
- 在GNBA中,q1trueq0
- 因为q1∈Fi
- 所以δ′(⟨q1,1⟩,true)=⟨q′,1+1⟩=⟨q′,2⟩
- 因为q′∈δ(q1,ture),而δ(q1,ture)=q0
- 所以q′=q0
- 因此,在NBA中,δ′(⟨q1,1⟩,true)=⟨q0,2⟩
对于δ′(⟨q1,2⟩,true)=⟨q0,3⟩,因为k=2,没有⟨q0,3⟩这个状态,所以当i要大于2的时候,自动变为2,也就是δ′(⟨q1,2⟩,true)=⟨q0,2⟩
- 最终的NBA:
