更改

第1,049行: 第1,049行:     
本系列文章是关于观察者的,然而在这第五章中,我们一直在谈自指,却丝毫没有观察者什么事。笔者认为自指与观察者有着非常深刻的联系,而且也正是从自指的领悟中慢慢体会到观察者的作用的。我们将会看到,如果要理解自指的深层含义,观察者是必须引入的一个因素。
 
本系列文章是关于观察者的,然而在这第五章中,我们一直在谈自指,却丝毫没有观察者什么事。笔者认为自指与观察者有着非常深刻的联系,而且也正是从自指的领悟中慢慢体会到观察者的作用的。我们将会看到,如果要理解自指的深层含义,观察者是必须引入的一个因素。
 +
    
正如第1章所谈到的,目前的主流科学仿佛是黑色的前景,而观察者则是隐藏在白色的背景中。那么自指就位于前景与背景之间的交界处,通过自指才能从前景走到背景,也只有通过自指才能用科学的方法让观察者真正耦合到系统中。
 
正如第1章所谈到的,目前的主流科学仿佛是黑色的前景,而观察者则是隐藏在白色的背景中。那么自指就位于前景与背景之间的交界处,通过自指才能从前景走到背景,也只有通过自指才能用科学的方法让观察者真正耦合到系统中。
 +
    
我将分两个层次论述这个问题。首先,我们将会看到,如果想完全理解自指的含义,就必须牵扯到系统之外的观察者作用;其次,我将试图从图灵停机问题出发,指出图灵机-观
 
我将分两个层次论述这个问题。首先,我们将会看到,如果想完全理解自指的含义,就必须牵扯到系统之外的观察者作用;其次,我将试图从图灵停机问题出发,指出图灵机-观
 
察者模型是如何将观察者作用真正地耦合到系统之中,并让它发挥普通计算机程序所不能发挥的作用的。
 
察者模型是如何将观察者作用真正地耦合到系统之中,并让它发挥普通计算机程序所不能发挥的作用的。
 +
    
====观察者藏于何处?====
 
====观察者藏于何处?====
第1,059行: 第1,062行:  
首先,在讨论自指语句,尤其是“把„„中的第一个字放在引号前面,其余的字放在引号后面„„”的时候,我曾经指出,这个句子中的动词可以使役读句子的观察者来对它进行
 
首先,在讨论自指语句,尤其是“把„„中的第一个字放在引号前面,其余的字放在引号后面„„”的时候,我曾经指出,这个句子中的动词可以使役读句子的观察者来对它进行
 
操作。但是,这里面的观察者引入实际上并不是必需的。因为,我们完全可以编写出一个计算机程序来操作句子,而不一定非要观察者来做。
 
操作。但是,这里面的观察者引入实际上并不是必需的。因为,我们完全可以编写出一个计算机程序来操作句子,而不一定非要观察者来做。
 +
    
其次,第二个可能隐藏观察者的地方就在于对“自我”的判断上。我们知道,蒯恩程序作用到自己的编码上就能够复制出一个自我出来。即Q(q)=”Q(q)”。对于计算机程序Q来说,它仅仅忠实地打印出了一个字符串“Q(q)”,这与打印出一个“Helloworld”没有什么区别。我们之所以觉得这个Q(q)程序与众不同恰恰是因为作为一个观察者,我们能够发现“Q(q)”与Q(q)的源代码是完全一样的。是观察程序运行的观察者判断出了这个Q(q)能够得到“自我”。这也与我们在第2章讨论的情形相一致,也就是说第一观察者“我”将观察箭头赋予了这个蒯恩程序Q(q),所以“自我”是被观察而出的。
 
其次,第二个可能隐藏观察者的地方就在于对“自我”的判断上。我们知道,蒯恩程序作用到自己的编码上就能够复制出一个自我出来。即Q(q)=”Q(q)”。对于计算机程序Q来说,它仅仅忠实地打印出了一个字符串“Q(q)”,这与打印出一个“Helloworld”没有什么区别。我们之所以觉得这个Q(q)程序与众不同恰恰是因为作为一个观察者,我们能够发现“Q(q)”与Q(q)的源代码是完全一样的。是观察程序运行的观察者判断出了这个Q(q)能够得到“自我”。这也与我们在第2章讨论的情形相一致,也就是说第一观察者“我”将观察箭头赋予了这个蒯恩程序Q(q),所以“自我”是被观察而出的。
 +
    
