第6章

advertisement
计算理论
REVIEW(20110328)
 可归约性
核心: 利用已有的不可判定问题,
证明其它问题不可判定.
问题: ETM , EQTM , 波斯特对应问题(PCP),
与线性界限自动机有关的问题, 等.
技巧: 模拟+归约
一般归约, 映射归约, 利用计算历史归约.
2
REVIEW(20110328)
归约
核心: 利用已有不可判定问题,
证明其它问题不可判定.
归约: 将求问题B的解转化为求问题A的解.
若A有解, 则B有解.
即 若B无解, 则A无解.
归约过程
如何证明“若A可判定, 则B可判定”
根据A的判定器R, 构造B的判定器:
一
般
归
约
映
射
归
约
输入w
转换
R
输入w
转换
f(w)
Ac/Rej
转换
Ac/Rej
f(w)
R
w*, wB  f(w)A.
Ac/Rej
可计算函数与映射归约
定义 称函数f:**是一个可计算函数,
若有某判定器M使得,
在输入w上, M停机时, 带上串为f(w).
整数上所有通常的算术运算都是可计算函数.
定义 称语言A可以映射归约到语言B,
如果存在可计算函数f:**使得,
w*, wA  f(w)B.
记做 A m B . 称映射f为A到B的归约.
5/93
应用映射归约的基本原理
定义: 称AmB, 若有可计算函数f:**使得,
w*, wA  f(w)B.
定理: 若 A m B 且 B可判定, 则 A可判定.
证明:设R判定B, f是A到B归约,令T如右图, 即
T=“对输入w: 1) 计算f(w). 2) 在f(w)上运行M.
3) 若R接受,则接受; 若R拒绝, 则拒绝.”
f可计算 + R是判定器  T是判定器
w*, wA  f(w)B  T接受w
wA  f(w)B  T拒绝w, L(T)=A.
推论: 若 AmB 且 A不可判定, 则 B不可判定.
w
f(w)
T
R
Ac/Rej
6/93
ATM到HALTTM的一般归约
HALTTM={<M,w>|M是一个TM,且对输入w停机}
目标:若HALTTM可判定, 则ATM可判定. (方法?)
若HALTTM有判定器R, 则如下S判定ATM ,
S=“对输入<M,w>,M是TM,w是串:
1) 在<M,w>上运行R.
2) 若R拒绝,则拒绝;
3) 若R接受,则在w上模拟M,直到它停机.
4) 若M接受,则接受;若M拒绝,则拒绝.”
推论: HALTTM不可判定.
7/93
ATM到HALTTM的映射归约
• 对M,w, 构造映射g(<M,w>)=<FM,w>, 其中
FM = “对于输入x,
1) 在x上运行M.
2) 若M接受, 则接受;若M拒绝, 则一直左移.”
• M,w, <M,w>ATM  g(<M,w>)HALTTM.
• 若HALTTM有判定器H, 则下面的S判定ATM.
S = “对输入<M,w>, 1) 计算g(<M,w>).
2) 在g(<M,w>)上运行H.
3) 若H接受, 则接受; 若H拒绝, 则拒绝.”
8/93
可计算函数举例1
设M是图灵机,
FM=“对于输入x,
1) 在x上运行M.
2) 若M接受, 则接受;
若M拒绝, 则左移.”
T=“对输入<M,w>,
1) 构造<FM>.
2) 输出<FM,w>.”
• f1(<M,w>) = <FM,w> 是可计算函数.
• M,w, <M,w>ATM  f1(<M,w>)HALTTM.
• ATM m HALTTM .
9/93
ATM到ETM的一般归约
ETM = {<M>|M是一个TM,且L(M)=}
目标:若ETM可判定, 则ATM可判定. 方法?
若ETM有判定器R, 则如下S判定ATM ,
S=“对输入<M,w>,
1) 构造<AM,w> (只是写下一个字符串),
AM,w=‘对输入x, a)若xw,则拒绝; b)否则输出M(w).’
2) 在输入<AM,w>上运行R.
3) 如果R接受,则拒绝;如果R拒绝,则接受.”
推论: ETM不可判定.
10/93
AM,w的特点
将串<M,w>对应到串<AM,w>, 记为f2(<M,w>)
AM,w=“对于输入x,
1)如果xw,则拒绝.
2)如果x=w,则在w上运行M.若M接受,则接受.”
{w}, 若M接受w;
L(AM,w)=
, 若M不接受w.
M,w, <M,w>ATM  f(<M,w>)ETM
11/93
可计算函数举例2
设M是图灵机, w是串.
AM,w=“对于输入x,
1)如果xw,则拒绝.
2)如果x=w,则在x上运行M.
若M接受, 则接受.”
F=“对输入<M,w>,
1) 构造<AM,w>.
2) 输出<AM,w>.”
• f2(<M,w>) = <AM,w> 是可计算函数.
• M,w, <M,w>ATM  f2(<M,w>)ETM.
• ATM m ETMc .
12/93
可计算函数举例3
设M是图灵机, w是串.
RM,w=“对于输入x,
1) 若x=0n1n对某n>0, 则接受.
2) 在w上运行M. 若M接受w, 则接受x.”
• f3(<M,w>)=<RM,w>是可计算函数.
• L(RM,w) =
*
(正则) , 若M接受w;
= {0n1n|n0}(非正则), 若M不接受w.
• 令REG={<M>|M是TM, L(M)是正则语言}.
• M,w, <M,w>ATM  f3(<M,w>)REG.
13/93
映射归约
定义 称语言A可以映射归约到语言B,
如果存在可计算函数f:**使得,
w*, wA  f(w)B.
记做 A m B . 称映射f为A到B的归约.
ATM m HALTTM.
ATM m ETM的补 .
ATM m REG.
14/93
ATM m HALTTM
定义: 称AmB, 若有可计算函数f:**使得,
w*, wA  f(w)B.
设M是图灵机,
FM=“对于输入x,
1) 在x上运行M.
2) 若M接受, 则接受;若M拒绝, 则左移.”
• f1(<M,w>) = <FM,w> 是可计算函数.
• M,w, <M,w>ATM  f1(<M,w>)HALTTM.
15/93
ATM m ETM的补
定义: 称AmB, 若有可计算函数f:**使得,
w*, wA  f(w)B.
设M是图灵机, w是串.
AM,w=“对于输入x,
1)如果xw,则拒绝.
2)如果x=w,则在x上运行M. 若M接受, 则接受.”
• f2(<M,w>) = <AM,w> 是可计算函数.
• L(AM,w) = {w}, 若M接受w
= , 若M不接受w.
• M,w, <M,w>ATM  f2(<M,w>)ETM.
16/93
ATM m REG
定义: 称AmB, 若有可计算函数f:**使得,
w*, wA  f(w)B.
设M是图灵机, w是串.
RM,w=“对于输入x,
1) 若x=0n1n对某n>0, 则接受.
2) 在w上运行M. 若M接受w, 则接受x.”
• f3(<M,w>) = <RM,w> 是可计算函数.
• L(RM,w) =
*
(正则) , 若M接受w;
= {0n1n|n0}(非正则), 若M不接受w.
• M,w, <M,w>ATM  f3(<M,w>)REG.
17/93
映射归约应用举例
定理 若 A m B 且B可判定,则A可判定.
推论 若AmB且A不可判定, 则B不可判定.
ATM m HALTTM  HALTTM不可判定
ATM m REG
 REG 不可判定
