个人用计算理论导引笔记(待补充)
文章目录
- 一、正则语言
- 预备知识
- 确定性有穷自动机(DFA)
- 设计DFA
- 正则运算
- 非确定性有穷自动机(NFA,含有 ε \varepsilon ε,下一个状态可以有若干种选择(包括0种))
- 正则表达式
- 定义
- 计算优先级
- 定理
- GNFA(广义非确定自动机,NFA的推广)
- CONVERT(G)(过程函数)
- 转化方法
- 泵引理(一个正则语言一定存在泵长度)
- 二、上下文无关文法(CFG)
- CFG生成
- 合并
- 正则语言生成
- 语法分析树
- 文法歧义性
- 乔姆斯基范式(CNF)
- 生成CNF
- 下推自动机(PDA,通常指的是非确定性下推自动机)
- 上下文无关语言CFL
- CFL的泵引理(一个CFL必定有泵)
- 三、图灵机
- 单带图灵机(TM)
- 图灵机的等价变形
- 多带图灵机(同时多个纸带)
- 非确定性图灵机(NTM)
- 图灵机算法
- 递归定理
- 图灵机接受性问题
- 图灵机极小性问题
- 不动点(x=f(x))
- 四、可计算问题/不可计算问题
- 对于正则语言的可判定问题
- 关于上下文无关语言(CFL)的可判定问题
- 不可计算问题
- 用对角化方法证明不可计算问题
- 非图灵可识别语言
- 归约法
一、正则语言
预备知识
字母表:任意非空有穷集合
字符串:用字母表中的字母组成的序列,比如
Σ
=
{
0
,
1
}
,
x
=
01001
\Sigma=\{0,1\},x=01001
Σ={0,1},x=01001
连接:首尾连接,如
x
=
01001
,
w
=
a
b
c
d
e
,
x
w
=
01001
a
b
c
d
e
x=01001,w=abcde,xw=01001abcde
x=01001,w=abcde,xw=01001abcde
(特别地,
x
.
.
.
x
=
x
n
x...x=x^n
x...x=xn,表示n个x首尾连接)
串长度:
x
=
01001
,
∣
x
∣
=
5
x=01001,|x|=5
x=01001,∣x∣=5
空串:
ε
,
∣
ε
∣
=
0
,
x
0
=
ε
\varepsilon,|\varepsilon|=0,x^0=\varepsilon
ε,∣ε∣=0,x0=ε。
(空串
≠
\neq
=空格!)
子串&子序列:略
串的标准序:并非字典序!而是先比较长度,再逐位比较大小!
语言:由字符串组成的集合,令字母表为
Σ
\Sigma
Σ(里面的串要根据标准序排列)
Σ
∗
\Sigma^*
Σ∗:
Σ
\Sigma
Σ上有穷长度的串(包括
ε
\varepsilon
ε)
Σ
+
\Sigma^+
Σ+:
Σ
\Sigma
Σ上正有穷长度的串(不包括
ε
\varepsilon
ε)
Σ
’
\Sigma^’
Σ’:
Σ
\Sigma
Σ上无穷长度的串
Φ
\varPhi
Φ:空语言
(与空串语言
{
ε
}
\{\varepsilon\}
{ε}不同!空串语言
{
ε
}
\{\varepsilon\}
{ε}也与空串
ε
\varepsilon
ε不同!)
语言连接:类似于笛卡尔积,两两搭配。
A
B
=
{
x
y
∣
x
∈
a
,
y
∈
b
}
AB=\{xy|x\in a,y\in b\}
AB={xy∣x∈a,y∈b}
(特殊地,
{
ε
}
A
=
A
{
ε
}
=
A
\{\varepsilon\}A=A\{\varepsilon\}=A
{ε}A=A{ε}=A,
Φ
A
=
A
Φ
=
Φ
\varPhi A=A\varPhi =\varPhi
ΦA=AΦ=Φ)
确定性有穷自动机(DFA)
M
=
(
Q
,
Σ
,
δ
,
q
0
,
F
)
M=(Q,\Sigma,\delta,q_0,F)
M=(Q,Σ,δ,q0,F)
Q
Q
Q:有穷状态集
Σ
\Sigma
Σ:输入字母表
δ
:
Q
×
Σ
→
Q
\delta:Q \times \Sigma \rightarrow Q
δ:Q×Σ→Q(转移函数,也就是映射关系)
(特殊地,
Q
×
Σ
∗
→
Q
Q \times \Sigma^* \rightarrow Q
Q×Σ∗→Q(多了个空串)为扩展转移函数)
q
0
q_0
q0:初始状态
F
F
F:接受状态/终止状态
语言:能够被自动机接受的串集合,
L
(
M
)
=
{
w
∈
Σ
∗
∣
δ
(
q
0
,
w
)
∈
F
}
L(M)=\{w\in \Sigma^*|\delta(q_0,w)\in F\}
L(M)={w∈Σ∗∣δ(q0,w)∈F}
正则语言:可以被有穷自动机接受的语言/可以用正则表达式描述的语言
设计DFA
- 确定状态集
- 确定转移函数
- 标注初始状态&终结状态
正则运算
正则语言对正则计算封闭!
正则语言的**交并补、差、对称差、连接、*(星号)**封闭!
A
∪
B
=
{
x
∣
x
∈
A
或
x
∈
B
}
A\cup B=\{x|x\in A或x\in B\}
A∪B={x∣x∈A或x∈B}
A
B
=
{
x
y
∣
x
∈
A
且
y
∈
B
}
AB=\{xy|x\in A且y\in B\}
AB={xy∣x∈A且y∈B}
A
∗
=
A
0
∪
A
1
∪
A
2
∪
.
.
.
A^*=A^0\cup A^1\cup A^2\cup...
A∗=A0∪A1∪A2∪...(见前,包括
ε
\varepsilon
ε)
非确定性有穷自动机(NFA,含有 ε \varepsilon ε,下一个状态可以有若干种选择(包括0种))
筹码集:字符集中只有
ε
\varepsilon
ε与一种字符的语言
M
=
(
Q
,
Σ
ε
,
δ
,
q
0
,
F
)
M=(Q,\Sigma_{\varepsilon},\delta,q_0,F)
M=(Q,Σε,δ,q0,F)
Q
Q
Q:有穷状态集
Σ
\Sigma
Σ:输入字母表(
Σ
ε
=
Σ
∪
{
ε
}
\Sigma_{\varepsilon}=\Sigma\cup\{\varepsilon\}
Σε=Σ∪{ε})
δ
:
Q
×
Σ
ε
→
P
(
Q
)
\delta:Q \times \Sigma_{\varepsilon} \rightarrow P(Q)
δ:Q×Σε→P(Q)(转移函数)
q
0
q_0
q0:初始状态
F
F
F:接受状态/终止状态
任何一个NFA都有等价的DFA!
一个语言是正则语言,当且仅当只有一个NFA可以识别!
(具体转换见其他)
正则表达式
定义
对于 R R R,有
- a a a表示语言 { a } \{a\} {a},其中 a ∈ Σ a\in\Sigma a∈Σ(包括 ε \varepsilon ε)
- Φ \varPhi Φ表示空语言
- R = ( R 1 ∪ R 2 ) R=(R_1\cup R_2) R=(R1∪R2)是正则表达式
- R = ( R 1 ∘ R 2 ) R=(R_1\circ R_2) R=(R1∘R2)是正则表达式
- R = ( R 1 ∗ ) R=(R_1^*) R=(R1∗)是正则表达式
则 R R R是正则表达式
eg:数值常量:
{
+
,
−
,
ε
}
(
D
D
∗
∪
D
D
∗
.
D
∗
∪
D
∗
.
D
D
∗
)
,
D
=
{
0
,
1
,
2
,
.
.
.
,
9
}
\{+,-,\varepsilon\}(DD^*\cup DD^*.D^*\cup D^*.DD^*),D=\{0,1,2,...,9\}
{+,−,ε}(DD∗∪DD∗.D∗∪D∗.DD∗),D={0,1,2,...,9}
eg:72、3.14159、+7.、-.01
计算优先级
星号 ∗ > *> ∗>连接 > > >并 ∪ \cup ∪
定理
Φ
∗
=
{
ε
}
\varPhi^*=\{\varepsilon\}
Φ∗={ε}
R
∪
Φ
=
R
R\cup\varPhi=R
R∪Φ=R
R
ε
=
R
R\varepsilon=R
Rε=R
R
∪
ε
=
R
∪
{
ε
}
≠
R
R\cup \varepsilon=R\cup \{\varepsilon\}\neq R
R∪ε=R∪{ε}=R
R
Φ
=
Φ
≠
R
R\varPhi=\varPhi\neq R
RΦ=Φ=R
正则表达式与一个确定自动机等价!
GNFA(广义非确定自动机,NFA的推广)
(与NFA不同的是,转移用的并非是单个字符,而是一个正则表达式!)
G
=
(
Q
,
Σ
,
δ
,
q
s
t
a
r
t
,
q
a
c
c
e
p
t
)
G=(Q,\Sigma,\delta,q_{start},q_{accept})
G=(Q,Σ,δ,qstart,qaccept)
Q
Q
Q:有穷状态集
Σ
\Sigma
Σ:输入字母表(
Σ
ε
=
Σ
∪
{
ε
}
\Sigma_{\varepsilon}=\Sigma\cup\{\varepsilon\}
Σε=Σ∪{ε})
δ
:
(
Q
−
{
q
a
c
c
e
p
t
}
)
×
(
Q
−
{
q
s
t
a
r
t
}
)
→
R
\delta:(Q-\{q_{accept}\}) \times (Q-\{q_{start}\}) \rightarrow R
δ:(Q−{qaccept})×(Q−{qstart})→R
(与NFA不同的是,转移状态用的并非是单个字符,而是一个正则表达式!)
q
s
t
a
r
t
q_{start}
qstart:初始状态
q
a
c
c
e
p
t
q_{accept}
qaccept:接受状态/终止状态
CONVERT(G)(过程函数)
对于任意GNFA G,
C
O
N
V
E
R
T
(
G
)
CONVERT(G)
CONVERT(G)与
G
G
G等价!
对于
G
G
G的状态数
k
k
k,
k
=
2
k=2
k=2时,
C
O
N
V
E
R
T
(
G
)
=
δ
(
q
s
t
a
r
t
,
q
a
c
c
e
p
t
)
CONVERT(G)=\delta(q_{start},q_{accept})
CONVERT(G)=δ(qstart,qaccept)。
当
k
>
2
k>2
k>2时,令
q
r
i
p
∈
Q
−
{
q
s
t
a
r
t
}
−
{
q
a
c
c
e
p
t
}
,
Q
′
=
Q
−
q
r
i
p
q_{rip}\in Q-\{q_{start}\}-\{q_{accept}\},Q'=Q-{q_{rip}}
qrip∈Q−{qstart}−{qaccept},Q′=Q−qrip。
构造
G
′
=
(
Q
′
,
Σ
ε
,
δ
′
,
q
s
t
a
r
t
,
q
a
c
c
e
p
t
)
G'=(Q',\Sigma_{\varepsilon},\delta',q_{start},q_{accept})
G′=(Q′,Σε,δ′,qstart,qaccept),如此循环直到
k
=
2
k=2
k=2。
其中,对于每个非起始态
q
i
q_i
qi与每个非终结态
q
j
q_j
qj,
δ
′
(
q
i
,
q
j
)
=
(
R
1
)
(
R
2
)
∗
(
R
3
)
∪
(
R
4
)
\delta'(q_i,q_j)=(R_1)(R_2)*(R_3)\cup(R_4)
δ′(qi,qj)=(R1)(R2)∗(R3)∪(R4)
其中
R
1
=
δ
(
q
i
,
q
r
i
p
)
,
R
2
=
δ
(
q
r
i
p
,
q
r
i
p
)
,
R
3
=
δ
(
q
r
i
p
,
q
j
)
,
R
4
=
δ
(
q
i
,
q
j
)
R_1=\delta(q_i,q_{rip}),R_2=\delta(q_{rip},q_{rip}),R_3=\delta(q_{rip},q_{j}),R_4=\delta(q_i,q_j)
R1=δ(qi,qrip),R2=δ(qrip,qrip),R3=δ(qrip,qj),R4=δ(qi,qj)
(选择
i
→
j
i\rightarrow j
i→j和
i
→
(
r
i
p
)
∗
→
j
i\rightarrow (rip)^*\rightarrow j
i→(rip)∗→j的并集来转移状态不断递归)
转化方法
- 增加新的起始点与终结点,并将其与原来的起始点/终结点用
ε
\varepsilon
ε连接
(类似最大流的源点与汇点,使得起始点没有入度,终结点没有出度) - 合并平行边
- 去除中心点(使得点减少更精简)
以下图为例。
1.添加新起始点s与新终结点a,用 ε \varepsilon ε连接。
2.将状态2去消除中心点,变为 b ( a ∪ b ) ∗ b(a\cup b)^* b(a∪b)∗后删除状态2
3.将状态1去消除中心点,变为 a ∗ b ( a ∪ b ) ∗ a^*b(a\cup b)^* a∗b(a∪b)∗,结束。
(合并的时候,如果有不含 ε \varepsilon ε的部分,则消去所有 ε \varepsilon ε,否则不消去!)
以下图为例。
1.添加新起始点s与新终结点a,用 ε \varepsilon ε连接。
2.将状态1去消除中心点。
(消除路径经过1的、且不是回路的)
(1)把 2 → a 1 → b 3 2\xrightarrow{a}1\xrightarrow{b}3 2a1b3变为 2 → a b 3 2\xrightarrow{ab}3 2ab3
(2)把 3 → b 1 → a 2 3\xrightarrow{b}1\xrightarrow{a}2 3b1a2与 3 → a 2 3\xrightarrow{a}2 3a2变为 3 → b a ∪ a 2 3\xrightarrow {ba\cup a}2 3ba∪a2
(消除新起始点/新终结点相关的)
(3)把 s → ε 1 → a 2 s\xrightarrow{\varepsilon}1\xrightarrow{a}2 sε1a2变为 s → a 2 s\xrightarrow{a}2 sa2
(4)把 s → ε 1 → b 3 s\xrightarrow{\varepsilon}1\xrightarrow{b}3 sε1b3变为 s → b 3 s\xrightarrow{b}3 sb3
(消除路径经过1的、且是回路的)
(5)把 2 → a 1 → a 2 2\xrightarrow{a}1\xrightarrow{a}2 2a1a2与 2 → b 2 2\xrightarrow{b}2 2b2变为 2 → a a ∪ b 2 2\xrightarrow {aa\cup b}2 2aa∪b2
(6)把 3 → b 1 → b 3 3\xrightarrow{b}1\xrightarrow{b}3 3b1b3变为 3 → b b 3 3\xrightarrow{bb}3 3bb3
3.将状态2去消除中心点。
(1)将 s → a 2 → ε a s\xrightarrow{a}2\xrightarrow{\varepsilon}a sa2εa与 2 → a a ∪ b 2 2\xrightarrow{aa\cup b}2 2aa∪b2变为 s → a ( a a ∪ b ) ∗ a s\xrightarrow{a(aa\cup b)^*}a sa(aa∪b)∗a
(2)将 s → b 3 s\xrightarrow{b}3 sb3与 s → a 2 → a a ∪ b 2 → a b 3 s\xrightarrow{a}2\xrightarrow{aa\cup b}2\xrightarrow{ab}3 sa2aa∪b2ab3变为 s → a ( a a ∪ b ) ∗ a b ∪ b 3 s\xrightarrow{a(aa\cup b)^*ab\cup b}3 sa(aa∪b)∗ab∪b3
(因为 3 → ε a 3\xrightarrow{\varepsilon}a 3εa,所以状态3也是终结状态)
(3)将 3 → b b 3 3\xrightarrow{bb}3 3bb3与 3 → b a ∪ a 2 → a a ∪ b 2 → a b 3 3\xrightarrow{ba\cup a}2\xrightarrow{aa\cup b}2\xrightarrow{ab}3 3ba∪a2aa∪b2ab3变为 3 → ( b a ∪ a ) ( a a ∪ b ) ∗ a b ∪ b b 3 3\xrightarrow{(ba\cup a)(aa\cup b)^*ab\cup bb}3 3(ba∪a)(aa∪b)∗ab∪bb3
(4)将 3 → ε a 3\xrightarrow{\varepsilon}a 3εa与 3 → b a ∪ a 2 → a a ∪ b 2 → ε a 3\xrightarrow{ba\cup a}2\xrightarrow{aa\cup b}2\xrightarrow{\varepsilon}a 3ba∪a2aa∪b2εa变为 3 → b a ∪ a ( a a ∪ b ) ∗ ∪ ε a 3\xrightarrow{ba\cup a(aa\cup b)^*\cup\varepsilon}a 3ba∪a(aa∪b)∗∪εa
4.将状态3去消除中心点。
将 s → a ( a a ∪ b ) ∗ a b ∪ b 3 s\xrightarrow{a(aa\cup b)^*ab\cup b}3 sa(aa∪b)∗ab∪b3、 3 → ( b a ∪ a ) ( a a ∪ b ) ∗ a b ∪ b b 3 3\xrightarrow{(ba\cup a)(aa\cup b)^*ab\cup bb}3 3(ba∪a)(aa∪b)∗ab∪bb3、 3 → b a ∪ a ( a a ∪ b ) ∗ ∪ ε a 3\xrightarrow{ba\cup a(aa\cup b)^*\cup\varepsilon}a 3ba∪a(aa∪b)∗∪εa,
与 s → a ( a a ∪ b ) ∗ a s\xrightarrow{a(aa\cup b)^*}a sa(aa∪b)∗a变为
s → ( a ( a a ∪ b ) ∗ a b ∪ b ) ( ( b a ∪ a ) ( a a ∪ b ) ∗ a b ∪ b b ) ∗ ( b a ∪ a ( a a ∪ b ) ∗ ∪ ε ) ∪ ( a ( a a ∪ b ) ∗ ) a s\xrightarrow{(a(aa\cup b)^*ab\cup b)((ba\cup a)(aa\cup b)^*ab\cup bb)^*(ba\cup a(aa\cup b)^*\cup\varepsilon)\cup(a(aa\cup b)^*)}a s(a(aa∪b)∗ab∪b)((ba∪a)(aa∪b)∗ab∪bb)∗(ba∪a(aa∪b)∗∪ε)∪(a(aa∪b)∗)a
泵引理(一个正则语言一定存在泵长度)
若
A
A
A是正则语言,则存在常数
p
p
p(
p
p
p为泵长度,类似最大循环节长度),若
s
∈
A
s\in A
s∈A,
∣
s
∣
≥
p
|s|\geq p
∣s∣≥p,
则
s
=
x
y
z
s=xyz
s=xyz,并且满足:
(1)
∀
i
≥
0
,
x
y
i
z
∈
A
\forall i\geq0,xy^iz\in A
∀i≥0,xyiz∈A。
(2)
∣
y
∣
>
0
|y|>0
∣y∣>0
(3)
∣
x
y
∣
≤
p
|xy|\leq p
∣xy∣≤p
如果要证明一个语言不是正则的,则用反证法 。找一个反例即可。
二、上下文无关文法(CFG)
G
=
(
V
,
Σ
,
R
,
S
)
G=(V,\Sigma,R,S)
G=(V,Σ,R,S)
V
V
V:有穷变元集
Σ
\Sigma
Σ:有穷终结符集
R
R
R:有穷规则集(形如
A
→
w
,
w
∈
(
V
∪
Σ
)
∗
A\rightarrow w,w\in(V\cup\Sigma)^*
A→w,w∈(V∪Σ)∗)
S
∈
V
S\in V
S∈V:初始变元
一个上下文无关语言(CFL)与上下文无关文法等价!
CFG生成
合并
对于原本的初始变元 S 1 , S 2 , . . . S k S_1,S_2,...S_k S1,S2,...Sk,新增规则 S → S 1 ∣ S 2 ∣ . . . S k S\rightarrow S_1|S_2|...S_k S→S1∣S2∣...Sk
正则语言生成
用DFA转化为等价的CFG(正则语言都是上下文无关语言!)
对于原DFA中
δ
(
q
i
,
a
)
=
q
j
\delta(q_i,a)=q_j
δ(qi,a)=qj(即
q
i
→
a
q
j
q_i\xrightarrow{a}q_j
qiaqj),则令
R
i
→
a
R
j
R_i\rightarrow aR_j
Ri→aRj
对于原DFA中
q
i
∈
F
q_i\in F
qi∈F(即
q
i
q_i
qi为终止状态),则令
R
i
→
ε
R_i\rightarrow \varepsilon
Ri→ε
语法分析树
文法歧义性
最左派生:每一步都优先替换最左边的变元
eg1:
<
E
X
P
R
>
<EXPR>
<EXPR>
⇒
<
E
X
P
R
>
+
<
E
X
P
R
>
\Rightarrow <EXPR>+<EXPR>
⇒<EXPR>+<EXPR>
⇒
a
+
<
E
X
P
R
>
\Rightarrow a+<EXPR>
⇒a+<EXPR>
⇒
a
+
<
E
X
P
R
>
×
<
E
X
P
R
>
\Rightarrow a+<EXPR>\times<EXPR>
⇒a+<EXPR>×<EXPR>
⇒
a
+
a
×
<
E
X
P
R
>
\Rightarrow a+a\times<EXPR>
⇒a+a×<EXPR>
⇒
a
+
a
×
a
\Rightarrow a+a\times a
⇒a+a×a
eg2:
<
E
X
P
R
>
<EXPR>
<EXPR>
⇒
<
E
X
P
R
>
×
<
E
X
P
R
>
\Rightarrow <EXPR>\times<EXPR>
⇒<EXPR>×<EXPR>
⇒
<
E
X
P
R
>
+
<
E
X
P
R
>
×
<
E
X
P
R
>
\Rightarrow <EXPR>+<EXPR>\times<EXPR>
⇒<EXPR>+<EXPR>×<EXPR>
⇒
a
+
<
E
X
P
R
>
×
<
E
X
P
R
>
\Rightarrow a+<EXPR>\times<EXPR>
⇒a+<EXPR>×<EXPR>
⇒
a
+
a
×
<
E
X
P
R
>
\Rightarrow a+a\times<EXPR>
⇒a+a×<EXPR>
⇒
a
+
a
×
a
\Rightarrow a+a\times a
⇒a+a×a
注意到最左派生产生歧义性,因此这是歧义文法。
乔姆斯基范式(CNF)
初始变元不能在式子右方出现
只允许如下形式规则:
S
→
ε
S\rightarrow \varepsilon
S→ε
A
→
B
C
A\rightarrow BC
A→BC
A
→
a
A\rightarrow a
A→a(任意终结符)
生成CNF
任何的CFG都有等价的CNF!
- 添加新初始变元 S 0 S_0 S0与新规则 S 0 → S S_0\rightarrow S S0→S(旧初始变元)
- 处理所有的
ε
\varepsilon
ε规则:
若有非初始变元 A → ε A\rightarrow\varepsilon A→ε,则删除之,并修改所有等式右边与 A A A相关的内容。
B → u A v B\rightarrow uAv B→uAv变为 B → u v B\rightarrow uv B→uv。
B → u A v A w B\rightarrow uAvAw B→uAvAw变为 B → u v A w ∣ u A v w ∣ u v w B\rightarrow uvAw|uAvw|uvw B→uvAw∣uAvw∣uvw(三种不同的可能情况)
B → A B\rightarrow A B→A变为 B → ε B\rightarrow\varepsilon B→ε。
重复以上,知道删除所有 ε \varepsilon ε相关规则为止( S 0 → ε S_0\rightarrow\varepsilon S0→ε除外) - 处理所有的单一规则:(左边单个对应右边单个)
删除 A → B A\rightarrow B A→B,并修改所有相关的内容。
若有 B → u B\rightarrow u B→u,则添加 A → u A\rightarrow u A→u。
重复以上,直到删除所有单一规则为止。 - 处理
A
→
u
1
u
2
.
.
.
u
k
A\rightarrow u_1u_2...u_k
A→u1u2...uk长规则:
将其换成 A → u 1 A 1 , A 1 → u 2 A 2 , . . . . . . , A k = u k − 1 u k A\rightarrow u_1A_1,A_1\rightarrow u_2A_2,......,A_{k}=u_{k-1}u_k A→u1A1,A1→u2A2,......,Ak=uk−1uk。 - 处理终结符:
引入新变元 U i U_i Ui与新规则 U i → a i U_i\rightarrow a_i Ui→ai。
A → a i a j A\rightarrow a_ia_j A→aiaj换成 A → U i U j A\rightarrow U_iU_j A→UiUj
A → a i B A\rightarrow a_iB A→aiB换成 A → U i B A\rightarrow U_iB A→UiB
A → B a i A\rightarrow Ba_i A→Bai换成 A → B u i A\rightarrow Bu_i A→Bui
G : S → A S A ∣ a B G:S\rightarrow ASA|aB G:S→ASA∣aB
A → B ∣ S A\rightarrow B|S A→B∣S
B → b ∣ ε B\rightarrow b|\varepsilon B→b∣ε
求等价CNF。
(1)添加新初始变元
S
0
S_0
S0
S
0
→
S
S_0\rightarrow S
S0→S
S
→
A
S
A
∣
a
B
S\rightarrow ASA|aB
S→ASA∣aB
A
→
B
∣
S
A\rightarrow B|S
A→B∣S
B
→
b
∣
ε
B\rightarrow b|\varepsilon
B→b∣ε
(2)处理B的
ε
\varepsilon
ε规则
S
0
→
S
S_0\rightarrow S
S0→S
S
→
A
S
A
∣
a
B
∣
a
S\rightarrow ASA|aB|a
S→ASA∣aB∣a
A
→
B
∣
S
∣
ε
A\rightarrow B|S|\varepsilon
A→B∣S∣ε
B
→
b
B\rightarrow b
B→b
(3)处理A的
ε
\varepsilon
ε规则
S
0
→
S
S_0\rightarrow S
S0→S
S
→
A
S
A
∣
a
B
∣
a
∣
S
A
∣
A
S
S\rightarrow ASA|aB|a|SA|AS
S→ASA∣aB∣a∣SA∣AS(
S
→
S
S\rightarrow S
S→S没有用,可以删去)
A
→
B
∣
S
A\rightarrow B|S
A→B∣S
B
→
b
B\rightarrow b
B→b
(4)处理单一规则
S
0
→
S
S_0\rightarrow S
S0→S
S
0
→
A
S
A
∣
a
B
∣
a
∣
S
A
∣
A
S
S_0\rightarrow ASA|aB|a|SA|AS
S0→ASA∣aB∣a∣SA∣AS
S
→
A
S
A
∣
a
B
∣
a
∣
S
A
∣
A
S
S\rightarrow ASA|aB|a|SA|AS
S→ASA∣aB∣a∣SA∣AS
A
→
B
∣
S
A\rightarrow B|S
A→B∣S
B
→
b
B\rightarrow b
B→b
(5)处理单一规则
A
→
B
A\rightarrow B
A→B
S
0
→
A
S
A
∣
a
B
∣
a
∣
S
A
∣
A
S
S_0\rightarrow ASA|aB|a|SA|AS
S0→ASA∣aB∣a∣SA∣AS
S
→
A
S
A
∣
a
B
∣
a
∣
S
A
∣
A
S
S\rightarrow ASA|aB|a|SA|AS
S→ASA∣aB∣a∣SA∣AS
A
→
S
∣
b
A\rightarrow S|b
A→S∣b
B
→
b
B\rightarrow b
B→b
(6)处理单一规则
A
→
S
A\rightarrow S
A→S
S
0
→
A
S
A
∣
a
B
∣
a
∣
S
A
∣
A
S
S_0\rightarrow ASA|aB|a|SA|AS
S0→ASA∣aB∣a∣SA∣AS
S
→
A
S
A
∣
a
B
∣
a
∣
S
A
∣
A
S
S\rightarrow ASA|aB|a|SA|AS
S→ASA∣aB∣a∣SA∣AS
A
→
A
S
A
∣
a
B
∣
S
A
∣
A
S
∣
a
∣
b
A\rightarrow ASA|aB|SA|AS|a|b
A→ASA∣aB∣SA∣AS∣a∣b
B
→
b
B\rightarrow b
B→b
(7)处理长规则
A
S
A
ASA
ASA
S
0
→
A
A
1
∣
a
B
∣
a
∣
S
A
∣
A
S
S_0\rightarrow AA_1|aB|a|SA|AS
S0→AA1∣aB∣a∣SA∣AS
S
→
A
A
1
∣
a
B
∣
a
∣
S
A
∣
A
S
S\rightarrow AA_1|aB|a|SA|AS
S→AA1∣aB∣a∣SA∣AS
A
→
A
A
1
∣
a
B
∣
S
A
∣
A
S
∣
a
∣
b
A\rightarrow AA_1|aB|SA|AS|a|b
A→AA1∣aB∣SA∣AS∣a∣b
B
→
b
B\rightarrow b
B→b
A
1
→
S
A
A_1\rightarrow SA
A1→SA
(8)处理终结符
a
a
a
S
0
→
A
A
1
∣
U
B
∣
U
∣
S
A
∣
A
S
S_0\rightarrow AA_1|UB|U|SA|AS
S0→AA1∣UB∣U∣SA∣AS
S
→
A
A
1
∣
U
B
∣
U
∣
S
A
∣
A
S
S\rightarrow AA_1|UB|U|SA|AS
S→AA1∣UB∣U∣SA∣AS
A
→
A
A
1
∣
U
B
∣
S
A
∣
A
S
∣
U
∣
B
A\rightarrow AA_1|UB|SA|AS|U|B
A→AA1∣UB∣SA∣AS∣U∣B
A
1
→
S
A
A_1\rightarrow SA
A1→SA
B
→
b
B\rightarrow b
B→b
U
→
a
U\rightarrow a
U→a
于是得到
G
G
G对应的乔姆斯基范式。
下推自动机(PDA,通常指的是非确定性下推自动机)
由栈组成,每次读入字符后选择与栈顶字符匹配或压入栈。
M
=
(
Q
,
Σ
,
Γ
,
δ
,
q
0
,
F
)
M=(Q,\Sigma,\Gamma,\delta,q_0,F)
M=(Q,Σ,Γ,δ,q0,F)
Q
Q
Q:有穷状态集
Σ
\Sigma
Σ:输入字母表(
Σ
ε
=
Σ
∪
{
ε
}
\Sigma_\varepsilon=\Sigma\cup\{\varepsilon\}
Σε=Σ∪{ε})
Γ
\Gamma
Γ:栈字母表(
Γ
ε
=
Γ
∪
{
ε
}
\Gamma_\varepsilon=\Gamma\cup\{\varepsilon\}
Γε=Γ∪{ε})
δ
:
Q
×
Σ
ε
×
Γ
ε
→
P
(
Q
×
Γ
ε
)
\delta:Q\times\Sigma_{\varepsilon}\times\Gamma_{\varepsilon}\rightarrow P(Q\times\Gamma_{\varepsilon})
δ:Q×Σε×Γε→P(Q×Γε)(转移函数)
q
0
q_0
q0:初始状态(
q
0
∈
Q
q_0 \in Q
q0∈Q)
F
F
F:终结状态集(
F
⊆
Q
F\subseteq Q
F⊆Q)
以此图为例,可以绘制出此自动机。
在栈的初始插入一个 $符号,用于判断是否为空栈。
上下文无关语言CFL
如果一个语言是上下文无关语言(CFL)
⟺
\Longleftrightarrow
⟺有下推自动机(PDA)识别这个语言。
CFL对正则运算封闭!
CFL对交
∩
\cap
∩不封闭!(语言
A
,
B
A,B
A,B是CFL,
A
∩
B
A\cap B
A∩B不一定是CFL)
CFL对补运算不封闭!(语言
A
A
A是CFL,
A
c
A^c
Ac不一定是CFL)
CFL的泵引理(一个CFL必定有泵)
假设
A
A
A为上下文无关语言,则存在常数
p
p
p(泵长度,类似循环节最大长度),若
s
∈
A
s\in A
s∈A,且
∣
s
∣
≥
p
|s|\geq p
∣s∣≥p,
则
s
=
u
v
x
y
z
s=uvxyz
s=uvxyz,其中
(1)
∀
i
≥
0
,
u
v
i
x
y
i
z
∈
A
\forall i\geq 0,uv^ixy^iz\in A
∀i≥0,uvixyiz∈A
(2)
∣
v
y
∣
>
0
|vy|>0
∣vy∣>0
(3)
∣
v
x
y
∣
≤
p
|vxy|\leq p
∣vxy∣≤p
同正则文法一样,找出一个反例证明不是CFL即可!
eg1:证明
C
=
{
a
i
b
j
c
k
∣
0
≤
i
≤
j
≤
k
}
C=\{a^ib^jc^k|0\leq i\leq j\leq k\}
C={aibjck∣0≤i≤j≤k}不是CFL。
prove:假设
C
C
C为上下文无关语言,设
p
p
p为泵长度,不妨令
s
=
a
p
b
p
c
p
s=a^pb^pc^p
s=apbpcp。
则
s
=
u
v
x
y
z
s=uvxyz
s=uvxyz,其中
(1)
∀
i
≥
0
,
u
v
i
x
y
i
z
∈
C
\forall i\geq 0,uv^ixy^iz\in C
∀i≥0,uvixyiz∈C
(2)
∣
v
y
∣
>
0
|vy|>0
∣vy∣>0(即
v
v
v与
y
y
y至少含一种符号)
(3)
∣
v
x
y
∣
≤
p
|vxy|\leq p
∣vxy∣≤p(即
v
v
v与
y
y
y至多含两种符号,理由同上)
(1):
v
v
v与
y
y
y仅含一种符号
①:
a
a
a不在
v
v
v与
y
y
y之中,此时只可能是
a
.
.
.
a
⏟
p
个
∣
∅
∣
b
.
.
.
b
⏟
p
个
∣
∅
∣
c
.
.
.
c
⏟
p
个
\underbrace{a...a}_{p个}|\emptyset|\underbrace{b...b}_{p个}|\emptyset|\underbrace{c...c}_{p个}
p个
a...a∣∅∣p个
b...b∣∅∣p个
c...c,违背了
∣
v
y
∣
>
0
|vy|>0
∣vy∣>0,矛盾。
②:
b
b
b不在
v
v
v与
y
y
y之中,此时只可能是
a
.
.
.
a
⏟
p
−
i
个
∣
a
.
.
.
a
⏟
i
个
∣
b
.
.
.
b
⏟
p
个
∣
c
.
.
.
c
⏟
i
个
∣
c
.
.
.
c
⏟
p
−
i
个
\underbrace{a...a}_{p-i个}|\underbrace{a...a}_{i个}|\underbrace{b...b}_{p个}|\underbrace{c...c}_{i个}|\underbrace{c...c}_{p-i个}
p−i个
a...a∣i个
a...a∣p个
b...b∣i个
c...c∣p−i个
c...c,违背了
∣
v
x
y
∣
≤
q
|vxy|\leq q
∣vxy∣≤q,矛盾。
③:
c
c
c不在
v
v
v与
y
y
y之中,同①,矛盾。
(2):
v
v
v与
y
y
y含两种符号
此时易知当
i
>
1
i>1
i>1时,就不具有
a
p
b
p
c
p
a^pb^pc^p
apbpcp的形式,即
i
=
0
i=0
i=0或
i
=
1
i=1
i=1,矛盾。(
∀
i
≥
0
\forall i\geq 0
∀i≥0才算成立)
综上,
C
C
C不是CFL,证毕。
eg2:证明
D
=
{
w
w
∣
w
∈
{
0
,
1
}
∗
}
D=\{ww|w\in\{0,1\}^*\}
D={ww∣w∈{0,1}∗}不是CFL。
prove:假设
C
C
C为上下文无关语言,设
p
p
p为泵长度,不妨令
s
=
0
p
1
p
0
p
1
p
s=0^p1^p0^p1^p
s=0p1p0p1p。
则
s
=
u
v
x
y
z
s=uvxyz
s=uvxyz,其中
(1)
∀
i
≥
0
,
u
v
i
x
y
i
z
∈
C
\forall i\geq 0,uv^ixy^iz\in C
∀i≥0,uvixyiz∈C
(2)
∣
v
y
∣
>
0
|vy|>0
∣vy∣>0(即
v
v
v与
y
y
y至少含一种符号)
(3)
∣
v
x
y
∣
≤
p
|vxy|\leq p
∣vxy∣≤p(即
v
v
v与
y
y
y至多含两种符号)
(注意这里一定要挑一个合适的反例,例如
0
p
1
0
p
1
0^p10^p1
0p10p1可以拆分为
0...0
⏟
p
−
1
个
∣
0
∣
1
∣
0
∣
0...0
⏟
p
−
1
个
1
\underbrace{0...0}_{p-1个}|0|1|0|\underbrace{0...0}_{p-1个}1
p−1个
0...0∣0∣1∣0∣p−1个
0...01,是合法的。)
(1)
v
x
y
vxy
vxy在前半部分里,即
v
x
y
vxy
vxy在第一个
0
p
1
p
0^p1^p
0p1p内。此时随着
i
i
i的变化,后半个
0
p
1
p
0^p1^p
0p1p的数量会与前半个不同,不匹配,矛盾。
(2)
v
x
y
vxy
vxy在后半部分里,同上,矛盾。
(3)
v
x
y
vxy
vxy横跨中间,则
v
v
v与
y
y
y不可以含两种符号,故
v
v
v为
1
i
1^i
1i,
y
y
y为
1
i
1^i
1i,同理
i
i
i的变化会让头尾的两个
0
p
0^p
0p与
1
p
1^p
1p数量与内部的两个不同,不匹配,矛盾。
综上,
D
D
D不是CFL,证毕。
三、图灵机
单带图灵机(TM)
有一个纸带序列与一个可以左右双向移动的读写头
M
=
(
Q
,
Σ
,
Γ
,
δ
,
q
0
,
q
a
c
c
,
q
r
e
j
)
M=(Q,\Sigma,\Gamma,\delta,q_0,q_{acc},q_{rej})
M=(Q,Σ,Γ,δ,q0,qacc,qrej)
Q
Q
Q:有穷状态集
Σ
\Sigma
Σ:输入字母表(注意空格符
B
∉
Σ
B\notin\Sigma
B∈/Σ)
Γ
\Gamma
Γ:带字母表,
Σ
∪
{
B
}
⊆
Γ
\Sigma\cup\{B\}\subseteq\Gamma
Σ∪{B}⊆Γ
δ
\delta
δ:
Q
×
Γ
→
Q
×
Γ
×
{
L
,
R
}
Q\times\Gamma\rightarrow Q\times\Gamma\times\{L,R\}
Q×Γ→Q×Γ×{L,R}(转移函数,L/R表示左移/右移)
q
0
∈
Q
q_0\in Q
q0∈Q:初始状态
q
a
c
c
∈
Q
q_{acc}\in Q
qacc∈Q:停机接受状态
q
r
e
q
∈
Q
q_{req}\in Q
qreq∈Q:停机拒绝状态,
q
a
c
c
≠
q
r
e
j
q_{acc}\neq q_{rej}
qacc=qrej
单带图灵机的格局(序列的当前状态):
u
q
a
v
uqav
uqav
q
q
q:当前状态
u
a
v
uav
uav:当前带上的内容
a
a
a:当前的扫描符号
(即之前的序列
u
u
u|当前的状态
q
q
q|当前的扫描符号
a
a
a|后面的序列
v
v
v)
eg:对于带
101101111
101101111
101101111,状态
q
7
q_7
q7正在扫描第五个字符
0
0
0,其格局为
1011
q
7
01111
1011q_701111
1011q701111
初始格局:
q
0
w
q_0w
q0w(w为输入串)
接受格局:
u
q
a
c
c
a
v
uq_{acc}av
uqaccav
拒绝格局:
u
q
r
e
j
a
v
uq_{rej}av
uqrejav
停机格局:
u
q
a
c
c
a
v
/
u
q
r
e
j
a
v
uq_{acc}av/uq_{rej}av
uqaccav/uqrejav
(图灵机的计算结果只能是停机接受、停机拒绝、不停机)
若
δ
(
q
i
,
b
)
=
(
q
j
,
c
,
L
)
\delta(q_i,b)=(q_j,c,L)
δ(qi,b)=(qj,c,L)(L表示左移),则
u
a
q
i
b
v
uaq_ibv
uaqibv产生
u
q
j
a
c
v
uq_jacv
uqjacv(将
b
b
b变为
c
c
c,
q
i
q_i
qi变为
q
j
q_j
qj后左移)
q
i
b
v
q_ibv
qibv产生
q
j
c
v
q_jcv
qjcv(已经在带最左端,不可再左移)
若
δ
(
q
i
,
b
)
=
(
q
j
,
c
,
R
)
\delta(q_i,b)=(q_j,c,R)
δ(qi,b)=(qj,c,R)(R表示右移),则
u
a
q
i
b
v
uaq_ibv
uaqibv产生
u
a
c
q
j
v
uacq_jv
uacqjv(因为带一定可以继续右移,所以不需要分情况)
如何判断当前状态已经在带最左端:在当前位置写下某个特殊符号,让带头向左移动,若仍然检测到该符号则说明在最左端,否则恢复原来的符号。
图灵可识别=递归可枚举=计算可枚举=半可判定=半可计算
图灵可判定=递归=可解=能行=可判定=可计算
图灵可识别 ≠ \neq =图灵可判定!
图灵机的等价变形
多带图灵机(同时多个纸带)
δ
:
Q
×
Γ
k
→
Q
×
Γ
k
×
{
L
,
R
}
k
\delta:Q\times\Gamma^k\rightarrow Q\times\Gamma^k\times\{L,R\}^k
δ:Q×Γk→Q×Γk×{L,R}k
δ
:
(
q
i
,
a
1
,
.
.
.
,
a
k
)
=
(
q
j
,
b
1
,
.
.
.
,
b
k
,
L
/
R
,
L
/
R
,
.
.
.
,
L
/
R
⏟
k
个
)
\delta:(q_i,a_1,...,a_k)=(q_j,b_1,...,b_k,\underbrace{L/R,L/R,...,L/R}_{k个})
δ:(qi,a1,...,ak)=(qj,b1,...,bk,k个
L/R,L/R,...,L/R)
多带图灵机可转换为等价的单带图灵机!
图灵可识别
⇔
\Leftrightarrow
⇔可用多带图灵机识别!
非确定性图灵机(NTM)
在左移/右移的基础上增加了“停止”状态
S
S
S
d
e
l
t
a
:
Q
×
Γ
→
P
(
Q
×
Γ
×
{
L
,
R
,
S
}
)
delta:Q\times\Gamma\rightarrow P(Q\times\Gamma\times\{L,R,S\})
delta:Q×Γ→P(Q×Γ×{L,R,S})
因此计算NTM格局的方式变为了计算树(拥有多个非确定性分支)
每个非确定性图灵机(NTM)都有等价的确定性图灵机(DTM)!
图灵可识别
⇔
\Leftrightarrow
⇔可用非确定性图灵机识别!
图灵可判定
⇔
\Leftrightarrow
⇔可用非确定性图灵机判定!
识别器:输入
x
x
x,输出
0
/
1
/
?
0/1/?
0/1/?(停机拒绝/停机接受/不停机)
判定器:输入
x
x
x,输出
0
/
1
0/1
0/1(停机拒绝/停机接受,没有不停机)
转换器:输入
x
x
x,输出
y
y
y(输出一个串而非一位,通常用于计算函数)
产生器:输入
0
n
0^n
0n,输出
x
n
x_n
xn(生成序列)
枚举器:输入
ε
\varepsilon
ε,输出
x
1
,
x
2
,
x
3
,
.
.
.
x_1,x_2,x_3,...
x1,x2,x3,...(无输入,无遗漏,无多余,无顺序,可重复)
图灵可识别 ⇔ \Leftrightarrow ⇔图灵可枚举!
图灵机算法
对象编码写作<
O
1
,
O
2
,
.
.
.
,
O
k
O_1,O_2,...,O_k
O1,O2,...,Ok>,表示对串
O
1
O
2
.
.
.
O
k
O_1O_2...O_k
O1O2...Ok进行一种编码转换。
eg:设定一种对
01
01
01串编码的方式,将所有的字符重复出现1次,多个串拼接时用两个不同的字符作为间隔符拼接。
x
=
010
,
y
=
11
,
x=010,y=11,
x=010,y=11,<
x
,
y
x,y
x,y>
=
001100101111
=001100101111
=001100101111(
001100
∣
10
∣
1111
001100|10|1111
001100∣10∣1111)
递归定理
存在可计算函数 q : Σ ∗ → Σ ∗ q:\Sigma^*\rightarrow\Sigma^* q:Σ∗→Σ∗, ∀ w \forall w ∀w, q ( w ) q(w) q(w)是图灵机 P w P_w Pw的描述,单带图灵机 P w P_w Pw打印出 w w w,然后停机。(一个函数如果可计算,则和图灵机等价!)
自我复制机:自己打印自己的图灵机。
∀
x
,
S
E
L
F
(
x
)
=
<
S
E
L
F
>
\forall x,SELF(x)=<SELF>
∀x,SELF(x)=<SELF>(不断地进行自我复制)
递归定理:假设单带图灵机
T
T
T有计算函数
t
:
Σ
∗
×
Σ
∗
→
Σ
∗
t:\Sigma^*\times\Sigma^*\rightarrow\Sigma^*
t:Σ∗×Σ∗→Σ∗,则存在单带自动机
R
R
R,其计算函数
r
:
Σ
∗
×
Σ
∗
→
Σ
∗
r:\Sigma^*\times\Sigma^*\rightarrow\Sigma^*
r:Σ∗×Σ∗→Σ∗,
∀
w
,
r
(
w
)
=
t
(
\forall w,r(w)=t(
∀w,r(w)=t(<
R
R
R>
,
w
)
,w)
,w)
(
T
T
T可以用
R
R
R来代替,从而实现递归运算,将问题转化)
图灵机接受性问题
定义
A
T
M
=
{
<
M
,
w
>
∣
图灵机
M
能接受串
w
}
A_{TM}=\{<M,w>|图灵机M能接受串w\}
ATM={<M,w>∣图灵机M能接受串w}
一个图灵机能接受某些给定的串构成的语言, 是图灵可识别的!是不可判定的!
通用机:存在一个固定的图灵机
U
U
U,对于任意图灵机
M
M
M与输入
w
w
w,
U
(
<
M
,
w
>
)
=
M
(
w
)
U(<M,w>)=M(w)
U(<M,w>)=M(w)
图灵机极小性问题
极小图灵机:对于图灵机
M
M
M,其描述的字符<
M
M
M>是最短的。
(因为图灵机有无穷多种,每种都有等价的极小图灵机,因此
M
I
N
T
M
MIN_{TM}
MINTM是无穷语言。)
M
I
N
T
M
MIN_{TM}
MINTM不是图灵可识别!
不动点(x=f(x))
递归定理的不动点形式:对于 ∀ \forall ∀可计算函数 t : Σ ∗ → Σ ∗ t:\Sigma^*\rightarrow\Sigma^* t:Σ∗→Σ∗,存在一个图灵机 F F F,使得 t ( < F > ) t(<F>) t(<F>)描述一个与 F F F等价的图灵机。
四、可计算问题/不可计算问题
算法可解:存在处处停机的等价图灵机。
对于正则语言的可判定问题
A
D
F
A
=
{
<
B
,
w
>
∣
D
F
A
B
接受串
w
}
A_{DFA}=\{<B,w>|DFA\ B接受串w\}
ADFA={<B,w>∣DFA B接受串w}是可判定语言。
同理
A
N
F
A
A_{NFA}
ANFA是可判定语言。
A
R
E
X
=
{
<
R
,
w
>
∣
正则表达式
R
派生串
w
}
A_{REX}=\{<R,w>|正则表达式\ R派生串w\}
AREX={<R,w>∣正则表达式 R派生串w}是可判定语言。
(因为DFA、NFA、REX提供给图灵机的都是等价的,图灵机能在这三种之间进行转换)
(DFA空性)
E
D
F
A
=
{
<
A
>
∣
A
是
D
F
A
且
L
(
A
)
=
∅
}
E_{DFA}=\{<A>|A是DFA且L(A)=\empty\}
EDFA={<A>∣A是DFA且L(A)=∅}是可判定语言
(DFA等价性)
E
Q
D
F
A
=
{
<
A
,
B
>
∣
A
与
B
都是
D
F
A
且
L
(
A
)
=
L
(
B
)
}
EQ_{DFA}=\{<A,B>|A与B都是DFA且L(A)=L(B)\}
EQDFA={<A,B>∣A与B都是DFA且L(A)=L(B)}是可判定语言。
关于上下文无关语言(CFL)的可判定问题
每一个CFL是可判定的!
A
C
F
G
=
{
<
G
,
w
>
∣
C
F
G
G
派生串
w
}
A_{CFG}=\{<G,w>|CFG\ G派生串w\}
ACFG={<G,w>∣CFG G派生串w}是可判定语言。
(CFG空性)
E
C
F
G
=
{
<
G
>
∣
C
F
G
G
,
L
(
G
)
=
∅
}
E_{CFG}=\{<G>|CFG\ G,L(G)=\emptyset\}
ECFG={<G>∣CFG G,L(G)=∅}是可判定语言。
(CFG等价性)
E
Q
C
F
G
=
{
<
G
,
H
>
∣
C
F
G
G
,
H
,
L
(
G
)
=
L
(
H
)
}
EQ_{CFG}=\{<G,H>|CFG\ G,H,L(G)=L(H)\}
EQCFG={<G,H>∣CFG G,H,L(G)=L(H)}是不可判定语言!
不可计算问题
有理数集可数,实数集不可数!
用对角化方法证明不可计算问题
对角化方法:在判定结果图上构造一个非图灵机后观察对角线上的判定结果。
eg:定义
A
T
M
=
{
<
M
,
w
>
∣
图灵机
M
能接受串
w
}
A_{TM}=\{<M,w>|图灵机M能接受串w\}
ATM={<M,w>∣图灵机M能接受串w},
证明:
A
T
M
A_{TM}
ATM不可判定。
证:
那只需用对角化法证明
D
T
M
D_{TM}
DTM不可判定。
假设存在图灵机
H
H
H可判定
A
T
M
A_{TM}
ATM,即:
H
(
<
M
>
,
w
)
=
{
接受
M
接受
w
拒绝
M
不接受
w
H(<M>,w)=\left\{\begin{array}{ll} 接受 & M接受w \\ 拒绝 & M不接受w\end{array}\right.
H(<M>,w)={接受拒绝M接受wM不接受w
构造
D
D
D=“对于输入<
M
M
M>,
M
M
M是图灵机”
在输入"
M
,
<
M
>
M,<M>
M,<M>"上运行
H
H
H,如果
H
H
H接受则拒绝
D
D
D,反之接受,即:
D
(
<
M
>
)
=
{
接受
M
不接受
<
M
>
拒绝
M
接受
<
M
>
D(<M>)=\left\{\begin{array}{ll} 接受 & M不接受<M> \\ 拒绝 & M接受<M>\end{array}\right.
D(<M>)={接受拒绝M不接受<M>M接受<M>
(M串是图灵机自己的编码,即所有w中的一部分,即
D
T
M
D_{TM}
DTM是
A
T
M
A_{TM}
ATM的特例。)
不妨令
M
=
D
M=D
M=D,即:
D
(
<
D
>
)
=
{
接受
D
不接受
<
D
>
拒绝
D
接受
<
D
>
D(<D>)=\left\{\begin{array}{ll} 接受 & D不接受<D> \\ 拒绝 & D接受<D>\end{array}\right.
D(<D>)={接受拒绝D不接受<D>D接受<D>
显然矛盾,故原命题得证。
如图所示,对于
H
(
<
M
,
<
M
>
>
)
H(<M,<M>>)
H(<M,<M>>),
D
D
D的结果是反过来的,而
D
<
D
>
D<D>
D<D>上的结果却并不是全部接受。
非图灵可识别语言
对于 A A A和 A A A的补集 A c / A ‾ = Σ ∗ − A A^c/\overline{A}=\Sigma^*-A Ac/A=Σ∗−A,A可判定 ⇔ \Leftrightarrow ⇔A与 A c A^c Ac图灵可识别。(可判定语言对布尔运算封闭)
归约法
(图灵机的停机问题)
H
A
L
T
T
M
=
{
<
M
,
w
>
∣
图灵机
M
在输入
w
上停机
}
HALT_{TM}=\{<M,w>|图灵机M在输入w上停机\}
HALTTM={<M,w>∣图灵机M在输入w上停机}是不可判定的。
(图灵机空性问题)
E
T
M
=
{
<
M
>
∣
M
是图灵机且
L
(
M
)
=
∅
}
E_{TM}=\{<M>|M是图灵机且L(M)=\emptyset \}
ETM={<M>∣M是图灵机且L(M)=∅}是不可判定的。
(图灵机正则性问题)
R
E
G
U
L
A
R
T
M
=
{
<
M
>
∣
M
为图灵机且
L
(
M
)
正则
}
REGULAR_{TM}=\{<M>|M为图灵机且L(M)正则\}
REGULARTM={<M>∣M为图灵机且L(M)正则}是不可判定的。
(图灵机等价性问题)
E
Q
T
M
=
{
<
M
1
,
M
2
>
∣
M
1
和
M
2
是图灵机且
L
(
M
1
)
=
L
(
M
2
)
}
EQ_{TM}=\{<M_1,M_2>|M_1和M_2是图灵机且L(M_1)=L(M_2)\}
EQTM={<M1,M2>∣M1和M2是图灵机且L(M1)=L(M2)}是不可判定的。