【系统分析与验证笔记】关于自动机的规范语言(Specification Language)

有限字的自动机(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 q0q1q2
    • Σ \Sigma Σ:代表26个字母,例如下图NFA用到了 A 、 B A、B AB两个字母
    • δ \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 Q0Q,是初始状态集合,例如下图NFA的 q 0 q_0 q0,NFA可能有多个初始状态
    • F F F F ∈ Q F \in Q FQ,是可接收(最终)状态,例如下图NFA的 q 2 q_2 q2
  • 一个简单的NFA
    在这里插入图片描述
    • 字(word,简写w): w = A 1 ⋯ A n ∈ Σ ∗ w = A_1 \cdots A_n \in \Sigma^* w=A1AnΣ,是一串字母组成的字符串,表示一个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 q0Q0 and qiAi+1 qi+1 for all 0in,and qnF
      • 文字解释:
        • 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 0in
        • 最后一个状态 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)

正则表达式(Regular expressions)

  • 语法: E : : = ∅ ∣ ε ∣ A ∣ E + E ′ ∣ E . E ′ ∣ E ∗ E ::= \varnothing | \varepsilon | A | E + E' | E.E' | E^∗ E::=εAE+EE.EE

    • ∅ \varnothing 表示空集,长度为零
    • ε \varepsilon ε表示空字母,也就是一个没有任何字母的输入,比如 A B ε A A AB\varepsilon AA AAA,长度为一
    • 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} AB等于正则语言 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 EiFi Σ \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\} Σω={aa,abaaaa,},只要是无限的字,都在这里面(不可能是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ω={w1w2w3i0,wiL}

    如果 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 G1G2

  • 举例: Σ = { 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 q0Q0
    • 对于所有 i ⩾ 0 i\geqslant 0 i0,都有 q i → A i + 1 q i + 1 q_i\xrightarrow {A_{i+1}}q_{i+1} qiAi+1 qi+1
    • 存在无限经常次出现的 q i ∈ F q_i \in F qiF
    • 一个NBA自动机可接收的语言为可接收语言对应的无限字的集合,即 A \mathcal{A} A可以被接收的语义为: L ω ( A ) = { σ ∈ Σ ω ∣ \mathcal{L}_\omega(\mathcal{A})=\{\sigma \in \Sigma^\omega| Lω(A)={σΣω存在可接收的语言 A , A \mathcal{A},\mathcal{A} AA σ \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)=AA=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 AA,那么不满足无限字的情况,如果接收 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)

通过 ω \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 Q0F=

    • 如果上述条件不满足,则要进行如下转移
      • 增加一个新的初始状态 q n e w ∉ F q_{new} \notin F qnew/F
      • 增加边:对于一些 q 0 ∈ Q 0 q_0 \in Q_0 q0Q0,当且仅当 q 0 → A q q_{0} \xrightarrow {A}q q0A q,则 q n e w → A q q_{new} \xrightarrow {A}q qnewA q
      • 其他的变迁不用变
    • 转移完成后,得到了一个新的NFA,初始状态无摄入转移,此时NFA满足上述条件了

    Q 0 ∩ F = ∅ Q_0 \cap F = \varnothing Q0F=表示初始状态和可接收状态是不能相交的
    基本原则:原来初始状态能到达的状态,新的状态也要能到达

    • 转移范例:
      下图的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 SnewA S2 S n e w → B S 3 S_{new} \xrightarrow {B} S_3 SnewB S3,再删除掉 S 1 S_1 S1的摄入边,此时的 NFA则满足上述条件: A \mathcal{A} A中的所有的初始状态都没有摄入转移,并且 Q 0 ∩ F = ∅ Q_0 \cap F = \varnothing Q0F=
      在这里插入图片描述
  • 构造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' qA q q ′ ∈ F q' \in F qF,则加上一条路径 q → A q 0 q \xrightarrow {A}q_0 qA q0,且对于任意的 q 0 ∈ Q 0 q_0 \in Q_0 q0Q0
    • 其他的变迁不用变
    • Q 0 ′ = Q 0 Q_0'=Q_0 Q0=Q0 F ′ = Q 0 F'=Q_0 F=Q0

    基本原则:原来能到达可接收状态的,也要能到达新的状态

  • 构建NBA范例:用接收 ( A ∗ B ) (A^∗B) (AB)的NFA构造一个接收 ( A ∗ B ) ω (A^∗B)^\omega (AB)ω的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 q0A q0,q0B q1,所以,需要以 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} qnewA q0,qnewB q1

    比较复杂的解释:

    • 这是一个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 qnewB q1 q n e w → A q 0 q_{new} \xrightarrow {A}q_0 qnewA q0
    • 根据“对于一些 q 0 ∈ Q 0 q_0 \in Q_0 q0Q0,当且仅当 q 0 → A q q_{0} \xrightarrow {A}q q0A q,则 q n e w → A q q_{new} \xrightarrow {A}q qnewA q”,将性质中的 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 qnewB q1,将性质中的 q 0 q_0 q0换成了 q q q得到 q n e w → A q 0 q_{new} \xrightarrow {A}q_0 qnewA q0
    • 此时 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 q0A q1,qnewB q1,所以,需要加两种情况将他们转换到 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} q0A qnew,qnewB qnew

    比较复杂的解释:

    • 先看 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' qA q q ′ ∈ F q' \in F qF,则加上一条路径 q → A q 0 q \xrightarrow {A}q_0 qA q0,且对于任意的 q 0 ∈ Q 0 q_0 \in Q_0 q0Q0”,把性质里的 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} qnewB qnew这条边
    • 我们再看 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 q0Q0,当且仅当 q 0 → A q q_{0} \xrightarrow {A}q q0A q,则 q n e w → A q q_{new} \xrightarrow {A}q qnewA q”,把性质里的 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} q0B qnew这条边

    在这里插入图片描述

  • 最后再把可接收状态转换为

    可接收状态从 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ω=(AB)ω的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=(Q1Q2,Σ,δ,Q0,1,F1F2)
  • δ ( 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 Q1Q2=
  • 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 QQ=的前提下, 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 Q0F=,则: Q 0 ′ ′ = Q 0 Q_0''=Q_0 Q0′′=Q0
      • 否则: Q 0 ′ ′ = Q 0 ∪ Q 0 ′ Q_0'' = Q_0 \cup Q_0' Q0′′=Q0Q0
    • F ′ ′ = F ′ F''=F' F′′=F
    • δ ′ ′ ( q , A ) \delta''(q,A) δ′′(q,A)的取值:
      • 如果 q ∈ Q q \in Q qQ δ ( 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 qQ δ ( 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' qQ,则 δ ′ ′ ( q , A ) ≠ δ ′ ( q , A ) \delta''(q,A)\neq \delta'(q,A) δ′′(q,A)=δ(q,A)
  • 两个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(k0)
    • 对于每一次 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 k0),即 F n ⊆ Q F_n\subseteq Q FnQ k ≥ n ≥ 0 k \geq n \geq 0 kn0
    • 可接收的字 σ = 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 q0Q0 q i → A i q i + 1 q_{i} \xrightarrow {A_i}q_{i+1} qiAi qi+1 0 ⩽ i 0 \leqslant i 0i

        q 0 q_0 q0是初始状态

      • F ∈ F : q i ∈ F F \in \mathcal{F}:q_i \in F FF:qiF q i q_i qi无限经常次出现
    • 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,1q0Q0}
    • 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,1qFF1}
    • δ ′ ( ⟨ 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,iqδ(q,A)q,i+1qδ(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,1q0,2q1,1q1,2q2,1q2,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 q1true q0
      • 因为 q 1 ∈ F i q_1 \in F_i q1Fi
      • 所以 δ ′ ( ⟨ 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:
      在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

print_Hyon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值