ATM m ETM的补  ETM的补不可判定
 ETM 不可判定
18/93
线性界限自动机(LBA)
1. LBA是一种受到限制的图灵机.
2. 它不允许其读写头离开包含输入的带区域.
3. 如果此机器试图将读写头移出输入区域的两端,
则读写头就待在原地不动.
通过增大工作字母表
可使存储能力线性增长.
尽管LBA的存储受到限制,它仍然十分强大.
前面所构造的判定器都直接或间接是LBA.
存在不能被LBA判定的可判定语言(第9章).
19/93
LBA的格局总数
引理 对于LBA M, 若|Q|=q,||=g,输入串长为n,
则M的格局总数是qngn.
状态
…
w1
w2
w3
…
wn
不同字符串数为gn,
读写头有n个不同位置,
共有q种不同状态.
20/93
定理 ALBA是可判定的
ALBA={<M,w>|M是LBA,w是串,M接受w}
对比: ATM是不可判定的?
证明:
T = “对于输入<M,w>,其中M是LBA,w是串,
1) 在w上模拟M qngn步, 或者直到M停机.
2) 若M停机,则当M接受时接受,
当M拒绝时拒绝;
若M还没有停机, 则拒绝.”
21/93
接受计算历史
设M是一个TM, C1,C2,…,Ck是M上的格局序列,
称C1,C2,…,Ck是M在串w上的接受计算历史,若
a) C1是M在w上的起始格局(q0w).
b) Ci产生Ci+1(满足M的转移函数).
c) Ck是接受格局.
类似,可以定义M在w上的拒绝计算历史.
• 若M接受w, 则M在w上有唯一的接受计算历史;
• 若M在w上运行最终进入拒绝状态, 则…
• 若M在w上不停机, 则…
22/93
定理 ELBA不可判定
设M是TM, w是串, 如下构造LBA BM,w:
BM,w =“输入<C1,C2,…,Ck>,其中Ci是M上的格局,
1)检查C1,…,Ck是否是M在w上的接受历史.
2)若是, 则接受;否, 则拒绝.”
L(BM,w)=
{<M在w上的
接受计算历史>}, 若M接受w;
,
若M不接受w.
M,w, <M,w>ATM  <BM,w>ELBA.
ATM m ELBA的补  ELBA的补不可判定.
23/93
DFA CFG BM,w?
M,w, 可否构造DFA或CFG BM,w使得
L(BM,w)={<M在w上的接受历史>}, 若M接受w;
=

, 若M不接受w.
如果可以构造这样的BM,w, 则由类似推理可得:
ATM无判定器 EDFA和ECFG无判定器,矛盾.
所以不可能构造这样的DFA或CFG BM,w.
但是我们可以考虑一个相反的问题.
24/93
定理: ALLCFG不可判定
可以构造一个PDA PM,w, 使得
*-{<M在w上的
接受历史>}, 若M接受w;
L(PM,w)=
*,
若M不接受w.
ALLCFG= {<G>|G是CFG,L(G)=*}
M,w, <M,w>ATM  <PM,w>ALLCFG.
ATM m ALLCFG 的补  ALLCFG不可判定.
25/93
PDA PM,w的构造
PM,w接受 (1) 不是格局序列C1,C2,…,Ck的编码.
(2) C1不是起始格局. (3) Ck不是一个接受格局.
(4) 某个Ci不产生Ci+1.
(4)的说明, 编码:#C1#C2R#C3#C4R#… #Ck#
执行方式:扫描,直到它非确定性地到达某个#后,
将Ci或CiR推入栈,再弹出与Ci+1R或Ci+1比较,
除了读写头附近位置外,它们应该相同,
读写头附近位置的更改应由M的转移函数决定.
如果发现不匹配, PM,w就接受.
26/93
m与 补运算
定理 若AmB且B图灵可识别,
则A图灵可识别.
其证明与可判定性类似,只是将M,N改为识别器.
推论 若AmB且A非图灵可识别,
则B非图灵可识别.
• AmB  AcmBc.
• (ATM)c非图灵可识别
 ATM m B  Bc非图灵可识别
ATM m Bc  B 非图灵可识别
27/93
EQTM非图灵可识别
定理 EQTM既非图灵可识别,也非补图灵可识别.
证明: 一. ATMm(EQTM)c,即EQTM非图灵可识别
F=“对于输入<M,w>,其中M是TM,w是串:
1)构造下列两个机器Ml和M2.
M1 = ‘对于任何输入: a.拒绝.’
M2 = ‘对于任何输入:
a. 在w上运行M, 若M接受,则接受.’
2)输出<M1,M2>.”
M,w, <M,w>ATM  <M1,M2>EQTM.
28/93
(EQTM)c非图灵可识别
二. ATMmEQTM, 即(EQTM)c非图灵可识别
F=“对于输入<M,w>,其中M是TM,w是串:
1)构造下列两个机器Ml和M2.
M1^ = ‘对于任何输入: a.接受.’
M2 = ‘对于任何输入:
a.在w上运行M, 若M接受, 则接受.’
2)输出<M1^,M2>.”
M,w, <M,w>ATM  <M1^,M2>EQTM.
29/93
主要内容
6.1 递归定理
6.1.1 自引用
6.1.2 递归定理的术语
6.1.3 应用
6.2 逻辑理论的可判定性
6.2.1 一个可判定的理论
6.2.2 一个不可判定的理论
6.3 图灵可归约性
6.4 信息的定义
6.4.1 极小长度的描述
6.4.2 定义的优化
6.4.3 不可压缩的串和随机性
30
递归定理
Undecidability –至此, 我们已经充分使用了接受问
题的不可判定性
We proved the undecidability of ATM by making
explicit the self-reference paradox:
采用了自引用,类似悖论的技巧
S = { <M> | TMs M that do not accept <M> }
关键技术
Self-Reference: P accepts <P>.
2015/4/13
31/93
Self-Reference
What happens if a computer program M tries to
answer questions about itself <M>?
程序自己分析自己的源程序会出什么结果?
Sometimes this is perfectly okay:
- How big is <M>?
- Is <M> a proper TM?
<M>是M的描述
(可理解为源程
序或编码
Other questions lead to paradoxes:有时似是而非Does <M> halt or not?如停机
- Is there a smaller program M’ that is equivalent?
2015/4/13
32/93
Avoiding Paradoxes?
在这里调用
自己
递归
paradox 是错误理
解的问题。
自引用的 TM 不能
考虑自己的编码?
Question: How is
it possible to have
the structure:
1) Bla-bla-bla;(平凡)
M=
2) Look at M = ;
3) More Bla-bla-bla;
4) Do something weird(奇怪
动作)
1) Bla-bla-bla;
2) Look at M = ;
M =3) More Bla-bla-bla;
4) Do something weird
M=
1) Bla-bla-bla;
2) Look at M = ;
3) More Bla-bla-bla;
4) Do something weird
2015/4/13
How can we have
the complete
description of M
inside M itself?
33/81
递归 的 第一种意义, 自己调用自己
 从前有个庙,庙里有个老和尚,老和尚给小和尚讲故事,讲
的故事是:”从前有个庙,庙里有个老和尚,老和尚给小和
尚讲故事,讲的故事是……”
Void story ( )
{
printf(“从前有个庙,庙里有个老和尚,老和尚给小和尚讲故事,讲的
故事是:”);
story( );
}
毛病,没有递归深度控制,栈溢出时死机
镜子里面照镜子,电影里面放电影,故事里面讲故事
更新奇的是:
2015/4/13
34/81
递归的 第一种意义, 自己调用自己
 从前有个庙,庙里有个老和尚,老和尚给小和尚讲故事,讲
的故事是:”从前有个庙,庙里有个老和尚,老和尚给小和
尚讲故事,讲的故事是……”
Void story ( )
{
printf(“从前有个庙,庙里有个老和尚,老和尚给小和尚讲故事,讲的
故事是:\r\n”);
story( );
}
毛病,没有递归深度控制,栈溢出时死机
镜子里面照镜子,电影里面放电影,故事里面讲故事
更新奇的是:
2015/4/13
35/81
递归 自己调用自己
 从前有个庙,庙里有个老和尚,老和尚给小和尚讲故事,讲
的故事是:”从前有个庙,庙里有个老和尚,老和尚给小和
尚讲故事,讲的故事是……”
Void story ( )
{
printf(“从前有个庙,庙里有个老和尚,老和尚给小和尚讲故事,讲的
故事是:\r\n”);
story( );
}
毛病,没有递归深度控制,栈溢出时死机
镜子里面照镜子,电影里面放电影,故事里面讲故事,庄生梦
蝶,梦里面做梦,更新奇的是:
2015/4/13
36/81
递归 自己调用自己
 庄生梦蝶 的IT新分析
 庄子梦中化为蝴蝶, 梦醒之后糊蝶复化为庄周。庄子问道,到
底是蝴蝶化为庄周, 还是庄周化为蝴蝶. (还在做梦)
 如果是:庄子梦中化为蝴蝶,蝴蝶做梦化为庄子,
 则是 梦里面做梦,递归梦
2015/4/13
37/81
递归 的另一层意义: 自我繁殖
例1 Nitice ( )
{ Printf(“通知:今天下午开会 请互相转告”);}
要点: 执行程序 必须 复制程序,
例2 传销式信件( )
{ 收到本邮件的人必须给 你的上家 寄信片;//传销获利;
必须复制10份 散发给你的朋友;
否则….
} ( 效果:浪费大量网络资源)
例3 计算机病毒
2015/4/13
38/81
M Printing M
打印自己的源程序
问题:可自我描述(繁殖)TM是否合法的图灵机?
可自我描述(繁殖)程序是否合法的程序?
本节拟证明,
满足一定规范的 自调用或自描述程序 是可以
写 出来的,是合法的,
从数学本质上看,是正确的,
不是诡辩,不是悖论。
而且用途广泛
第一个实现递归的语言是什么语言? Algol60?
在这以前, 理论上已经描述递归是可能的。实现中
又发现了用栈的技巧等等
2015/4/13
39/81
M Printing M
打印自己源程序
Attempt to describe a program that prints itself:
M = print(“print(“print(“print …
The Droste effect forces M to be infinite.
首递归
不可行
见不到输
出..
打印下面语句两个副本,第二次加引号:
consider the following high-level program:
print_twice_2nd_time_with_(“_“):
(“print_twice_2nd_time_with_(“_“):”)
… So it is possible to have such a TM M.
The Recursion Theorem makes this explicit.
2015/4/13
40/81
M Printing M
打印自己源程序
错误方法:Attempt to describe a program that
prints itself:
M = print(“print(“print(“print …
The Droste effect forces M to be infinite.
正确方法 打印下面语句两个副本,第二次加引号:
consider the following high-level program:
print_twice_2nd_time_with_(“_“):
(“print_twice_2nd_time_with_(“_“):”)
… So it is possible to have such a TM M.
The Recursion Theorem makes this explicit.
2015/4/13
41/81
The Recursion Theorem
为定理6.2(递归的可行性)作准备
The recursion theorem in CS shows how we can
deal with the Droste/self-reference effect for TMs.
递归的可行性
The key idea is to split the TM into two parts:
1) a string that describes 2nd part of program
获得描述自己的串 (稍难)
2) a program that prints the string ‘smart’
打印指定的串 (不难)
How to construct a program <SELF> that
prints itself…且看 下面细细道来
2015/4/13
42/81
The Recursion Theorem
为定理6.2(递归的可行性)作准备
The recursion theorem in CS shows how we can
deal with the Droste/self-reference effect for TMs.
递归的可行性
The key idea is to split the TM into two parts:
1) a string that describes 2nd part of program
获得自己的第二部分源程序 串 (稍难)
2) a program that prints the string ‘smart’
打印一个任意的指定的串 (不难)
How to construct a program <SELF> that
prints itself…且看 下面细细道来
2015/4/13
43/81
A Simple Lemma
Lemma 6.1 that prints w.
The function q(w) = <Pw> is TM computable.
打印指定串的程序的源程序(解释执行的)是 可以用程
序产生的
证明 程序 Pw(x) {x[0]=0; printf(w);} //总是打印外部串W
q:Σ* Σ*, 使得 q(w)=“ Pw(x) {x[0]=0; printf(w);}”
造计算q的TM Q (C程序)如下:
Q(w )
{ char *p=q(w);//函数值是一个源程序串的指针
printf(p); }
}
下页是书上的证明
2015/4/13
44/81
A Simple Lemma cp137
Lemma 6.1 : Let w be an input string, and let Pw
be a TM that prints w.
The function q(w) = <Pw> is TM computable.
打印指定串的程序的源程序是 可以用程序产生的
打印过
程
Pw(x)
的源程
序
证明 程序 Pw(x) {x[0]=0; printf(w);} //总是打印外部串W
q:Σ* Σ*, 使得 q(w)=“ Pw(x) {x[0]=0; printf(w);}”
造计算q的TM Q (C程序)如下:
Q(w )
{ char *p=q(w); //函数值是指向打印过程源程序的指针
printf(p); }
}
下页是书上的证明
2015/4/13
45/81
A Simple Lemma ,
cp137 书上的证明
Lemma 6.1 : Let w be an input string, and let Pw
be a TM that prints w.
The function q(w) = <Pw> is TM computable.
打印指定串的程序的源程序是 可以用程序产生的
Proof: Consider the TM (on input w):
1) Construct TM Pw:
1) erase input
2) write w and halt
2) Output <Pw>
2015/4/13
46/81
利用引理,造一个能打印自己源程序的程序
The Program <SELF> = <AB> ep201 cp137
输入TM , 输出:源程序串
用C语言描述
库函数 B(<M>)
{ Get_source_as( <M>,P<M>);//反编译
printf(“%s%s”,P<M>,<M>);
}
main(char argv[] , int argc ) // 输入w 为 argv[1]=w
{ char *A=<B>;//B的源程序,如用argv[0]即EXE名,复制串
B(<A>);
} 下页是书上的证明
2015/4/13
47/81
§6.1.1 自引用
本节从制造一个图灵机开始,此图灵机忽略输入,且打印出
它自己的描述。称之为SELF。
引理
6.1
存在可计算函数 q: *  * ,对任意串w, q(w)是
图灵机Pw的描述,Pw打印出w,然后停机。
证明: 一旦懂得这个引理的叙述,证明就容易。显然,可以任取一个字符串
w,然后从它构造一个图灵机,使得此图灵机将w内装在一个表中,这样,当
此图灵机开始运行后,它只要简单输出w即可。下列TM Q 计算q(w):
Q = “对于输入串w:
1)构造下列图灵机Pw:
Pw = “对于任意输入:
a)抹去输入。
b)在带上写下w
c)停机。”
2)输出< Pw >。”
48
§6.1.1 自引用
A
B
(=P<B>)
SELF的控制器
1. SELF有两个部分,A,B。将A和B
想象成两个分离过程,它们一起组
成SELF.我们希望SELF打印出
<SELF>=<AB>
2. A任务是打印出B的描述。B的任务
是打印出A的描述。
…
图6-1 SELF的示意图,一个打印它自己的描述的TM
49
§6.1.1 自引用
SELF的构造
1. A部分首先运行,再根据完成情况将控制传给B。A的
任务是打印出B的描述。B的任务是打印出A的描述。
2. 先构造A部分
3. 使用机器P<B>来定义A,其中P<B>用函数q在<B>处的
值q(<B>)描述,这样,A部分是一个打印出<B>的图
灵机。A的描述依赖于是否已经有了B的描述,所以在
构造出B之前,无法完成A的描述。
4. 对于B部分:从A产生的输出来计算A、
5. 如果B能够得到<B>,就能应用q来得到<A>。但B如
何得到<B>?当A结束时,它被留在带上。所以B只要
看着带子就能得到<B>。计算q(<B>)=<A>之后,B将
之加到带的前面。然后将A和B组合成一个机器并在带
上写下它的描述<AB>=<SELF>。
50
§6.1.1 自引用
SELF的构造
1. A=P<B>,且
2. B=“对于输入<M>,其中M是一个TM的一部分:
1)计算q(<M>)
2)将其结果与<M>结合来组成一个完整的TM描
述
3)打印这个描述,然后停机”
51
§6.1.1 自引用
定理
6.2
(递归定理)设T是计算函数 t: * × *  * 的一
个图灵机。则存在计算函数r: *  * 的一个图灵机
R,使得对每一个w,有:
r(w) = t(<R>, w)
制造一个能得到自己的描述、并用它计算的TM。
证明:此证明与SELF的构造类似,分三部分A、B和T来构造图灵机R,
其中T由定理的叙述给出。图6-2是R的图示
A
(=P<BT>)
B
T
…
R的控制器
图6-2 R的图示
52
§6.1.1 自引用
A是由q(<BT>)描述的图灵机P<BT>。为了保持输入w,
我们重新设计q,使得P<BT>印出任何预先在带上存在的串的
输出。在A运行之后,带上包含w<BT>。
B还是如下的过程:检查带子,并将q应用于带内容。
结果是<A>。然后B将A、B和T组成一个图灵机并得到它的
描述<ABT> = <R>。最后,描述的编码和w结合,在带上
形成结果串<R, w>,并将控制传给T。
53
§6.1.2 递归定理的术语
递归定理指出TM可以输出自己的描述,然后还能用它继
续进行计算。
在设计图灵机算法时,可用如下方式使用递归定理。如
果你正在设计一个图灵机M,则可以在M的算法的非形式描
述中包含如下的短语:“得到自己的描述<M>”。一旦得到
自己的描述,M就能像使用其他已计算出来的值一样使用
这个描述。
例如,M 可以简单打印出<M>,就像前面在TM SELF遇
到的一样;或者计算<M>中的状态数;或模拟<M>。为了
说明这个方法,用递归定理来描述机器SELF:
SELF = “对于任意输入:
1)利用递归定理得到它自己的描述<SELF>;
2)打印<SELF>。”
54
§6.1.2 递归定理的术语
递归定理展示了怎样实现“获得自己的描述”
的构造。为了产生机器SELF,首先写下以下机器T
:
T = “对于输入<M, w>:
1)打印<M>并停机。”
TM T得到TM M和它输入的串w的描述,它打印了
M的描述<M>。然后递归定理展示怎样获得在输入
w上的TM R,像T在输入<R, w>上那样操作。因此
R打印出R的描述,恰好是机器SELF所需要得到的
。
55
§6.1.3 应用
定理
6.3
ATM是不可判定的。
证明:为了得到矛盾,假设图灵机H可判定ATM。构造下
列图灵机B。
B = “对于输入w:
1)由递归定理得到自己的一个描述<B>。
2)在输入<B, w>上运行H。
3)得到与H相反的结果,即:如果H拒绝,则接受;如
果H接受,则拒绝。”
对输入w,B的结果与H相反,所以H不可能判定ATM。证毕。
56
§6.1.3 应用
定义
6.4
如果M是一个图灵机,则M的描述 <M> 的长度是
描述M的串中所含符号的个数。如果没有与M等价
的图灵机有更短的描述,则称M是极小的。令
MINTM={<M>| M是一个极小TM}
57
§6.1.3 应用
定理
6.5
MINTM不是图灵可识别的。
证明:假设TM E枚举MlNTM,然后试图来得到矛盾。构造下列TM C。
C = “ 对于输入w:
1)由递归定理得到它自己的一个描述<C>。
2)运行枚举器E,直到一个比C的描述更长的机器D出现。
3)在输入w上模拟D。
因为MINTM是无限的,故E的序列中必定含有TM,其描述比C的描述
更长。因此,C的第二步最终将在某个TM D上终止,且D比C更长。然后
C就模拟D,且与之等价。因为C比D短且与之等价,故D不可能是极小的,
但D又在E产生的序列中出现,这样就得到了矛盾。
58
§6.1.3 应用
定理
6.6
设 t: *  * 是一个可计算函数,则存在一个图灵
机F,使得t(<F>)描述一个与F等价的图灵机。这里
假设如果串不是一个正确的图灵机编码,那么它描
述的图灵机立即拒绝。
证明: 设F是下列图灵机。
F = “ 对于输入w:
1)由递归定理得到它自己的一个描述<F>。
2)计算t(<F>)得到一个TM G的描述。
3)在输入w上模拟G。”
显然,<F>和t(<F>) = <G>描述了等价的图灵机,因为F模拟G。
59
主要内容
6.1 递归定理
6.1.1 自引用
6.1.2 递归定理的术语
6.1.3 应用
6.2 逻辑理论的可判定性
6.2.1 一个可判定的理论
6.2.2 一个不可判定的理论
6.3 图灵可归约性
6.4 信息的定义
6.4.1 极小长度的描述
6.4.2 定义的优化
6.4.3 不可压缩的串和随机性
60
§6.2 逻辑理论的可判定性
首先需要建立一个精确的语言来将这些问题形式化。我
们的要求是能够考虑如下数学命题:
1 ) q  p  x, y[ p  q  ( x, y  1  xy  p)]
2) a, b, c, n[(a, b, c  0  n  2)  a n  b n  c n ]
3) q  p  x, y[ p  q  ( x, y  1  ( xy  p  xy  p  2))]
命题1称,有无限多个素数存在,在大约2300年以前的欧
几里德时代,就已知道这个命题是真的。
命题2称为费马大定理,这个命题几年前由安德鲁·威尔士
(Andrew Wiles)证明为真。
命题3称,有无限多个素数对存在,这被称为孪生素数猜
想(twin prime conjecture)。它到现在还未被解决。
61
§6.2 逻辑理论的可判定性
为了将之进一步精确化,现在描述这个语言的字母表:
{, , , (, ), , x, , R1, , Rk }
符号∧,∨, 称为布尔运算;“(”和“)”是括号;符号 和
是量词;符号x用来代表变元;符号R1,… ,Rk称为关
系。
没有自由变元的公式称为句子或命题。
论域:覆盖变元可能的取值;
将关系符号指定为确定的关系。
模型:论域连同关系到关系符号的指派一起称为模型。
62
§6.2 逻辑理论的可判定性
例6.7 在下列公式中,只有最后一个是句子:
1 ) R1 ( x1 )  R2 ( x1 , x2 , x3 )
2) x1[ R1 ( x1 )  R2 ( x1 , x2 , x3 )]
3) x1 x2 x 2 [ R1 ( x1 )  R2 ( x1 , x2 , x3 )]
例6.8 设∮是句子  x  y [ R1 ( x, y) R1 ( y, x)],模型
M1 = (N, ≤)是如下的模型:它的论域是自然数集,它将“小
于或等于”关系分配给符号R1。显然∮在M1中为真,因为对
于任意两个自然数a和b,a ≤ b和b ≤ a必有一个成立。但如
果M1将“小于”关系(而不是“小于或等于”关系)指派给
R1,则∮将不真,因为当x和y相等时,它不再成立。
63
§6.2 逻辑理论的可判定性
例6.9 设M2是如下的模型:它的论域是是实数集R,且讲关系
PLUS指派给R1,其中:只要当 a + b = c 时 PLUS(a, b, c)
=TURE。则M2是    y  x [ R1 ( x, x, y)
] 的一个模型。但如果
用N代替R作为M2的论域,则此句子为假。
论域连同关系到关系符合的指派一起称为模型。
如果M是一个模型,这个模型语言中所有真句子的集
合称为M的理论系统,简称理论,记为Th(M)。
64
§6.2.1 一个可判定性的理论
定理
6.10
Th(N, +)是可判定的。
证明思路:对输入为(N,+)的语言中的句子∮ ,检查其在模型中是否
为真。设 ∮=Q1x1Q2x2…Qlxl [ψ]
•其中, Q1、Q2、…Ql表示量词 、 , ψ是无量词的公式,且含有变
元x1、x2…、xl 。对于0-l的每一个i,令公式∮ i 为
∮i =Qi+1xi+1Qi+2xi+2…Qi+lxi+l [ψ]
•这样, ∮0 = ∮,且∮l = ψ。
•公式∮i 有i个自由变元,对于a1、…、ai∈N,在∮i中用a1、…、ai替换
变元x1、…、xi ,得到的句子记为:
∮i
=( a1、…、ai )
•对于从0到l的每个i,算法构造了一个有穷自动机Ai,它识别如下串的集合:这
些串表示使为真的数的i元组。算法先直接构造Al,然后对从l向下到1的每个i,
用Ai构造Ai-1.最后,一旦得到A0,算法就检查A0是否接受空串。如果接受,则为
65
真,算法也就接受。
§6.2.1 一个可判定性的理论
定理
6.10
Th(N, +)是可判定的。
证明:对i > 0,定义字母表
 0  0 0 0
       
       
 i  0  , 0  , 1  , 1  ,

  0  1   0  1 
