本文原载于我的博客,地址:https://blog.guoziyang.top/archives/21/
自动机理论:图灵机、有限状态机、文法,下推自动机
形式语言:经数学定义的语言
课程内容:
字母表:符号(或字符)的非空有穷集。
字符串:由某字母表中符号组成的有穷序列。
空串:记为 ϵ \epsilon ϵ,有0个字符的串。
字母表可以是任意的,但是都有 ϵ ∉ Σ \epsilon\not\in\Sigma ϵ∈Σ。
字符串的长度:字符串中符号所占位置的个数,递归定义为
KaTeX parse error: No such environment: equation at position 8: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲|\omega|=\begin…
字符串的连接:将首尾相接得到新字符串的运算,记为 x ⋅ y x\cdot y x⋅y或者xy。
字符串的幂:字符串x的n次幂(n$\ge$0),递归定义为
KaTeX parse error: No such environment: equation at position 8: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲x^n=\begin{case…
字符串集合的连接:得到字符串集合,将两个集合中的串两两连接。
集合的幂: A n = A n − 1 A A^n=A^{n-1}A An=An−1A
克林闭包:
Σ ∗ = ∪ i = 0 ∞ Σ i \Sigma^*=\cup_{i=0}^{\infty}\Sigma^i Σ∗=∪i=0∞Σi
正闭包:
Σ + = ∪ i = 1 ∞ Σ i \Sigma^+=\cup_{i=1}^{\infty}\Sigma^i Σ+=∪i=1∞Σi
与克林闭包相差一个 ϵ \epsilon ϵ
语言:若 Σ \Sigma Σ为字母表且 ∀ L ⊂ Σ ∗ \forall L\subset\Sigma^* ∀L⊂Σ∗,则L称为字母表 Σ \Sigma Σ上的语言。
∅ , { ϵ } , Σ ∗ \emptyset,\{\epsilon\},\Sigma^* ∅,{ϵ},Σ∗分别都是任意字母表 Σ \Sigma Σ上的语言。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CCx5SaZ9-1591105349225)(https://i.loli.net/2019/06/13/5d01bbc9d91a237478.png)]
确定的有穷自动机(DFA):描述为A,A为一个五元组
A = ( Q , Σ , δ , q 0 , F ) A=(Q,\Sigma,\delta,q_0,F) A=(Q,Σ,δ,q0,F)
一种描述:状态转移表:
扩展转移函数 δ ^ \hat{\delta} δ^: Q × Σ ∗ → Q Q\times\Sigma^*\rightarrow Q Q×Σ∗→Q:
KaTeX parse error: No such environment: equation at position 8: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲\hat{\delta}(q,…
举例:(有误)
DFA的语言与正则语言:
若 D = (Q, Σ, δ, q0, F) 是一个DFA, 则 D 接受的语言为
L ( D ) = { ω ∈ Σ ∗ ∣ δ ^ ( q 0 , ω ) ∈ F } L(D)=\{\omega\in\Sigma^*|\hat{\delta}(q_0,\omega)\in F\} L(D)={ω∈Σ∗∣δ^(q0,ω)∈F}
如果语言 L 是某个 DFA D 的语言, 即 L = L(D), 则称 L 是正则语言。
形式定义 :
非确定有穷自动机(NFA):
A = ( Q , Σ , δ , q 0 , F ) A=(Q,\Sigma,\delta,q_0,F) A=(Q,Σ,δ,q0,F)
扩展转移函数 δ ^ \hat{\delta} δ^: Q × Σ ∗ → 2 Q Q\times\Sigma^*\rightarrow 2^Q Q×Σ∗→2Q:
KaTeX parse error: No such environment: equation at position 8: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲\hat{\delta(q, …
举例:
DFA与NFA的等价性:
如果语言L被NFA接受,当且仅当L被DFA接受。
子集构造法(构造与NFA等价的DFA):如果 NFA N= ( Q N , Σ , δ N , q 0 , F N ) (Q_N, \Sigma, \delta_N, q_0, F_N) (QN,Σ,δN,q0,FN)构造 DFA D= ( Q D , Σ , δ D , { q 0 } , F D ) (Q_D,\Sigma,\delta_D,\{q_0\}, F_D) (QD,Σ,δD,{q0},FD)
则有L(D)=L(N)
举例:
允许状态因空串 ϵ \epsilon ϵ而转移, 即不消耗输入字符就发生状态的改变。
带空转移非确定有穷自动机( ϵ \epsilon ϵ-NFA):
A = ( Q , Σ , δ , q 0 , F ) A=(Q,\Sigma,\delta,q_0,F) A=(Q,Σ,δ,q0,F)
状态的 ϵ \epsilon ϵ-闭包:记为 E C L O S E ( q ) E_{CLOSE}(q) ECLOSE(q),表示从q经过 ϵ \epsilon ϵ序列
可达的全部状态集合。
状态集S的 ϵ − \epsilon- ϵ−闭包: E C L O S E ( S ) = ∪ q ∈ S E C L O S E ( q ) E_{CLOSE}(S)=\cup_{q\in S}E_{CLOSE}(q) ECLOSE(S)=∪q∈SECLOSE(q)。
扩展转移函数 δ ^ \hat{\delta} δ^: Q × Σ ∗ → 2 Q Q\times\Sigma^*\rightarrow 2^Q Q×Σ∗→2Q:
KaTeX parse error: No such environment: equation at position 8: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲\hat{\delta}(q,…
举例:
ϵ \epsilon ϵ-NFA的语言:若E=( Q , Σ , δ , q 0 , F Q,\Sigma,\delta, q_0,F Q,Σ,δ,q0,F)是一个 ϵ − N F A \epsilon-NFA ϵ−NFA,则E接受的语言为
L ( F ) = { ω ∈ Σ ∗ ∣ δ ^ ( q 0 , ω ) ∩ F ≠ ∅ } L(F)=\{\omega\in\Sigma^*|\hat{\delta}(q_0,\omega)\cap F\not=\emptyset\} L(F)={ω∈Σ∗∣δ^(q0,ω)∩F=∅}
消除空转移的子集构造法:
如果 ϵ − N F A E = ( Q E , Σ , δ E , q E , F E ) \epsilon-NFA E=(Q_E,\Sigma,\delta_E,q_E,F_E) ϵ−NFAE=(QE,Σ,δE,qE,FE),构造DFA:
D = ( Q D , Σ , δ D , q D , F D ) D=(Q_D,\Sigma,\delta_D,q_D,F_D) D=(QD,Σ,δD,qD,FD)
那么有 L ( D ) = L ( E ) L(D)=L(E) L(D)=L(E)。
举例:
定理:如果语言L被 ϵ − N F A \epsilon-NFA ϵ−NFA接受,当且仅当L被DFA接受。
有穷自动机通过机器装置描述正则语言
通过表达式描述正则语言
语言的运算:
注意:语言的幂将字符添加在已有字符串的后面。
四则运算表达式的递归定义:
正则表达式的递归定义:
如果 Σ \Sigma Σ为字母表,则 Σ \Sigma Σ上的正则表达式递归定义为:
r + s , r s , r ∗ , ( r ) r+s,rs,r^*,(r) r+s,rs,r∗,(r)
都是正则表达式,分别表示语言 R ∪ S , R ⋅ S , R ∗ , R R\cup S,R\cdot S,R^*,R R∪S,R⋅S,R∗,R。
运算符优先级:
括号,星,连接( r s , r ⋅ s rs,r\cdot s rs,r⋅s),加( r + s , r ∪ s r+s,r\cup s r+s,r∪s)
**定理:**若L=L(A)是某DFA A的语言,那么存在正则表达式R满足L=L®。
将DFA转化为正则表达式(递归表达式法):
正则表达式 R i j ( k ) R_{ij}^{(k)} Rij(k)表示从i到j但中间节点不超过k全部路径的字符串集
举例:
注意:自己到自己包括 ϵ \epsilon ϵ
化简规则:
继续上面的例子:
DFA 到正则表达式(状态消除法):
从DFA中逐个删除状态,保证"自动机"的等价。
注意:在使用状态消除法时,需要利用空转移添加开始状态s和结束状态f。
从正则表达式到有穷自动机:
正则表达式定义的语言,都可以被有穷自动机识别。
构造规则:
正则语言的泵引理:
如果语言 L 是正则的,那么存在正整数N,它只依赖于L,对 ∀ ω ∈ L \forall\omega\in L ∀ω∈L,只要 ∣ ω ∣ ≥ N |\omega|\ge N ∣ω∣≥N,就可以将 ω \omega ω分为三部分 ω = x y z \omega=xyz ω=xyz满足:
举例:
若一个语言的一部分已经被证明不是正则的,则这个语言不是正则的。
注意:泵引理只是必要条件,只能用于证伪。
正则语言在经过以下运算后得到的仍然为正则语言,称为在这些运算下封闭
求补运算:将所有的接受和非接受状态反转(注意这种方法需要完整的DFA)
可通过证明一个语言的补非正则,而证明该语言非正则
定理:具有n个状态的有穷自动机M接受的集合S:
所以,对于正则语言:
定理:存在算法判定两个有穷自动机是否等价(接受语言相同)
**定义:**DFA A=( Q , Σ , δ , q 0 , F Q,\Sigma,\delta,q_0,F Q,Σ,δ,q0,F)中的两个状态p和q,对 ∀ ω ∈ Σ ∗ \forall\omega\in\Sigma^* ∀ω∈Σ∗:
δ ^ ( p , ω ) ∈ F ⟷ δ ^ ( q , ω ) ∈ F \hat{\delta}(p,\omega)\in F\longleftrightarrow\hat{\delta}(q,\omega)\in F δ^(p,ω)∈F⟷δ^(q,ω)∈F
则称这两个状态是等价的,否则称为可区分的。
填表算法:如果填表算法不能区分两个状态,则这两个状态等价。
举例:
最小化:根据等价状态,将状态集划分为块,合并等价状态即可
如果字符串 ω ∈ Σ ∗ \omega\in\Sigma^* ω∈Σ∗满足 ω = ω R \omega=\omega^R ω=ωR,则称字符串 ω \omega ω为回文。如果语言L中的字符串都是回文,则称L为回文语言。
回文的递归表示:以 L p a l = { ω ∈ { 0 , 1 } ∗ ∣ ω = ω R } L_{pal}=\{\omega\in\{0,1\}^*|\omega=\omega^R\} Lpal={ω∈{0,1}∗∣ω=ωR}为例
嵌套定义:
A → ϵ A → 0 A → 1 A → 0 A 0 A → 1 A 1 A\rightarrow\epsilon\\A\rightarrow 0\\A\rightarrow 1\\A\rightarrow 0A0\\A\rightarrow 1A1 A→ϵA→0A→1A→0A0A→1A1
上下文无关文法(CFG): G = ( V , T , P , S ) G=(V,T,P,S) G=(V,T,P,S)
V:变元的有穷集,变元也称为非终结符或语法范畴
T:终结符的有穷集, 且 V ∩ \cap ∩T = ∅
P:产生式的有穷集, 每个产生式包括:
S ∈ V S\in V S∈V:初始符号,文法开始的地方
字符使用的一般规定:
从字符串到文法变元的过程,称为归约,逆过程称为派生。
举例:
派生和归约的形式定义:若CFG G=(V, T, P, S),设 α , β , γ ∈ ( V ∪ T ) ∗ \alpha,\beta,\gamma\in(V\cup T)^* α,β,γ∈(V∪T)∗, A ∈ V A\in V A∈V, A → γ ∈ P A\rightarrow\gamma\in P A→γ∈P,那么称G中由 α A β \alpha A\beta αAβ可派生出 α γ β \alpha\gamma\beta αγβ,记为
相应的,称 α γ β \alpha\gamma\beta αγβ可归约为 α A β \alpha A\beta αAβ。
举例:
最左派生:为限制派生的随意性, 要求只替换符号串中最左边变元的派生过程,称为最左派生。只替换最右的, 称为最右派生。
任何派生都有等价的最左派生和最右派生。
文法的语言:CFG G=(V, T, P, S)的语言定义为
那么符号串 ω \omega ω在L(G)中,要满足:
上下文无关语言定义:语言L是由某个CFG G 定义的语言,即 L = L(G),则称 L 为上下文无关语言。
如果有两个文法 CFG G 1 G_1 G1和CFG G 2 G_2 G2,满足 L ( G 1 ) = L ( G 2 ) L(G_1)=L(G_2) L(G1)=L(G2),则称 G 1 G_1 G1和 G 2 G_2 G2是等价的。
**句型:**若 CFG G = (V, T, P, S),初始符号 S 派生出来的符号串,称为 G 的句型, 即
所有的正则语言都是上下文无关语言。
派生或者归约的过程可以表示成树形结构
定义:CFG G = (V, T, P, S) 的语法分析树(语法树或派生树) 为
**定义:**语法树的全部叶结点从左到右连接起来,称为该树的产物或者结果
如果树根节点是初始符号 S,叶节点是终结符或 ε,那么该树的产物属于 L(G)。
语法树中标记为 A 的内节点及其全部子孙节点构成的子树,称为 A 子树。
语法分析树和派生的等价性:
语法树唯一确定最左 (右) 派生:
每棵语法分析树都有唯一的最左 (右) 派生,给定 CFG G = (V, T, P, S), A ∈ \in ∈V , 以下命题等价
如果 CFG G 使某些符号串有两棵不同的语法分析树, 称文法 G 是歧义的。
例如:
可重新设计文法来消除歧义性
语言的固有歧义性:定义同样的语言可以有多个文法,如果 CFL L 的所有文法都是歧义的,那么称语言 L 是固有歧义的。
判断给定的语言是否歧义是一个不可判定的问题
前提:不改变语言
步骤:
无用符号:CFG G = (V, T, P, S), 符号 X ∈ ( V ∪ T ) X\in(V\cup T) X∈(V∪T)
消除无用符号:首先消除全部非产生的符号,再消除全部非可达的符号
产生的符号集:每个T中的符号(终结符)都是产生的, A → α ∈ P A\rightarrow\alpha\in P A→α∈P且 α \alpha α中符号都是产生的, 则A是产生的。(从终结符向前寻找)
可达的符号集:符号 S 是可达的, A → α ∈ P A\rightarrow\alpha\in P A→α∈P且A是可达的,则 α \alpha α中符号都是可达的。(从起始符向后寻找)
举例:消除如下文法的无用符号: S → A B ∣ α , A → b S\rightarrow AB|\alpha,A\rightarrow b S→AB∣α,A→b:
先 消 除 非 产 生 的 : S → α A → b 再 消 除 非 可 达 的 : S → a 先消除非产生的:\\S\rightarrow\alpha\\A\rightarrow b\\再消除非可达的:\\S\rightarrow a 先消除非产生的:S→αA→b再消除非可达的:S→a
消除 ϵ − \epsilon- ϵ−产生式:
文法中形如$A\rightarrow\epsilon 的 产 生 式 称 为 的产生式称为 的产生式称为\epsilon$-产生式
确定空可变元:
替换产生式:
消除单元产生式:
消除单元产生式:
定理:每个不带 ϵ \epsilon ϵ的 CFL 都可由一个不带无用符号, ϵ \epsilon ϵ-产生式和单元产生式的文法定义。
乔姆斯基范式CNF:每个不带 ϵ \epsilon ϵ的CFL都可由这样的CFG G定义,G中每个产生式都形为
A → B C 或 A → a A\rightarrow BC或A\rightarrow a A→BC或A→a
其中A、B和C都是变元,a是终结符
CFG转为CNF的方法:
A → B 1 D 1 D 1 → B 2 D 2 . . . D m − 2 → B m − 1 B m A\rightarrow B_1D_1\\D_1\rightarrow B_2D_2\\...\\D_{m-2}\rightarrow B_{m-1}B_m A→B1D1D1→B2D2...Dm−2→Bm−1Bm
格雷巴赫范式:
每个不带 ϵ \epsilon ϵ的CFL都可由这样的CFG G定义,G中每个产生式都形为 A → a α A\rightarrow a\alpha A→aα
其中A是变元,a是终结符, α \alpha α是零或多个变元的串
直接左递归:文法中形式为$ A\rightarrow Aα $的产生式, 称为直接左递归
消除直接左递归:
若 A 产生式 A → A α 1 ∣ A α 2 ∣ … ∣ A α n ∣ β 1 ∣ β 2 ∣ … ∣ β m A\rightarrow A\alpha_1|A\alpha_2|…|A\alpha_n|\beta_1|\beta_2|…|\beta_m A→Aα1∣Aα2∣…∣Aαn∣β1∣β2∣…∣βm
引入新变元B,并用如下产生式替换
A → β 1 ∣ β 2 ∣ . . . ∣ β m ∣ β 1 B ∣ β 2 B ∣ . . . ∣ β m B B → α 1 ∣ α 2 ∣ . . . ∣ α n ∣ α 1 B ∣ α 2 B ∣ . . . ∣ α n B A\rightarrow \beta_1|\beta_2|...|\beta_m|\beta_1B|\beta_2B|...|\beta_mB\\B\rightarrow \alpha_1|\alpha_2|...|\alpha_n|\alpha_1B|\alpha_2B|...|\alpha_nB A→β1∣β2∣...∣βm∣β1B∣β2B∣...∣βmBB→α1∣α2∣...∣αn∣α1B∣α2B∣...∣αnB
间接左递归:文法中如果有形式为
A → B α ∣ . . . B → A β ∣ . . . A\rightarrow B\alpha|...\\B\rightarrow A\beta|... A→Bα∣...B→Aβ∣...
的产生式, 称为间接左递归。
消除间接左递归:
将文法中变元重命名为 A 1 , A 2 , ⋅ ⋅ ⋅ , A n A_1, A_2, · · · , A_n A1,A2,⋅⋅⋅,An
通过代入, 使产生式都形如
A i → A j α A i → a α A_i\rightarrow A_j\alpha\\A_i\rightarrow a\alpha Ai→AjαAi→aα
但要求 i ≤ j i\le j i≤j
消除直接左递归 A i → A i β A_i\rightarrow A_i\beta Ai→Aiβ, 再代入其他产生式
举例:将以下文法转化为GNF:
S → A B A → B S ∣ b B → S A ∣ a S\rightarrow AB\\A\rightarrow BS|b\\B\rightarrow SA|a S→ABA→BS∣bB→SA∣a
形式定义:PDA,P为七元组
P = ( Q , Σ , Γ , δ , q 0 , Z 0 , F ) P=(Q,\Sigma,\Gamma,\delta,q_0,Z_0,F) P=(Q,Σ,Γ,δ,q0,Z0,F)
本质上是带有栈的 ϵ − \epsilon- ϵ−NFA
举例:
瞬时描述:为描述 PDA 瞬间的格局, 定义 Q × Σ ∗ × Γ ∗ Q\times\Sigma^*\times\Gamma^* Q×Σ∗×Γ∗中三元组
( q , ω , γ ) (q,\omega,\gamma) (q,ω,γ)
为瞬时描述(ID),表示此时PDA处于状态q,剩余输入串 ω \omega ω,栈为 γ \gamma γ
转移符号:
对 PDA P 的一个合法 ID 序列 (计算):
PDA P = ( Q , Σ , Γ , δ , q 0 , Z 0 , F ) P=(Q,\Sigma,\Gamma,\delta,q_0,Z_0,F) P=(Q,Σ,Γ,δ,q0,Z0,F)以两种方式接受语言
如:
此种方式无栈底符号
从终态方式到空栈方式:如果PDA $P_F $以终态方式接受语言L,则存在PDA $P_N $以空栈方式接受L
从空栈方式到终态方式:如果PDA $P_N $以空栈方式接受语言L,则存在PDA $P_F $以终态方式接受L
PDA到CFG:
构造与文法等价的 PDA:
如果CFG G = (V, T, P′, S),构造PDA
P = ( { q } , T , V ∪ T , δ , q , S , ∅ ) P=(\{q\},T,V\cup T,\delta,q,S,\emptyset) P=({q},T,V∪T,δ,q,S,∅)
其中, δ \delta δ为
∀ A ∈ V \forall A\in V ∀A∈V:
δ ( q , ϵ , A ) = { ( q , β ) ∣ A → β ∈ P ′ } \delta(q,\epsilon,A)=\{(q,\beta)|A\rightarrow\beta\in P'\} δ(q,ϵ,A)={(q,β)∣A→β∈P′}
∀ a ∈ T \forall a\in T ∀a∈T:
δ ( q , a , a ) = { ( q , ϵ ) } \delta(q,a,a)=\{(q,\epsilon)\} δ(q,a,a)={(q,ϵ)}
那么L(G)=N(G)
举例:
构造与 GNF 格式文法等价的 PDA:
如果 GNF 格式的 CFG G = (V, T, P′, S), 那么构造 PDA
P = ( { q } , T , V , δ , q , S , ∅ ) P=(\{q\}, T, V, \delta, q, S, \emptyset) P=({q},T,V,δ,q,S,∅)
为每个产生式, 定义 δ \delta δ为:
δ ( q , a , A ) = { ( q , β ) ∣ A → a β ∈ P ′ } \delta(q,a,A)=\{(q,\beta)|A\rightarrow a\beta\in P'\} δ(q,a,A)={(q,β)∣A→aβ∈P′}
举例:
由 PDA 到 CFG:
如果 PDA P , 有 L = N§, 那么 L 是上下文无关语言。
构造与 PDA 等价的 CFG:
如果 PDA P=( Q , Σ , Γ , δ , q 0 , Z 0 , F Q, \Sigma, \Gamma, \delta, q_0, Z_0, F Q,Σ,Γ,δ,q0,Z0,F) 满足
则称P为确定性下推自动机(DPDA)
DPDA P以终态方式接受的语言L§称为DCFL
DPDA与PDA不等价
正则语言与 DPDA:
定理:如果 L 是正则语言, 那么存在 DPDA P 以终态方式接受 L, 即 L = L§
定义:如果语言 L 中不存在两个不同的字符串 x 和 y,使 x 是 y 的前缀,称语言 L 满足前缀性质
定理:如果有DPDA P且L=N§,当且仅当L有前缀性质且存在DPDA P′使
L=L(P′)
DPDA 与无歧义文法
定理:DPDA P,语言 L = N§,那么 L 有无歧义的 CFG
定理:DPDA P,语言 L = L§,那么 L 有无歧义的 CFG
任何 Σ \Sigma Σ上的所有语言是不可数的
任何 Σ \Sigma Σ上的所有CFL是可数的
语法分析树的大小:
对于乔姆斯基范式文法 G = (V, T, P, S) 的语法树,如果产物为终结符串 ω \omega ω,且树中最长路径的长度是n,那么 ∣ ω ∣ ≤ 2 n − 1 |\omega|\le 2^{n-1} ∣ω∣≤2n−1
上下文无关语言的泵引理:
如果语言L时CFL,那么存在正整数N,它只依赖于L,对 ∀ z ∈ L \forall z\in L ∀z∈L,只要 ∣ z ∣ ≥ N |z|\ge N ∣z∣≥N,就可以将z分成五部分 z = u v w x y z=uvwxy z=uvwxy,满足
举例:证明L= { 0 n 1 n 2 n ∣ n ≥ 1 } \{0^n1^n2^n|n\ge 1\} {0n1n2n∣n≥1}不是上下文无关语言
举例:证明 L = { w w ∣ w ∈ { 0 , 1 } ∗ } L=\{ww|w\in\{0,1\}^*\} L={ww∣w∈{0,1}∗}不是上下文无关的
代换:两个字母表 Σ 到 Γ 的函数$ s : \Sigma\rightarrow 2^{\Gamma∗} 称 为 代 换 , 称为代换, 称为代换,\Sigma 中 的 一 个 字 符 a 在 s 的 作 用 下 为 中的一个字符a在s的作用下为 中的一个字符a在s的作用下为\Gamma 上 的 一 个 语 言 L a , 即 上的一个语言 La,即 上的一个语言La,即s(a)=L_a , 扩 展 s 的 定 义 到 字 符 串 , ,扩展s的定义到字符串, ,扩展s的定义到字符串,s(\epsilon)={\epsilon},s(xa)=s(x)s(a) , 再 扩 展 s 到 语 言 , 对 ,再扩展s到语言,对 ,再扩展s到语言,对\forall L\subset\Sigma^* , , ,s(L)=\cup_{x\in L}s(x)$
上下文无关语言在并、连接、闭包、正闭包、同态、反转、代换、逆同态下封闭。
CFL 对交/补运算不封闭
若 L 是 CFL 且 R 是正则语言, 则 L ∩ \cap ∩R 是 CFL
应用举例:
可判定的 CFL 问题:
CYK算法:
CNF G=(V, T, P, S),以O( n 3 n^3 n3)时间检查" w = a 1 a 2 … a n ∈ L ( G ) w=a_1a_2…a_n\in L(G) w=a1a2…an∈L(G)?"
以动态规划的方式,在表中由下至上逐行计算 X i j X_{ij} Xij,再检查" S ∈ X 1 n S\in X_{1n} S∈X1n?"
计算首行 X i i = { A ∣ A → a i ∈ P } X_{ii}=\{A|A\rightarrow a_i\in P\} Xii={A∣A→ai∈P}
计算其他 X i j = { A ∣ i ≤ k < j , B C ∈ X i k X k + 1 , j , A → B C ∈ P } X_{ij}=\{A|i\le k
举例:CNF G 如下, 用 CYK 算法判断 bbabaa ∈ \in ∈L(G)?
S → A B ∣ B C A → B A ∣ a B → C C ∣ b C → A B ∣ a S\rightarrow AB|BC\\A\rightarrow BA|a\\B\rightarrow CC|b\\C\rightarrow AB|a S→AB∣BCA→BA∣aB→CC∣bC→AB∣a
如果文法 G = (V, T, P, S),符号串 α ∈ ( V ∪ T ) ∗ V ( V ∪ T ) ∗ , β ∈ ( V ∈ T ) ∗ \alpha\in (V\cup T)^∗V (V\cup T)^∗,\beta\in (V\in T)^∗ α∈(V∪T)∗V(V∪T)∗,β∈(V∈T)∗,产生式都形如 α → β \alpha\rightarrow\beta α→β,即每个产生式的左部 α \alpha α中至少要有一个变元,那么
图灵机M为七元组 M = ( Q , Σ , Γ , δ , q 0 , B , F ) M=(Q,\Sigma,\Gamma,\delta,q_0,B,F) M=(Q,Σ,Γ,δ,q0,B,F)
图灵机的动作及状态转移图:
有穷控制器处于状态 q,带头所在单元格为符号 X,如果动作的定义为 δ ( q , X ) = ( p , Y , L ) \delta(q,X)=(p,Y,L) δ(q,X)=(p,Y,L),表示状态转移到了p,单元格改为Y,然后将带头向左移动一个单元格
举例:
瞬时描述:
图灵机虽有无穷长的带, 但非空内容总是有限的. 因此用带上全部的非空符号、当前状态和带头位置, 同时定义瞬时描述(ID)为:
X 1 X 2 . . . X i − 1 q X i X i + 1 . . . X n X_1X_2...X_{i-1}qX_iX_{i+1}...X_n X1X2...Xi−1qXiXi+1...Xn
转移符号:
如:
图灵机的语言:
如果 M = ( Q , Σ , Γ , δ , q 0 , B , F ) M=(Q,\Sigma,\Gamma,\delta,q_0,B,F) M=(Q,Σ,Γ,δ,q0,B,F)是一个图灵机, 则 M 接受的语言为
L ( M ) = { ω ∣ ω ∈ Σ ∗ , q 0 ω ⊢ ∗ α p β , p ∈ F , α , β ∈ Γ ∗ } L(M)=\{\omega|\omega\in\Sigma^*,q_0\omega\vdash^*\alpha p\beta,p\in F,\alpha,\beta\in\Gamma^*\} L(M)={ω∣ω∈Σ∗,q0ω⊢∗αpβ,p∈F,α,β∈Γ∗}
如果 L 是图灵机 M 的语言, 即 L = L(M), 则称 L 是递归可枚举语言
对接受和不接受的输入, 都保证停机的图灵机, 所接受的语言称为递归语言
如果$ f(i_1, i_2, . . . , i_k) 对 所 有 对所有 对所有i_1, i_2, . . . , i_k 都 有 定 义 , 称 都有定义, 称 都有定义,称 f 为 全 递 归 函 数 , 被 图 灵 机 计 算 的 函 数 为全递归函数,被图灵机计算的函数 为全递归函数,被图灵机计算的函数 f(i_1, i_2, . . . , i_k) $称作部分递归函数