但是,也许你会反驳说:“不对,这种观察能力只不过是对字符串的比较。假如我写一个程序P,它也会分析该程序的源代码是否为程序的输出。这样不需要观察者,P就可以发
 
但是,也许你会反驳说:“不对,这种观察能力只不过是对字符串的比较。假如我写一个程序P,它也会分析该程序的源代码是否为程序的输出。这样不需要观察者,P就可以发
 
现什么程序能够打印出‘自我’出来了。”真的是这样吗?我们可以利用与图灵停机问题相同的技巧来说明这样的判断程序P不可能存在。我们不妨假设P存在,它能够判断出任意源代码为x的程序X作用到数据y上产生的输出X(y)是否与自己的源代码一致。
 
现什么程序能够打印出‘自我’出来了。”真的是这样吗?我们可以利用与图灵停机问题相同的技巧来说明这样的判断程序P不可能存在。我们不妨假设P存在,它能够判断出任意源代码为x的程序X作用到数据y上产生的输出X(y)是否与自己的源代码一致。
 +
    
你大概已经猜到了我将会干什么,我可以构造一个程序D(z)为:
 
你大概已经猜到了我将会干什么,我可以构造一个程序D(z)为:
第1,079行: 第1,085行:     
这个程序会来调用P这个程序,当P发现程序Z作用到数据z上面的时候得到了它自己的源代码(简写为Self),就返回一个字符串“ok”,否则将返回它自己的源代码加上数据z。P倒霉就倒霉在当把D这个程序自己的源代码d输入给D(z)它自己的时候,因为P无论怎样都一定会给出错误的判断!所以,我们只能反过头来说判断是否可以打印自身源代码的程序P不存在。
 
这个程序会来调用P这个程序,当P发现程序Z作用到数据z上面的时候得到了它自己的源代码(简写为Self),就返回一个字符串“ok”,否则将返回它自己的源代码加上数据z。P倒霉就倒霉在当把D这个程序自己的源代码d输入给D(z)它自己的时候,因为P无论怎样都一定会给出错误的判断!所以,我们只能反过头来说判断是否可以打印自身源代码的程序P不存在。
 +
    
这样,一个程序是否能打印出和自己源程序一模一样的代码只能由计算机程序之外的观察者做出判断。'''所以,“自我”必然是被观察出来的'''。
 
这样,一个程序是否能打印出和自己源程序一模一样的代码只能由计算机程序之外的观察者做出判断。'''所以,“自我”必然是被观察出来的'''。
 +
    
另外,程序的意义也是由观察者观察出来的。在第5节的表1中,我们提到了每个程序或者是命题语句都对应了一个意义。对于程序来说,它的意义就是它是否会停机。而对于语
 
另外,程序的意义也是由观察者观察出来的。在第5节的表1中,我们提到了每个程序或者是命题语句都对应了一个意义。对于程序来说,它的意义就是它是否会停机。而对于语
 
句来说,这个意义就是真假。正如破坏性自指所证明的,系统自身是无法既一致又完备地给出这种意义判断的。既然机械系统(计算机程序,公理系统中的定理)给不出意义判断,那么意义也仅仅能被系统之外的观察者赋予了。
 
句来说,这个意义就是真假。正如破坏性自指所证明的,系统自身是无法既一致又完备地给出这种意义判断的。既然机械系统(计算机程序,公理系统中的定理)给不出意义判断,那么意义也仅仅能被系统之外的观察者赋予了。
 +
    
为了体现出观察者才能赋予事物意义,让我们看看哥德尔语句的作用:
 
为了体现出观察者才能赋予事物意义,让我们看看哥德尔语句的作用:
   −
<u>我不是一个定理</u>
+
 
 +
'''我不是一个定理'''
 +
 
    
我们假设这句话的确不是系统的定理。那么观察者在外面就会判断这个句子的真实意义,也就是观察得出这个句子说了一个事实:它自己不是一个定理。假如没有一个观察者来观察、理解这个哥德尔语句,那么它不过就是一个普通的命题语句。如果系统推理得不到它,它也就被抛出系统了。所以,观察者在判断这个句子是一个真理的时候起到了至关重要的作用。
 