1

, 
1

1






则i = 包含了所有0和1构成的i元列向量。 i上的每个串表示i的二进
制整数(沿行读)。令0 = { [ ] },其中[ ]是一个符号。
现在介绍判定Th(N,+)的算法。对于输入∮ (其中∮为句子),算法如
下运行:写下∮,且对从0到l的每个i,如同在证明思路中介绍的那样定
义∮i 。再对每个这样的i,由∮i构造有穷自动机Ai,使得只要∮i(a1,
…,ai)为真,它就接受i*上对应于i元组a1, …, ai的串。Ai的构造如下: 66
§6.2.1 一个可判定性的理论
为构造第一个机器Al,注意到∮l= 是原子公式的布尔组合。在
Th(N,+)的语言中,原子公式只有单个加法。对每个这样的单个加法,
可以构造—个有穷自动机来计算这样的单个加法所对应的关系,然后将
这些有穷自动机组合起来,就能给出自动机Al。这样做要涉及正则语言

类对于交、并和补的封闭性,以计算原子公式的布尔组合。
接下来说明怎么由Ai+1来构造Ai。如果∮I = xi+1∮i+1,则构造Ai使得它
的运行几乎与Ai+1一样,区别在于Ai非确定地猜ai+1的值,而不是将它作
为输入的一部分而接受。
更精确地说,对于Ai+1的每个状态, Ai包含一个与之对应的状态;
且Ai还包含一个新的起始状态。每当Ai读下列符号时,
 b1 
 
 
