本章目录
有限字的自动机(Automata on Finite Words)
不确定的有穷自动机(Nondeterministic Finite Automaton,简称NFA)
- NFA是一个五元组:
A
=
(
Q
,
Σ
,
δ
,
Q
0
,
F
)
\mathcal{A}=(Q,\Sigma ,\delta,Q_0,F)
A=(Q,Σ,δ,Q0,F)
- Q Q Q:一组有限的状态,例如下图NFA的 q 0 , q 1 , q 2 q_0,q_1,q_2 q0,q1,q2
- Σ \Sigma Σ:代表26个字母,例如下图NFA用到了 A 、 B A、B A、B两个字母
- δ \delta δ: Q × Σ → 2 Q Q \times \Sigma \to 2^Q Q×Σ→2Q,是一个变迁函数,例如下图NFA中的有箭头的线段,线段上面的字母,表示从一个状态读到这个字母,可以跳转到另一个状态
- Q 0 Q_0 Q0: Q 0 ∈ Q Q_0 \in Q Q0∈Q,是初始状态集合,例如下图NFA的 q 0 q_0 q0,NFA可能有多个初始状态
- F F F: F ∈ Q F \in Q F∈Q,是可接收(最终)状态,例如下图NFA的 q 2 q_2 q2
- 一个简单的NFA
- 字(word,简写w):
w
=
A
1
⋯
A
n
∈
Σ
∗
w = A_1 \cdots A_n \in \Sigma^*
w=A1⋯An∈Σ∗,是一串字母组成的字符串,表示一个NFA所要接收的一组输入(也叫做可接收的执行)。例如上图的NFA,可以接收
w
=
A
B
A
w=ABA
w=ABA或
w
=
A
A
B
B
w=AABB
w=AABB这样的字
- Σ ∗ \Sigma^* Σ∗表示的是一组有限字,比如 Σ = { a , b } \Sigma =\{a,b\} Σ={a,b},则 Σ ∗ = { ∅ , a , a b , a a , a a a , ⋯ } \Sigma^*= \{\varnothing,a,ab,aa,aaa,\cdots\} Σ∗={∅,a,ab,aa,aaa,⋯},只要是有限的字,都在这个集合里面,但集合内的字的数量可以是无限的
- Σ ∗ Σ = Σ Σ ∗ = Σ \Sigma^*\Sigma=\Sigma \Sigma^*=\Sigma Σ∗Σ=ΣΣ∗=Σ
- 状态变迁:
- 公式说明: q 0 ∈ Q 0 a n d q i → A i + 1 q i + 1 f o r a l l 0 ⩽ i ⩽ n , a n d q n ∈ F q_0 \in Q_0 \ and \ q_i \xrightarrow {A_{i+1}} q_{i+1} \ for \ all \ 0 \leqslant i \leqslant n,and \ q_n \in F q0∈Q0 and qiAi+1qi+1 for all 0⩽i⩽n,and qn∈F
- 文字解释:
- q 0 q_0 q0是一个初始状态(可能存在多个初始状态, q 0 q_0 q0只是其中一个)
- q i q_i qi状态下,读取字母 A i + 1 A_{i+1} Ai+1后,移动到状态 q i + 1 q_{i+1} qi+1,其中 0 ⩽ i ⩽ n 0 \leqslant i \leqslant n 0⩽i⩽n
- 最后一个状态 q n q_n qn为最终状态,也叫可接收状态
- L ( A ) \mathcal{L}(\mathcal{A}) L(A):表示自动机所有可接收的字的集合,称为自动机 A \mathcal{A} A的语言,例如: L ( A ) = { A B A , A A B B , A B A B B B , A A B B A , ⋯ } \mathcal{L}(\mathcal{A})=\{ABA,AABB,ABABBB,AABBA,\cdots\} L(A)={ABA,AABB,ABABBB,AABBA,⋯}
- 如果两个NFA可接收的语言相同,则他们是等价的,即 L ( A ) = L ( A ′ ) \mathcal{L}(\mathcal{A})=\mathcal{L}(\mathcal{A'}) L(A)=L(A′)
- 字(word,简写w):
w
=
A
1
⋯
A
n
∈
Σ
∗
w = A_1 \cdots A_n \in \Sigma^*
w=A1⋯An∈Σ∗,是一串字母组成的字符串,表示一个NFA所要接收的一组输入(也叫做可接收的执行)。例如上图的NFA,可以接收
w
=
A
B
A
w=ABA
w=ABA或
w
=
A
A
B
B
w=AABB
w=AABB这样的字
正则表达式(Regular expressions)
-
语法: E : : = ∅ ∣ ε ∣ A ∣ E + E ′ ∣ E . E ′ ∣ E ∗ E ::= \varnothing | \varepsilon | A | E + E' | E.E' | E^∗ E::=∅∣ε∣A∣E+E′∣E.E′∣E∗
- ∅ \varnothing ∅表示空集,长度为零
- ε \varepsilon ε表示空字母,也就是一个没有任何字母的输入,比如 A B ε A A AB\varepsilon AA ABεAA,长度为一
- A A A是字母表 Σ \Sigma Σ里的一个字母
- E + E ′ E + E' E+E′表示两个正则表达式相加
- E . E ′ E.E' E.E′表示两个正则表达式连接
- E ∗ E^∗ E∗表示正则表达式 E E E的有限次连接,如 E . E . E E.E.E E.E.E,其中包含零次连接,零次连接的结果为 ∅ \varnothing ∅
-
语义:自动机可以接收的语言,用 L \mathcal{L} L表示, L ( A ) = { A A B , A B B B A } \mathcal{L}(\mathcal{A})=\{AAB,ABBBA\} L(A)={AAB,ABBBA}表示自动机 A \mathcal{A} A可以接收的语言为 A A B AAB AAB和 A B B B A ABBBA ABBBA。具体规则如下
- L ( ∅ ) = ∅ \mathcal{L}(\varnothing)=\varnothing L(∅)=∅
- L ( ε ) = ε \mathcal{L}(\varepsilon )=\varepsilon L(ε)=ε
- L ( E + E ′ ) = L ( E ) ∪ L ( E ′ ) \mathcal{L}(E+E')=\mathcal{L}(E)\cup \mathcal{L}(E') L(E+E′)=L(E)∪L(E′)
- L ( E . E ′ ) = L ( E ) . L ( E ′ ) \mathcal{L}(E.E')=\mathcal{L}(E). \mathcal{L}(E') L(E.E′)=L(E).L(E′)
- L ( E ∗ ) = L ( E ) ∗ \mathcal{L}(E^*)=\mathcal{L}(E)^* L(E∗)=L(E)∗
例如 L ( E ) = { a , a b } , L ( E ′ ) = { b , a b } \mathcal{L}(E)=\{a,ab\},\mathcal{L}(E')=\{b,ab\} L(E)={a,ab},L(E′)={b,ab},则 L ( E . E ′ ) = L ( E ) . L ( E ′ ) = { a b , a a b , a b b , a b a b } \mathcal{L}(E.E')=\mathcal{L}(E). \mathcal{L}(E')=\{ab,aab,abb,abab\} L(E.E′)=L(E).L(E′)={ab,aab,abb,abab}
关于正则语言和有限自动机之间的关系
-
有限自动机所接收的语言和正则表达式所接收的语言是等价的,有相同的表达能力,都是正则语言
-
他们的交( ∩ \cap ∩)和补(complementation)是封闭的
- 封闭性表示两个正则语言的交,结果仍然为正则语言,两个正则语言的补,结果也仍然为正则语言
- NFA的 A ⊗ B \mathcal{A} \otimes \mathcal{B} A⊗B等于正则语言 L ( A ) ∩ L ( B ) \mathcal{L}(A)\cap \mathcal{L}(B) L(A)∩L(B)
- 确定的有穷自动机(Deterministic Finite Automaton,简称DFA)的 A ‾ \overline{\mathcal{A}} A等于语言 L ( A ) ‾ = Σ ∗ \ L ( A ) \overline{\mathcal{L}(A)}=\Sigma^* \backslash \mathcal{L}(A) L(A)=Σ∗\L(A),解释: Σ ∗ \Sigma^* Σ∗里去掉 L ( A ) \mathcal{L}(A) L(A),就是 L ( A ) \mathcal{L}(A) L(A)的补
-
基于确定性的封闭性:有限自动机可以用正则表达式来表示,正则表达式可以用有限自动机来表示
- 用KS来表示一个系统,用NFA来表示一个性质,如果KS ⊗ \otimes ⊗NFA的结果为 ∅ \varnothing ∅,则表示该KS没有字能够满足NFA的性质,否则,结果表示为该KS存在满足该NFA的字。
- NFA是我们对性质的一种图形表示
无限字的自动机(Automata on Finite Words)
ω \omega ω正则表达式( ω \omega ω-Regular expressions)
-
语法: G = E 1 . F 1 ω + ⋯ + E n . F n ω G = E_1.F_1^\omega + \cdots + E_n.F_n^\omega G=E1.F1ω+⋯+En.Fnω
- n > 0 n > 0 n>0
- E i 和 F i E_i和F_i Ei和Fi是 Σ \Sigma Σ上的正则表达式
- ε ∉ L ( F i ) \varepsilon \notin \mathcal{L}(F_i) ε∈/L(Fi)
- 正则表达式表示有限字的语义, ω \omega ω正则表达式表示无限字的语义
- Σ ω \Sigma^\omega Σω表示的是一组无限字,比如 Σ = { a , b } \Sigma =\{a,b\} Σ={a,b},则 Σ ω = { a ⋯ a , a b a ⋯ a a a , ⋯ } \Sigma^\omega= \{a\cdots a,aba \cdots aaa,\cdots\} Σω={a⋯a,aba⋯aaa,⋯},只要是无限的字,都在这里面(不可能是0字),同时,集合内的元素也是无限的
-
范例: ( B ∗ . A ) ω (B^*.A)^\omega (B∗.A)ω展开后为 B ∗ . A . B ∗ . A ⋯ B^*.A.B^*.A\cdots B∗.A.B∗.A⋯
-
语义: L ω ( G ) = L ( E 1 ) . L ( F 1 ) ω ∪ ⋯ ∪ L ( E n ) . L ( F n ) ω \mathcal{L}_\omega(G) = \mathcal{L}(E_1).\mathcal{L}(F_1)^\omega \cup \cdots \cup \mathcal{L}(E_n).\mathcal{L}(F_n)^\omega Lω(G)=L(E1).L(F1)ω∪⋯∪L(En).L(Fn)ω
- L ⊆ Σ ∗ \mathcal{L} \subseteq \Sigma^* L⊆Σ∗
- L ( G ) ⊆ Σ ω \mathcal{L}(G) \subseteq \Sigma^\omega L(G)⊆Σω
- L ω = { w 1 w 2 w 3 ⋯ ∣ ∀ i ⩾ 0 , w i ∈ L } \mathcal{L}^\omega=\{w_1w_2w_3\cdots|\forall _i\geqslant 0,w_i \in \mathcal{L}\} Lω={w1w2w3⋯∣∀i⩾0,wi∈L}
如果 G 1 G_1 G1和 G 2 G_2 G2所接收的语言相等,即 L ω ( G 1 ) = L ω ( G 2 ) \mathcal{L}_\omega(G_1)=\mathcal{L}_\omega(G_2) Lω(G1)=Lω(G2),则这两个 ω \omega ω正则表达式 G 1 G_1 G1和 G 2 G_2 G2等价,即 G 1 ≡ G 2 G_1 \equiv G_2 G1≡G2
-
举例: Σ = { A , B } \Sigma = \{A,B\} Σ={A,B}的情况下
- 一个包含无限多个 A A A的语言: ( B ∗ . A ) ω (B^*.A)^\omega (B∗.A)ω
- 一个包含有限多个 A A A的语言: ( A + B ) ∗ . B ω (A+B)^*.B^\omega (A+B)∗.Bω
- 空语言: ∅ ω \varnothing^\omega ∅ω
关于交并补都是封闭的,也就是两个 ω \omega ω正则语言交的结果仍然为 ω \omega ω正则语言,并的结果仍然为 ω \omega ω正则语言,补的结果仍然为 ω \omega ω正则语言
非确定性 B u ¨ c h i B\ddot{u}chi Bu¨chi自动机( N o n d e t e r m i n i s t i c B u ¨ c h i A u t o m a t o n Nondeterministic \ B\ddot{u}chi \ Automaton Nondeterministic Bu¨chi Automaton,简称NBA)
- NFA和DFA自动机只能接收有限字的自动机, B u ¨ c h i B\ddot{u}chi Bu¨chi自动机可以接收无限字的自动机
- NBA是一个五元组 A = ( Q , Σ , δ , Q 0 , F ) \mathcal{A} = (Q,\Sigma,\delta,Q_0,F) A=(Q,Σ,δ,Q0,F),字 σ = A 0 A 1 A 2 ⋯ ∈ Σ ω \sigma=A_0A_1A_2\cdots \in \Sigma^\omega σ=A0A1A2⋯∈Σω
-
A
\mathcal{A}
A可接收的字是无限序列
q
0
q
1
q
2
⋯
q_0q_1q_2\cdots
q0q1q2⋯
- q 0 ∈ Q 0 q_0 \in Q_0 q0∈Q0
- 对于所有 i ⩾ 0 i\geqslant 0 i⩾0,都有 q i → A i + 1 q i + 1 q_i\xrightarrow {A_{i+1}}q_{i+1} qiAi+1qi+1
- 存在无限经常次出现的 q i ∈ F q_i \in F qi∈F
- 一个NBA自动机可接收的语言为可接收语言对应的无限字的集合,即 A \mathcal{A} A可以被接收的语义为: L ω ( A ) = { σ ∈ Σ ω ∣ \mathcal{L}_\omega(\mathcal{A})=\{\sigma \in \Sigma^\omega| Lω(A)={σ∈Σω∣存在可接收的语言 A , A \mathcal{A},\mathcal{A} A,A由 σ \sigma σ组成 } \} }
- 如果两个NBA可以被接收的语言相同,则他们是等价的
有环的情况下的NBA和NFA
- 性质1:从NFA的相等,并不能推出NBA的相等
- 上图分析
L ( A 1 ) = A A ∗ = A ∗ \mathcal{L}(\mathcal{A_1})=AA^*=A^* L(A1)=AA∗=A∗
L ( A 2 ) = A ∗ A = A ∗ \mathcal{L}(\mathcal{A_2})=A^*A=A^* L(A2)=A∗A=A∗
L ω ( A 1 ) = A A ω = A ω \mathcal{L}_\omega(\mathcal{A_1})=AA^\omega=A^\omega Lω(A1)=AAω=Aω
L ω ( A 2 ) = ∅ \mathcal{L}_\omega(\mathcal{A_2})=\varnothing Lω(A2)=∅ - 虽然 L ( A 1 ) = L ( A 2 ) \mathcal{L}(\mathcal{A_1})=\mathcal{L}(\mathcal{A_2}) L(A1)=L(A2),但 L ω ( A 1 ) ≠ L ω ( A 2 ) \mathcal{L}_\omega(\mathcal{A_1})\neq \mathcal{L}_\omega(\mathcal{A_2}) Lω(A1)=Lω(A2)
L ω ( A 2 ) = ∅ \mathcal{L}_\omega(\mathcal{A_2})=\varnothing Lω(A2)=∅的原因是,NBA只能接收无限字的自动机,如果接收 A ∗ A A^*A A∗A,那么不满足无限字的情况,如果接收 A ω A A^\omega A AωA,那么 A ω A^\omega Aω永远也不会结束,不属于自动机了,所以 L ω ( A 2 ) \mathcal{L}_\omega(\mathcal{A_2}) Lω(A2)
- 上图分析
- 性质2:从NBA的相等,并不能推出NFA的相等
- 上图分析
L ( A 1 ) = { ∅ , A A , A A A A , ⋯ } \mathcal{L}(\mathcal{A_1})=\{\varnothing,AA,AAAA,\cdots\} L(A1)={∅,AA,AAAA,⋯}
L ( A 2 ) = { A , A A A , A A A A A , ⋯ } \mathcal{L}(\mathcal{A_2})=\{A,AAA,AAAAA,\cdots\} L(A2)={A,AAA,AAAAA,⋯}
L ω ( A 1 ) = A A ω = A ω \mathcal{L}_\omega(\mathcal{A_1})=AA^\omega=A^\omega Lω(A1)=AAω=Aω
L ω ( A 2 ) = A ω A = A ω \mathcal{L}_\omega(\mathcal{A_2})=A^\omega A=A^\omega Lω(A2)=AωA=Aω - 虽然 L ω ( A 1 ) = L ω ( A 2 ) \mathcal{L}_\omega(\mathcal{A_1})=\mathcal{L}_\omega(\mathcal{A_2}) Lω(A1)=Lω(A2),但 L ( A 1 ) ≠ L ( A 2 ) \mathcal{L}(\mathcal{A_1})\neq \mathcal{L}(\mathcal{A_2}) L(A1)=L(A2)
- 上图分析
NBA和 ω \omega ω-正则语言
- 关系:NBA可接收的语言为
ω
\omega
ω-正则语言,他们具有相同的表达能力
- 任何 ω \omega ω-正则语言都可以被一个NBA自动机所接收
- 对于任何一个NBA: A \mathcal{A} A,它可接收的语言 L ω ( A ) \mathcal{L}_\omega(\mathcal{A}) Lω(A)都是 ω \omega ω-正则语言
对于任何一个 ω \omega ω-正则语言,都存在一个可接收它的NBA
如何为一个 ω \omega ω-正则语言寻找一个可接收它的NBA呢
-
ω
\omega
ω-正则表达式的构成:
G
=
E
1
.
F
1
ω
+
⋯
+
E
n
.
F
n
ω
G = E_1.F_1^\omega + \cdots + E_n.F_n^\omega
G=E1.F1ω+⋯+En.Fnω,其中,
E
i
E_i
Ei和
F
i
F_i
Fi都是在字母表
Σ
\Sigma
Σ上的正则表达式,且
ε
∉
F
i
\varepsilon \notin F_i
ε∈/Fi
E i E_i Ei是正则表达式, F i ω F_i^\omega Fiω是一个 ω \omega ω-正则表达式,他们俩连接运算后形成了一个 ω \omega ω-正则表达式: E i . F i ω E_i.F_i^\omega Ei.Fiω
-
ω
\omega
ω-正则表达式,得到一个可接收它的NBA的过程
- 加法运算:两个NBA可接收语言的加法是:
L
ω
(
A
1
)
∪
L
ω
(
A
2
)
\mathcal{L}_\omega(\mathcal{A}_1)\cup\mathcal{L}_\omega(\mathcal{A}_2)
Lω(A1)∪Lω(A2)
- 这两个NBA是 A 1 \mathcal{A}_1 A1和 A 2 \mathcal{A}_2 A2,他们可接收的语言分别是 L ω ( A 1 ) \mathcal{L}_\omega(\mathcal{A}_1) Lω(A1)和 L ω ( A 2 ) \mathcal{L}_\omega(\mathcal{A}_2) Lω(A2)
- 多个求加法运算和两个也是一致的,先求出两个的加法运算结果,再进行下一次加法运算
-
ω
\omega
ω次方运算:对于任意的正则表达式
L
\mathcal{L}
L,如果
ε
∉
L
\varepsilon \notin \mathcal{L}
ε∈/L,则存在NBA可接收
L
ω
\mathcal{L}^\omega
Lω
L ω \mathcal{L}^\omega Lω表示无限次重复,也就是存在NBA可以接收 L L L ⋯ \mathcal{L}\mathcal{L}\mathcal{L}\cdots LLL⋯
- 连接运算:对于正则表达式 L \mathcal{L} L和NBA: A ′ \mathcal{A'} A′,存在另一个NBA可接收 L . L ω ( A ′ ) \mathcal{L}.\mathcal{L}_\omega(\mathcal{A'}) L.Lω(A′)
- 加法运算:两个NBA可接收语言的加法是:
L
ω
(
A
1
)
∪
L
ω
(
A
2
)
\mathcal{L}_\omega(\mathcal{A}_1)\cup\mathcal{L}_\omega(\mathcal{A}_2)
Lω(A1)∪Lω(A2)
通过 ω \omega ω方法将NFA转换为NBA
-
目的:让一个可接收有限字的NFA: A = ( Q , Σ , δ , Q 0 , F ) \mathcal{A} = (Q,\Sigma,\delta,Q_0,F) A=(Q,Σ,δ,Q0,F)构造成一个可接收无限字的NBA
-
A \mathcal{A} A需满足的条件: A \mathcal{A} A中的所有的初始状态都没有摄入转移,并且 Q 0 ∩ F = ∅ Q_0 \cap F = \varnothing Q0∩F=∅
- 如果上述条件不满足,则要进行如下转移
- 增加一个新的初始状态 q n e w ∉ F q_{new} \notin F qnew∈/F,
- 增加边:对于一些 q 0 ∈ Q 0 q_0 \in Q_0 q0∈Q0,当且仅当 q 0 → A q q_{0} \xrightarrow {A}q q0Aq,则 q n e w → A q q_{new} \xrightarrow {A}q qnewAq
- 其他的变迁不用变
- 转移完成后,得到了一个新的NFA,初始状态无摄入转移,此时NFA满足上述条件了
Q 0 ∩ F = ∅ Q_0 \cap F = \varnothing Q0∩F=∅表示初始状态和可接收状态是不能相交的
基本原则:原来初始状态能到达的状态,新的状态也要能到达- 转移范例:
下图的NFA中,初始状态 S 1 S_1 S1有一条摄入边,需要进行转移
所以我们要创建一个新的状态 S n e w S_{new} Snew作为新的初始状态,并且取代 S 1 S_1 S1接收字所能达到的状态,也就是需要加上 S n e w → A S 2 S_{new} \xrightarrow {A} S_2 SnewAS2和 S n e w → B S 3 S_{new} \xrightarrow {B} S_3 SnewBS3,再删除掉 S 1 S_1 S1的摄入边,此时的 NFA则满足上述条件: A \mathcal{A} A中的所有的初始状态都没有摄入转移,并且 Q 0 ∩ F = ∅ Q_0 \cap F = \varnothing Q0∩F=∅
- 如果上述条件不满足,则要进行如下转移
-
构造NBA的过程:构建一个新的NBA: A ′ = ( Q , Σ , δ ′ , Q 0 ′ , F ′ ) \mathcal{A'}=(Q,\Sigma ,\delta',Q_0',F') A′=(Q,Σ,δ′,Q0′,F′),规则如下
- 如果存在 q → A q ′ q \xrightarrow {A}q' qAq′且 q ′ ∈ F q' \in F q′∈F,则加上一条路径 q → A q 0 q \xrightarrow {A}q_0 qAq0,且对于任意的 q 0 ∈ Q 0 q_0 \in Q_0 q0∈Q0
- 其他的变迁不用变
- Q 0 ′ = Q 0 Q_0'=Q_0 Q0′=Q0且 F ′ = Q 0 F'=Q_0 F′=Q0
基本原则:原来能到达可接收状态的,也要能到达新的状态
-
构建NBA范例:用接收 ( A ∗ B ) (A^∗B) (A∗B)的NFA构造一个接收 ( A ∗ B ) ω (A^∗B)^\omega (A∗B)ω的NBA
-
因为初始状态 q 0 q_0 q0有两种能到达的状态: q 0 → A q 0 , q 0 → B q 1 q_{0} \xrightarrow {A}q_0,q_{0} \xrightarrow {B}q_1 q0Aq0,q0Bq1,所以,需要以 q n e w q_{new} qnew为初始状态,加这两种情况: q n e w → A q 0 , q n e w → B q 1 q_{new} \xrightarrow {A}q_{0},q_{new} \xrightarrow {B}q_{1} qnewAq0,qnewBq1
比较复杂的解释:
- 这是一个NFA, q 0 q_0 q0有摄入边,但我们构造的时候不能有涉入边,所以我们要进行转换,增加一个新的状态 q n e w q_{new} qnew和两个新的转移 q n e w → B q 1 q_{new} \xrightarrow {B}q_1 qnewBq1, q n e w → A q 0 q_{new} \xrightarrow {A}q_0 qnewAq0
- 根据“对于一些 q 0 ∈ Q 0 q_0 \in Q_0 q0∈Q0,当且仅当 q 0 → A q q_{0} \xrightarrow {A}q q0Aq,则 q n e w → A q q_{new} \xrightarrow {A}q qnewAq”,将性质中的 A A A换成了 B B B, q q q换成了 q 1 q_1 q1得到 q n e w → B q 1 q_{new} \xrightarrow {B}q_1 qnewBq1,将性质中的 q 0 q_0 q0换成了 q q q得到 q n e w → A q 0 q_{new} \xrightarrow {A}q_0 qnewAq0
- 此时 q 0 q_0 q0读 A A A到 q 0 q_0 q0, q n e w q_{new} qnew读 A A A到 q 0 q_0 q0, q 0 q_{0} q0读 B B B到 q 1 q_1 q1, q n e w q_{new} qnew读 B B B到 q 1 q_1 q1,对于这个状态来说,就没有涉入边了,该对它进行转换了
-
因为有两种情况可以转换到可接收状态 q 1 q_1 q1: q 0 → A q 1 , q n e w → B q 1 q_{0} \xrightarrow {A}q_1,q_{new} \xrightarrow {B}q_1 q0Aq1,qnewBq1,所以,需要加两种情况将他们转换到 q n e w q_{new} qnew: q 0 → A q n e w , q n e w → B q n e w q_{0} \xrightarrow {A}q_{new},q_{new} \xrightarrow {B}q_{new} q0Aqnew,qnewBqnew
比较复杂的解释:
- 先看 q n e w q_{new} qnew读 B B B转换到 q 1 q_1 q1, q 1 q_1 q1是可接收状态,那我们再增加一条边, q n e w q_{new} qnew读 B B B转到初始状态,也就是 q n e w q_{new} qnew本身,增加了一个自回路
- 根据性质“如果 q → A q ′ q \xrightarrow {A}q' qAq′且 q ′ ∈ F q' \in F q′∈F,则加上一条路径 q → A q 0 q \xrightarrow {A}q_0 qAq0,且对于任意的 q 0 ∈ Q 0 q_0 \in Q_0 q0∈Q0”,把性质里的 A A A换成了 B B B,把 q q q和 q 0 q_0 q0换成了 q n e w q_{new} qnew,得到 q n e w → B q n e w q_{new} \xrightarrow {B}q_{new} qnewBqnew这条边
- 我们再看 q 0 q_0 q0, q 0 q_{0} q0读 B B B到 q 1 q_1 q1, q 1 q_1 q1是可接收状态,那我们再增加一条边, q 0 q_{0} q0读 B B B到初始状态 q n e w q_{new} qnew
- 根据性质“对于一些 q 0 ∈ Q 0 q_0 \in Q_0 q0∈Q0,当且仅当 q 0 → A q q_{0} \xrightarrow {A}q q0Aq,则 q n e w → A q q_{new} \xrightarrow {A}q qnewAq”,把性质里的 A A A换成了 B B B,把 q q q和 q 0 q_0 q0换成了 q n e w q_{new} qnew,得到 q 0 → B q n e w q_{0} \xrightarrow {B}q_{new} q0Bqnew这条边
-
最后再把可接收状态转换为
可接收状态从 q 1 q_1 q1换到 q n e w q_{new} qnew的原因: q 1 q_1 q1的存在其实已经毫无意义,他被 q n e w q_{new} qnew完全取代,所以将可接收状态转移给 q n e w q_{new} qnew即可,但我们不能把他删掉,即便已经不需要用了。具体依据性质“ Q 0 ′ = Q 0 Q_0'=Q_0 Q0′=Q0且 F ′ = Q 0 F'=Q_0 F′=Q0”
- 增加了两条边之后,这个就是可接收 F ω = ( A ∗ B ) ω F^\omega=(A^*B)^\omega Fω=(A∗B)ω的NBA了
加法运算
对于任意的NBA: A 1 \mathcal{A_1} A1和 A 2 \mathcal{A_2} A2
- A 1 + A 2 = ( Q 1 ∪ Q 2 , Σ , δ , Q 0 , 1 , F 1 ∪ F 2 ) \mathcal{A_1}+\mathcal{A_2}=(Q_1 \cup Q_2,\Sigma,\delta ,Q_{0,1},F_1 \cup F_2) A1+A2=(Q1∪Q2,Σ,δ,Q0,1,F1∪F2)
-
δ
(
q
,
A
)
=
δ
i
(
q
,
A
)
\delta(q,A)=\delta_i(q,A)
δ(q,A)=δi(q,A)
δ \delta δ是一个变迁函数,之前怎么变迁的,合并后还是怎么进行变迁
- Q 1 ∩ Q 2 = ∅ Q_1 \cap Q_2= \varnothing Q1∩Q2=∅
- L ω ( A 1 + A 2 ) = L ω ( A 1 ) ∪ L ω ( A 2 ) \mathcal{L}_\omega(\mathcal{A_1}+\mathcal{A_2})=\mathcal{L}_\omega(\mathcal{A_1})\cup \mathcal{L}_\omega(\mathcal{A_2}) Lω(A1+A2)=Lω(A1)∪Lω(A2)
连接运算
对于正则表达式 L \mathcal{L} L和NBA: A ′ \mathcal{A'} A′,存在另一个NBA可接收 L . L ω ( A ′ ) \mathcal{L}.\mathcal{L}_\omega(\mathcal{A'}) L.Lω(A′), A \mathcal{A} A和 A ′ \mathcal{A'} A′满足如下条件:
- NFA: A = ( Q , Σ , δ , Q 0 , F ) \mathcal{A}=(Q,\Sigma,\delta,Q_0,F) A=(Q,Σ,δ,Q0,F)
- FBA: A ′ = ( Q ′ , Σ , δ ′ , Q 0 ′ , F ′ ) \mathcal{A'}=(Q',\Sigma,\delta',Q_0',F') A′=(Q′,Σ,δ′,Q0′,F′)
- 在
Q
∩
Q
′
=
∅
Q \cap Q'=\varnothing
Q∩Q′=∅的前提下,
A
′
′
=
A
.
A
′
=
(
Q
′
′
,
Σ
,
δ
′
′
,
Q
0
′
′
,
F
′
′
)
\mathcal{A''}= \mathcal{A}.\mathcal{A'} =(Q'',\Sigma,\delta'',Q_0'',F'')
A′′=A.A′=(Q′′,Σ,δ′′,Q0′′,F′′)
-
Q
0
′
′
Q_0''
Q0′′的取值:
- 如果 Q 0 ∩ F = ∅ Q_0 \cap F = \varnothing Q0∩F=∅,则: Q 0 ′ ′ = Q 0 Q_0''=Q_0 Q0′′=Q0
- 否则: Q 0 ′ ′ = Q 0 ∪ Q 0 ′ Q_0'' = Q_0 \cup Q_0' Q0′′=Q0∪Q0′
- F ′ ′ = F ′ F''=F' F′′=F′
-
δ
′
′
(
q
,
A
)
\delta''(q,A)
δ′′(q,A)的取值:
- 如果 q ∈ Q q \in Q q∈Q且 δ ( q , A ) ∩ F = ∅ \delta(q,A) \cap F=\varnothing δ(q,A)∩F=∅,则 δ ′ ′ ( q , A ) = δ ( q , A ) \delta''(q,A)=\delta(q,A) δ′′(q,A)=δ(q,A)
- 如果 q ∈ Q q \in Q q∈Q且 δ ( q , A ) ∩ F ≠ ∅ \delta(q,A) \cap F\neq \varnothing δ(q,A)∩F=∅,则 δ ′ ′ ( q , A ) ≠ δ ( q , A ) \delta''(q,A)\neq \delta(q,A) δ′′(q,A)=δ(q,A)
- 如果 q ∈ Q ′ q \in Q' q∈Q′,则 δ ′ ′ ( q , A ) ≠ δ ′ ( q , A ) \delta''(q,A)\neq \delta'(q,A) δ′′(q,A)=δ′(q,A)
-
Q
0
′
′
Q_0''
Q0′′的取值:
- 两个NBA进行连接的范例:
L ( A ) = ( A B ) ∗ \mathcal{L}(\mathcal{A})=(AB)^* L(A)=(AB)∗
L ( A ′ ) = ( A + B ) ∗ B A ω \mathcal{L}(\mathcal{A'})=(A+B)^*BA^\omega L(A′)=(A+B)∗BAω
则 L ( A . A ′ ) = ( A B ) ∗ ( A + B ) ∗ B A ω \mathcal{L}(\mathcal{A.A'})=(AB)^*(A+B)^*BA^\omega L(A.A′)=(AB)∗(A+B)∗BAω
Generalized NBA(简写为GNBA)
- NBA具有和 ω \omega ω正则表达式一样的表达能力,NBA的变体也有着相同的表达能力,比如Muller,Rabin,Streett automata,Generalized Büchi automata(GNBA)
- GNBA和NBA很相似,只有可接收状态不相同,也就是下面的
F
\mathcal{F}
F
- 一个GNBA可以无限次接收多组 F 1 , ⋯ , F k ( k ≥ 0 ) F_1,\cdots,F_k(k\geq 0) F1,⋯,Fk(k≥0)
- 对于每一次 k = 0 k=0 k=0,所有的运行都可接收,对于每一次 k = 1 k=1 k=1,它和NBA类似
F F F是可接收状态集合, F i F_i Fi是 Q Q Q的子集
- GNBA对于线性时间和自动机有一些作用
- GNBA是一个五元组:
G
=
(
Q
,
Σ
,
δ
,
Q
0
,
F
)
\mathcal{G}=(Q, \Sigma, \delta, Q_0, \mathcal{F})
G=(Q,Σ,δ,Q0,F)
- Q , Σ , δ , Q 0 Q, \Sigma, \delta, Q_0 Q,Σ,δ,Q0和NBA一样
- F = { F 1 , ⋯ , F k } \mathcal{F}=\{F_1,\cdots,F_k\} F={F1,⋯,Fk}是 2 Q 2^Q 2Q的子集( k ≥ 0 k\geq 0 k≥0),即 F n ⊆ Q F_n\subseteq Q Fn⊆Q( k ≥ n ≥ 0 k \geq n \geq 0 k≥n≥0)
- 可接收的字 σ = A 0 A 1 A 2 ⋯ ∈ Σ ω \sigma =A_0A_1A_2\cdots \in \Sigma^\omega σ=A0A1A2⋯∈Σω
- 对于
G
\mathcal{G}
G每一个
σ
\sigma
σ都有一个可接收的运行
q
0
q
1
q
2
⋯
q_0q_1q_2\cdots
q0q1q2⋯,这是一个无限序列,且满足:
-
q
0
∈
Q
0
q_0 \in Q_0
q0∈Q0且
q
i
→
A
i
q
i
+
1
q_{i} \xrightarrow {A_i}q_{i+1}
qiAiqi+1,
0
⩽
i
0 \leqslant i
0⩽i
q 0 q_0 q0是初始状态
- F ∈ F : q i ∈ F F \in \mathcal{F}:q_i \in F F∈F:qi∈F, q i q_i qi无限经常次出现
-
q
0
∈
Q
0
q_0 \in Q_0
q0∈Q0且
q
i
→
A
i
q
i
+
1
q_{i} \xrightarrow {A_i}q_{i+1}
qiAiqi+1,
0
⩽
i
0 \leqslant i
0⩽i
- GNBA可识别的语言 L ω ( G ) = { σ ∈ Σ ω 存在一个针对 G 中的 σ 的一个可接收的运行 } \mathcal{L}_\omega(\mathcal{G})=\{\sigma \in \Sigma ^ \omega 存在一个针对\mathcal{G}中的\sigma的一个可接收的运行\} Lω(G)={σ∈Σω存在一个针对G中的σ的一个可接收的运行}
- GNBA的一个范例:
- 此GNBA的 F = { { q 1 } , { q 2 } } \mathcal{F} = \{ \{ q1 \}, \{ q2 \} \} F={{q1},{q2}},即 F \mathcal{F} F是由 q 1 q_1 q1组成的集合和 q 2 q_2 q2组成的集合构成
- 当 c r i t 1 crit_1 crit1和 c r i t 2 crit_2 crit2无限经常次想要接收时, q 1 q_1 q1和 q 2 q_2 q2会无限经常次被访问
GNBA转NBA
-
对于任何一个GNBA G \mathcal{G} G来说,都存在一个NBA A \mathcal{A} A,使得他们的接收语言是相同的,即 L ω ( G ) = L ω ( A ) \mathcal{L}_\omega(\mathcal{G})=\mathcal{L}_\omega(\mathcal{A}) Lω(G)=Lω(A)
GNBA和NBA的表达能力是一样的
-
思想:将 F \mathcal{F} F分成 k k k块,从初始状态出发,当我们到达 F 1 F_1 F1的某个状态之后,找的到达 F 1 F_1 F1的某个状态, ⋯ \cdots ⋯,一直到找 F k F_k Fk的某一个状态,当我们到达 F k F_k Fk的某一个状态后,回去,再找 F 1 F_1 F1中的某一个状态,这样以来,我们依次把他都经过了 F 1 F_1 F1到 F k F_k Fk个状态无线经常次重复,根据这种思想,进行变换,从GNBA到NBA的一个转换
我们怎么知道我当前要经过哪一个 F F F ?
我们要通过增加一个变元的方式,把经过的 F F F记录下来
-
公式:
- GNBA: G = ( Q , Σ , δ , Q 0 , F ) G=(Q,\Sigma,\delta,Q_0,F) G=(Q,Σ,δ,Q0,F)
- NBA: A = ( Q ′ , Σ ′ , δ ′ , Q 0 ′ , F ′ ) A=(Q',\Sigma',\delta',Q_0',F') A=(Q′,Σ′,δ′,Q0′,F′)
-
Q
′
=
Q
×
{
1
,
⋯
,
k
}
Q'=Q \times \{1,\cdots,k\}
Q′=Q×{1,⋯,k}
k的值就是上面思想上的k块
- Q 0 ′ = Q 0 × { 1 } = { ⟨ q 0 , 1 ⟩ ∣ q 0 ∈ Q 0 } Q_0'=Q_0 \times \{1\}=\{\left \langle q_0,1 \right \rangle|q_0 \in Q_0\} Q0′=Q0×{1}={⟨q0,1⟩∣q0∈Q0}
- F ′ = F 1 × { 1 } = { ⟨ q F , 1 ⟩ ∣ q F ∈ F 1 } F'=F_1 \times \{1\}=\{\left \langle q_F,1 \right \rangle|q_F \in F_1\} F′=F1×{1}={⟨qF,1⟩∣qF∈F1}
- δ ′ ( ⟨ q , i ⟩ , A ) = { ⟨ q ′ , i ⟩ ∣ q ′ ∈ δ ( q , A ) i f q ∉ F i ⟨ q ′ , i + 1 ⟩ ∣ q ′ ∈ δ ( q , A ) o t h e r w i s e } \delta' (\left \langle q,i \right \rangle ,A)=\begin{Bmatrix} { \left \langle q',i \right \rangle|q' \in \delta (q,A) }& if \ q \notin F_i\\ { \left \langle q',i+1 \right \rangle|q' \in \delta (q,A) }& otherwise \end{Bmatrix} δ′(⟨q,i⟩,A)={⟨q′,i⟩∣q′∈δ(q,A)⟨q′,i+1⟩∣q′∈δ(q,A)if q∈/Fiotherwise}
-
GNBA转NBA范例:
- GNBA:
F = { F 1 , F 2 } \mathcal{F}=\{F_1,F_2\} F={F1,F2}
F 1 = { q 1 } F_1=\{q_1\} F1={q1}
F 2 = { q 2 } F_2=\{q_2\} F2={q2}
由上述可知
这个GNBA的 F \mathcal{F} F分成2块,所以k=2
所以 Q ′ = Q × { 1 , 2 } Q'=Q \times \{1,2\} Q′=Q×{1,2}
因为 Q = { q 1 , q 2 } Q=\{q_1,q_2\} Q={q1,q2}
所以 Q ′ = { ⟨ q 0 , 1 ⟩ ⟨ q 0 , 2 ⟩ ⟨ q 1 , 1 ⟩ ⟨ q 1 , 2 ⟩ ⟨ q 2 , 1 ⟩ ⟨ q 2 , 2 ⟩ } Q'=\{\left \langle q_0,1\right \rangle \left \langle q_0,2\right \rangle \left \langle q_1,1\right \rangle \left \langle q_1,2\right \rangle \left \langle q_2,1\right \rangle \left \langle q_2,2\right \rangle\} Q′={⟨q0,1⟩⟨q0,2⟩⟨q1,1⟩⟨q1,2⟩⟨q2,1⟩⟨q2,2⟩}
F ′ = F 1 × { 1 } = { q 1 } × { 1 } = { q 1 , 1 } F'=F_1 \times \{1\}=\{q_1\} \times \{1\}=\{q_1,1\} F′=F1×{1}={q1}×{1}={q1,1}
δ \delta δ到 δ ′ \delta' δ′的变化就不一一列举了,具体根据上述的公式都可以得出,举一个吧:- 在GNBA中, q 1 → t r u e q 0 q_1 \xrightarrow {true}q_0 q1trueq0
- 因为 q 1 ∈ F i q_1 \in F_i q1∈Fi
- 所以 δ ′ ( ⟨ q 1 , 1 ⟩ , t r u e ) = ⟨ q ′ , 1 + 1 ⟩ = ⟨ q ′ , 2 ⟩ \delta' (\left \langle q_1,1\right \rangle,true)=\left \langle q',1+1\right \rangle=\left \langle q',2\right \rangle δ′(⟨q1,1⟩,true)=⟨q′,1+1⟩=⟨q′,2⟩
- 因为 q ′ ∈ δ ( q 1 , t u r e ) q' \in \delta(q_1,ture) q′∈δ(q1,ture),而 δ ( q 1 , t u r e ) = q 0 \delta(q_1,ture)=q_0 δ(q1,ture)=q0
- 所以 q ′ = q 0 q'=q_0 q′=q0
- 因此,在NBA中, δ ′ ( ⟨ q 1 , 1 ⟩ , t r u e ) = ⟨ q 0 , 2 ⟩ \delta' (\left \langle q_1,1\right \rangle,true)=\left \langle q_0,2\right \rangle δ′(⟨q1,1⟩,true)=⟨q0,2⟩
对于 δ ′ ( ⟨ q 1 , 2 ⟩ , t r u e ) = ⟨ q 0 , 3 ⟩ \delta' (\left \langle q_1,2\right \rangle,true)=\left \langle q_0,3\right \rangle δ′(⟨q1,2⟩,true)=⟨q0,3⟩,因为k=2,没有 ⟨ q 0 , 3 ⟩ \left \langle q_0,3\right \rangle ⟨q0,3⟩这个状态,所以当 i i i要大于2的时候,自动变为2,也就是 δ ′ ( ⟨ q 1 , 2 ⟩ , t r u e ) = ⟨ q 0 , 2 ⟩ \delta' (\left \langle q_1,2\right \rangle,true)=\left \langle q_0,2\right \rangle δ′(⟨q1,2⟩,true)=⟨q0,2⟩
- 最终的NBA:
- GNBA: