计算理论第四章——可判定性
一、 可判定性语言
与正则语言相关的可判定性
(1) A D F A A_{DFA} ADFA是一个可判定语言
A D F A = { < B , w > ∣ B 是 D F A 并且接受 w } A_{DFA}=\left\{<B,w>|B是DFA并且接受w\right\} ADFA={<B,w>∣B是DFA并且接受w}
识别 A D F A A_{DFA} ADFA的图灵机 M M M
M M M="对于输入 < B , w > <B,w> <B,w>,其中 B B B是 D F A DFA DFA, w w w是字符串:
-
在输入 w w w上运行 B B B
-
如果模拟以接收状态结束,则接受;如果模拟以非接收状态接受,则拒绝"
(2) A N F A A_{NFA} ANFA是一个可判定语言
A N F A = { < B , w > ∣ B 是 N F A 且接受 w } A_{NFA}=\left\{<B,w>|B是NFA且接受w\right\} ANFA={<B,w>∣B是NFA且接受w}
识别 A N F A A_{NFA} ANFA的图灵机S
S S S="对于输入 < B , w > <B,w> <B,w>, B B B是 N F A NFA NFA, w w w是串:
- 将 N F A NFA NFA B B B转化为 D F A DFA DFA C C C
- 在输入<C,w>上运行识别 A D F A A_{DFA} ADFA的图灵机M
- 如果 M M M接受,则接受;如果 M M M拒绝,则拒绝"
(3) A R E X A_{REX} AREX是一个可判定语言
A R E X = { < R , w > ∣ R 是正则表达式, w 是串, R 派生 w } A_{REX}=\left\{<R,w>|R是正则表达式,w是串,R派生w\right\} AREX={<R,w>∣R是正则表达式,w是串,R派生w}
识别 A R E X A_{REX} AREX的图灵机 P P P
P P P="对于输入 < R , w > <R,w> <R,w>, R R R是正则表达式, w w w是串
-
将 R R R转化为 N F A NFA NFA A A A
-
在输入 < A , w > <A,w> <A,w>上运行识别 A N F A A_{NFA} ANFA的图灵机M
-
如果 M M M接受,则接受;如果 M M M拒绝,则拒绝"
(4) E D F A E_{DFA} EDFA是一个可判定语言
E D F A = { < A > ∣ A 是一个 D F A 且 A 接受的语言为空 } E_{DFA}=\left\{<A>|A是一个DFA且A接受的语言为空\right\} EDFA={<A>∣A是一个DFA且A接受的语言为空}
识别 E D F A E_{DFA} EDFA的图灵机 T T T
T T T="对于输入 < A > <A> <A>,A是图灵机
-
标记A的初始状态
-
重复以下操作,直到没有状态可被标记
-
对于一个状态,如果有一个到达它的转移是来源于一个已被标记过的状态,那么标记这个状态
-
如果没有接受状态被标记,那么接受,否则拒绝“
(5) E Q D F A EQ_{DFA} EQDFA是一个可判定语言
E Q D F A = { < A , B > ∣ A , B 都是 D F A , 且 L ( A ) = L ( B ) } EQ_{DFA}=\left\{<A,B>|A,B都是DFA,且L(A)=L(B)\right\} EQDFA={<A,B>∣A,B都是DFA,且L(A)=L(B)}
识别 L ( A ) = L ( B ) L(A)=L(B) L(A)=L(B),相当于识别 L ( C ) = ( L ( A ) ∩ L ‾ ( B ) ) ∪ ( L ‾ ( A ) ∩ L ( B ) ) L(C)=(L(A)\cap \overline L(B)) \cup (\overline L(A) \cap L(B)) L(C)=(L(A)∩L(B))∪(L(A)∩L(B))为空
识别 E Q D F A EQ_{DFA} EQDFA的图灵机 F F F
F F F="对于输入 < A , B > <A,B> <A,B>,A和B都是DFA
-
根据描述构造DFA C
-
在输入 < C > <C> <C>上运行识别 E D F A E_{DFA} EDFA的图灵机 T T T
-
如果T接受,则接受;如果T拒绝,则拒绝"
与上下文无关语言相关的可判定性
(1) A C F G A_{CFG} ACFG是一个可判定语言
A C F G = { < G , w > ∣ G 为上下文关文法且能派生出 w } A_{CFG}=\left\{<G,w>|G为上下文关文法且能派生出w\right\} ACFG={<G,w>∣G为上下文关文法且能派生出w}
识别 A C F G A_{CFG} ACFG的图灵机 S S S
S S S="对于输入<G,w>,其中 G G G为上下文无关文法, w w w为串
-
将 G G G转化为一个与之等价的 C N F G 1 CNF \,G_1 CNFG1
-
列出所有 2 n − 1 2n-1 2n−1步派生的结果, n n n为 w w w的长度。若n = 0 , 列出所有一步之类的派生结果
-
如果在这些派生结果中有 w w w,则接受;否则,拒绝"
(2) E C F G E_{CFG} ECFG是一个可判定语言
E C F G E_{CFG} ECFG= { < G > ∣ G 为上下文无关语言且 L ( G ) = ∅ } \left\{<G>|G为上下文无关语言且L(G)=\varnothing \right\} {<G>∣G为上下文无关语言且L(G)=∅}
识别 E C F G 的图灵机为 R E_{CFG}的图灵机为R ECFG的图灵机为R
R R R="对于输入 < G > <G> <G>,其中G为上下文关文法
-
将 G G G中的终结符都做上标记
-
重复以下操作,直至没有变量可以标记
-
如果 G G G有规则 A → U 1 U 2 . . . U k A\rightarrow U_1U_2...U_k A→U1U2...Uk,且 U 1 , U 2 , . . . , U k U_1,U_2,...,U_k U1,U2,...,Uk中的每个符号都已经作过标记,则 A A A做标记
-
如果被标记的变量中不包含初始变量,那么接受;否则拒绝"
二、不可判定性
如果一个集合 A A A是有限的或者与 N N N具有相同的规模,则称 A A A是可数的。
存在不能被图灵机识别的语言
证明:
由所有图灵机组成的集合是可数的,每个图灵机有一个编码,编码都是 Σ \Sigma Σ上的字符串。先写下长度为1的字符串,在写下长度为2的字符串,……。将这个排列与0,1,2,……进行对应,这样就有一个从图灵机编码到 N N N的对应关系,则所有图灵机组成的集合是可数的。
由所有语言组成的集合是不可数的。
首先无限循环的二进制序列是不可数的,以 β \beta β记所有无限循环的二进制序列组成的集合。
设 ϝ \digamma ϝ为字母表 Σ \Sigma Σ上所有语言组成的集合。有 Σ ∗ = { s 1 , s 2 , ⋅ ⋅ ⋅ } \Sigma^{*}=\left\{s_1,s_2,···\right\} Σ∗={s1,s2,⋅⋅⋅},对于任一语言 A ∈ ϝ A\in \digamma A∈ϝ,在 β \beta β中都有唯一编码。如果 s i ∉ A s_i \notin A si∈/A,则编码的第 i i i位为零。所以 ϝ \digamma ϝ与 β \beta β存在一个一一对应的关系。所以所有语言组成的结合是不可数的。
既然图灵机是可数的,所有语言组成的集合是不可数的,那么就会存在不能被图灵机识别的语言。
A T M A_{TM} ATM是不可判定语言
A T M = { < M , w > ∣ M 是一个图灵机且接受 w } A_{TM}=\left\{<M,w>|M是一个图灵机且接受w\right\} ATM={<M,w>∣M是一个图灵机且接受w}
证明:
设H是
A
T
M
A_{TM}
ATM的判定器,即:
H
(
<
M
,
w
>
)
=
{
接受
如果
M
接受
w
拒绝
如果
M
拒绝
w
H(<M,w>)=\begin{cases} 接受 \quad 如果M接受w\\ 拒绝 \quad 如果M拒绝w \end{cases}
H(<M,w>)={接受如果M接受w拒绝如果M拒绝w
现在设计一个图灵机
D
D
D
D
(
<
M
>
)
=
{
接受
如果
M
接受
<
M
>
拒绝
如果
M
不接受
<
M
>
D(<M>) = \begin{cases} 接受 \quad 如果M接受<M>\\ 拒绝 \quad 如果M不接受<M> \end{cases}
D(<M>)={接受如果M接受<M>拒绝如果M不接受<M>
那么有
D
(
<
D
>
)
=
{
接受
如果
D
不接受
<
D
>
拒绝
如果
D
接受
<
D
>
D(<D>)=\begin{cases} 接受 \quad 如果D不接受<D>\\ 拒绝 \quad 如果D接受<D> \end{cases}
D(<D>)={接受如果D不接受<D>拒绝如果D接受<D>
存在矛盾。所以
A
T
M
A_{TM}
ATM是不可判别的
- 一个语言是图灵可判别的的,当且仅当它是图灵可识别的和图灵补可识别的
- A T M ‾ \overline {A_{TM}} ATM是不可识别的