bi 1 
 
 bi 
67
§6.2.1 一个可判定性的理论
这里每个bi∈{0,1}是数ai的某一位,它非确定地猜z∈{0,1},且在下列输
入符号上模拟Ai+1。
 b1 
 
 
bi 1 
 
 bi 
 z 
最初,Ai非确定地猜测ai+1的引导位,这些引导位对应于a1到ai中隐藏的
引导0。猜测的方法是:从它新的起始状态到所有状态非确定性地进行
分叉,这些状态是Ai+1以i+1中下列符号的串为输入、从它的开始状态所
能到达的状态。
68
§6.2.1 一个可判定性的理论
 0  0 
    
    
,


 0  0 
  0  1  
显然,如果存在ai+1,使得Ai+1接受(a1,…,ai+1),则Ai接受(a1,…,ai) 。
如果 i  xi 1i 1 ,它等价于   xi 1i 1 。首先构造识别语言Ai+1的
补的有穷自动机,然后应用上述对于  量词的构造,最后再一次应用补来
得到Ai。
有穷自动机A0接收某个输入,当且仅当∮0为真。所以算法的最后步骤
是检查A0是否接收。如果是,则∮为真,且算法接受它;否则,就拒绝。
69
§6.2.2 一个不可判定性的理论
定理
6.11
Th(N, +, ×)是不可判定的。
引理
6.12
设M是一个图灵机,w是一个串:从M和w能构造
(N, +, ×)的语言中的公式∮M,w,使得它只包含单个
自由变元x,且句子  x∮M,w 为真当且仅当M接受w。
70
§6.2.2 一个不可判定性的理论
定理
6.13
Th(N, +, ×)中可证命题的集合是图灵可识别的。
证明:如果∮是可证的,则下列算法P接受其输入∮ 。算法P使用在可证性
性质1中所说的证明检查器,检查每个可能成为∮的证明的候选串。如果发
现一个侯选串正是一个证明,则接受它。
71
§6.2.2 一个不可判定性的理论
定理
6.14
Th(N, +, ×)中存在不可证的真命题。
证明:用反证法。假设所有真命题都是可证的,利用这个假设来
构造判定命题是否为真的算法D,与定理6.11矛盾。
 并行地运行定