我们假设这句话的确不是系统的定理。那么观察者在外面就会判断这个句子的真实意义,也就是观察得出这个句子说了一个事实:它自己不是一个定理。假如没有一个观察者来观察、理解这个哥德尔语句,那么它不过就是一个普通的命题语句。如果系统推理得不到它,它也就被抛出系统了。所以,观察者在判断这个句子是一个真理的时候起到了至关重要的作用。
    
不仅仅是停机、或者真假等意义,几乎任何一种有意义的属性原则上讲只能由观察者做出最终的判别。比如判断一个程序是否打印了自己的源代码,判断两个程序是否完全一样等等。然而,在标准的数理逻辑、计算理论的教科书中,人们从来没有明确做出停机、真假的判断的人是系统之外的观察者。
 
不仅仅是停机、或者真假等意义,几乎任何一种有意义的属性原则上讲只能由观察者做出最终的判别。比如判断一个程序是否打印了自己的源代码,判断两个程序是否完全一样等等。然而,在标准的数理逻辑、计算理论的教科书中,人们从来没有明确做出停机、真假的判断的人是系统之外的观察者。
 +
    
====如何利用观察者?====
 
====如何利用观察者?====
第1,097行: 第1,109行:  
既然理解“自我”和程序意义的关键因素就是观察者,那么我们能否开发一种方法来系统地应用只有观察者才具备,而普通的计算机程序却没有的能力呢?答案应该是肯定的,我
 
既然理解“自我”和程序意义的关键因素就是观察者,那么我们能否开发一种方法来系统地应用只有观察者才具备,而普通的计算机程序却没有的能力呢?答案应该是肯定的,我
 
们将说明利用上一章提到的图灵机-观察者模型,原则上是可以将计算机屏幕前面的观察者利用起来的。
 
们将说明利用上一章提到的图灵机-观察者模型,原则上是可以将计算机屏幕前面的观察者利用起来的。
 +
    
假设观察者-图灵机模型中的图灵机就是一个可以根据某个简单特征来判断程序X作用到y上是否停机的程序H(x,y)。(例如,程序H可以简单地根据x中是否包含“do while true”
 
假设观察者-图灵机模型中的图灵机就是一个可以根据某个简单特征来判断程序X作用到y上是否停机的程序H(x,y)。(例如,程序H可以简单地根据x中是否包含“do while true”
 
语句来粗暴地判断X(y)是否停机(输出0为不停,1为停),显然这个程序的判断是不完备的)。之后,我们便可以根据那个破坏性的自指程序D(z):=1-H(z,z),而找到一个输入d(即D的源程序)。使得这个时候H(d,d)所给出的判断与我们观察者看到的程序D(d)的行为完全相反。注意这一步的程序H和程序D都是良定义的计算机程序,可以用图灵机自动产生,完全不需要观察者的涉入。
 
语句来粗暴地判断X(y)是否停机(输出0为不停,1为停),显然这个程序的判断是不完备的)。之后,我们便可以根据那个破坏性的自指程序D(z):=1-H(z,z),而找到一个输入d(即D的源程序)。使得这个时候H(d,d)所给出的判断与我们观察者看到的程序D(d)的行为完全相反。注意这一步的程序H和程序D都是良定义的计算机程序,可以用图灵机自动产生,完全不需要观察者的涉入。
 +
    
接下来,我们知道H(d,d)一定给出一个错误的判断(根据d的定义)。但是,图灵机-观察者模型中的观察者必然能够看出D(d)究竟是否停机。根据前面的论述,观察者可以做出正确的判断。于是,我们便可以让观察者开始介入,让他手动地修改图灵机程序H为H’,使得H’(d,d)能够给出正确的判断,即D(d)是否停机。注意,此时的图灵机已经不是原来的H了,而是一个经过观察者修改的程序H’。
 
接下来,我们知道H(d,d)一定给出一个错误的判断(根据d的定义)。但是,图灵机-观察者模型中的观察者必然能够看出D(d)究竟是否停机。根据前面的论述,观察者可以做出正确的判断。于是,我们便可以让观察者开始介入,让他手动地修改图灵机程序H为H’,使得H’(d,d)能够给出正确的判断,即D(d)是否停机。注意,此时的图灵机已经不是原来的H了,而是一个经过观察者修改的程序H’。
7,129

个编辑