对于输入∮,算法D如下运行:在输入∮和 ∮上
理6.13的证明中给出的算法P。这两个命题总有一个为真,根据假设,
总有一个是可证的。因而P在其中一个输入上停机。根据可证性性质2,
如果∮是可证的,则∮为真;如果 ∮
是可证的,则∮为假。所以算
法D能判定∮的真假性。
72
§6.2.2 一个不可判定性的理论
定理
6.15
本定理的证明中描述的句子是unprovable 不可证的。
证明:设S是如下运行的TM。
S=“对于任意的输入:
1)出递归定理得到它自己的描述<S>。
2)用引理6.12构造句子  c[S ,0]。
3)在输入  上运行定理6.13给出的算法P。
4)如果上一步接受,就接受;如果它停机且拒绝,则拒绝。”
 为真,当是仅当S
设unprovable 是算法S的第二步所描述的句子 。
不接受0(串0是随意选择的)。
如果s能找到 unprovable 的一个证明,S就接受0,这个句子也就因
之为假。一个假句子是不能被证明的,所以这种情形不可能发生。剩下
的唯一可能性是S不能找到unprovable 的证明,因而S不接受0。但我们已
宣布过 unprovable 为真。
73
主要内容
6.1 递归定理
6.1.1 自引用
6.1.2 递归定理的术语
6.1.3 应用
6.2 逻辑理论的可判定性
6.2.1 一个可判定的理论
6.2.2 一个不可判定的理论
6.3 图灵可归约性
6.4 信息的定义
6.4.1 极小长度的描述
6.4.2 定义的优化
6.4.3 不可压缩的串和随机性
74
§6.3 图灵可归约性
定义
6.16
语言B的一个谕示(oracle)是一个能够报告某个串
w是否为B的成员的外部装置。一个谕示图灵机是一
种修改过的图灵机,它有询问一个谕示的额外能力。
记MB为对语言B有谕示的谕示图灵机。
75
§6.3 图灵可归约性
例6.17考虑ATM的一个谕示。带ATM的谕示的一个谕示图灵机比普通的图
灵机能判定更多的语言,这样的图灵机能够判定ATM自身(显然成立),它
只要对输入询问它的谕示即可。它也能判定ETM,即TM的空性质检查问
题,用的是下面称TATM的过程:
TATM = “对于输入<M>,其中M是一个TM:
1)构造下面TM N:
N = “对任意输入:
a)对*中的所有串并行运行M。
b)如果M接受它们中的任何一个串,则接受。”
2)询问谕示以确定<N,0>∈ ATM是否成立
3)如果谕示回答“不”,则接受;如果回答“是”,则拒绝。”
如果M的语言不空,则N将接受每个输入,特别地,将接受0。从而谕
示将回答“是”,且TATM将拒绝。相反地,如果M的语言是空的,则TATM
将接受。所以TATM判定ETM。我们说ETM是可判定归约到ATM 。
76
§6.3 图灵可归约性
定义
6.18
语言A图灵可归约到语言B,如果A相对于B是可判
定的,记作入A≤TB。
77
§6.3 图灵可归约性
定理
6.19
如果A≤TB且B是可判定的,则A也是可判定的。
证明:如果B是可判定的,则可以用判定B的实际过程来替换B的谕示。
这样就用判定A的普通图灵机取代了判定A的谕示图灵机。
图灵可归约性是映射可归约性的一个推广。如果A≤mB,则A≤TB,
因为此映射归约可以被用来给出一个相对于B、判定A的谕示图灵机。
带ATM的谕示的谕示图灵机十分强大。它能解许多不能由普通图灵机
解的问题。但即使是这样一个强大的图灵机,也不能判定所有语言。
78
主要内容
6.1 递归定理
6.1.1 自引用
6.1.2 递归定理的术语
6.1.3 应用
6.2 逻辑理论的可判定性
6.2.1 一个可判定的理论
6.2.2 一个不可判定的理论
6.3 图灵可归约性
6.4 信息的定义
6.4.1 极小长度的描述
6.4.2 定义的优化
6.4.3 不可压缩的串和随机性
79
§6.4 信息的定义
例子:
A=01010101010101010101
B=11101101111000001101
直观上:A包含信息较少,B包含了更多的信息。
信息定义思想:包含在一个对象中的信息量,将被定
义为这个对象的最小表示或描述的大小。
对象的描述:指这个对象精确且无歧义的特征,使得
单从这个特征,就能重新产生那个对象。
80
§6.4 信息的定义
例子:
A=01010101010101010101
B=11101101111000001101
定义
6.20
设x是二进制数的串,x的极小描述,记为d(x),是最
短的串<M,w>,其中:TM M在输入w上停机时,x
在带上。且如果有多个这样的串存在,则在其中选择
字典序下的第一个串。x的描述复杂性记为K(x),是
K(x) = |d(x)|
换句话说,K(x)是x的极小描述的长度。K(x)的
定义是为了刻画串x中的信息量这个直观概念的。
81
§6.4 信息的定义
定理
6.21
c x [ K ( x)  | x |  c]
证明:为证明此定理给出的K(x)的上界,只需给出一个不长于
这个上界的x的描述。x的极小描述可能比这个描述更短,但
不会更长。
考虑串x的下列描述。设M是这样一个图灵机:它一启动
就停机。此图灵机计算恒等函数——输出与输入是一样的函
数。x的一个描述是<M>x。
令c是<M>的长度,就可完成证明。
82
§6.4 信息的定义
定理
6.22
c x [ K ( xx)  K ( x)  c]
证明:考虑下列图灵机M,它有形如<N, w>的输入,其中
N是一个图灵机,w是它的一个输入。
M = “对于输入<N, w>,其中N是一个图灵机,w是一个串
:
1)在w上运行N直到停止,且产生输出串s
2)输出串ss。”
xx的一个描述是<M>d(x)。回忆一下,d(x)是x的最小描
述,这个描述的长度是|<M>| + d(x),即为c + K(x),其中c是
<M>的长度。
83
§6.4 信息的定义
定理
6.22
c x [ K ( xx)  K ( x)  c]
下面检查串x和y的连接xy的描述复杂性与它们的单个复杂
性间的关系。定理6.21可能会使我们相信,连接的复杂性
最多是单个复杂性的和(加上一个固定的常量),但实际
上组合两个描述的代价导致了一个更大的上界,如下面的
定理所描述。
84
§6.4 信息的定义
定理
6.23
c x, y[ K ( xy)  2K ( x)  K ( y)  c]
证明:构造TM M,它将输入w拆成两个单独的描述。在第
二个描述d(y)出现以前,第一个描述d(x)的所有位都被写两遍且
以01结束,如图6-3所示。
在得到两个描述之后,它们就开始运行,得到串x与y,及
产生xy。
显然,xy的这个描述的长度是x的复杂性的两倍加上y的复
杂性,再加上描述M的固定常量c。此和为
判断x结束
2K(x) + K(y) +c
的代价
这就完成了证明。
85
§6.4 信息的定义
定理 对任何描述语言p,存在一个只与p有关的常量c,使得
6.24
x[K ( x)  K ( x)  c]
p
证明:对于输入语言p,考虑下列图灵机M:
M = “对于输入w:
1)输出p(w)。”
则<M>dp(x)是x的一个描述,它的长度至多比
Kp(x)大一个固定常量,此常量为<M>的长度。
86
§6.4 信息的定义
设x是一个串,如果
定义
6.25
K ( x)  | x |  c
则称x是c可压缩的(c-compressible)。如果x不是c可
压缩的,则称x是不可压缩c的。如果x是不可压缩1的
则称x是不可压缩的。
87
§6.4 信息的定义
定理
6.26
对于每个长度,都存在不可压缩的串。
证明:长度为n的二进制数串的个数是2n,每个描述都是一
个非空的二进制数串,故长度小于n的描述的个数最多为长
度小于等于n-1的串的个数之和,即:

2i  1  2  4  8    2n1  2n  1
0i n 1
所以较短描述的个数小于长度为n的串的个数。因此,至少
有一个长度为n的串是不可压缩的。
88
§6.4 信息的定义
推论
6.27
至少有2n - 2n-c+1 + 1个长度为n的串是不可压缩c的。
证明:如同定理6.26一样,最多有2n-c+1 - 1个长度为n的
串是c可压缩的。因为最多只有这么多个长度至多为n - c的
描述存在。剩下的2n – (2n-c+1 – 1)个都是不可压缩c的。
89
§6.4 信息的定义
定理
6.28
设f是一个对几乎所有串成立的性质,则对任意b>0,
性质f只在有限多个不可压缩b的串上的值是FALSE。
证明:设M是下列算法:
M = “对于输入i,其中i是一个二进制整数:
1)在字典序下,找到使得f(s) = FALSE的第i个串s。
2)输出串s。”
可以用M来得到不具有性质f的串的更短描述,方法如下:设x是这样
的串,将所有不具有性质f的串排成一个序列,序列是按长度排序的,同一
长度的串按字典序排列。令ix是x在这个序列中的位置或序标(index),则
<M, ix >是f的一个描述,这个描述的长度为|ix| + c,其中c是<M>的长度。
因为没有性质f的串较少,故x的序标是小的,它的相应描述也是短的。
任取b>0。选择n,使得:在所有长度小于或等于n的串中,至多有
1/2b+c+1不具有性质f。所有足够大的n都满足这个条件,因为f 对几乎所有
90
§6.4 信息的定义
的串成立。令x是长度为n的无性质f的串,长度小于等于n的串有2n+1-1
个,因此,
n 1
2 1
ix  b  c 1  2n b c
2
从而|ix| ≤ n – b – c ,故<M, ix>的长度至多为(n – b – c)+c = n – b。这
意味着
K(x) ≤ n – b
这样,使得不具有性质f的每个足够长的x都是可压缩b的。因此,只有有
限多个不具性质f的串是不可压缩b的。证毕。
91
§6.4 信息的定义
定理
6.29
存在常量b,使得对每个串x,x的极小描述d(x)都是
不可压缩b的。
证明:考虑下列TM M:
M =“对于输入<R, y>,其中R是一个TM,y是一个串:
1)在y上运行R,且在它的输出不具有形式<S, z>时,拒绝。
2)在z上运行S,且将它的输出放在带上后停机。”
令b为|<M>| + 1,证明b满足本定理。如不然,则对某个串
x,d(x)是b可压缩的。从而
|d(d(x))|≤|d(x)| - b
但<M>d(d(x))是x的一个描述。它的长度至多为
|<M>| + |d(d(x))| ≤ (b - 1) +(|d(x)| - b) = |d(x)| - 1
x的这个描述比d(x)更短。这与后者的极小性矛盾。
92
作业
 6.7、6.12、6.15、6.23
93
Download