更改

跳到导航 跳到搜索
无编辑摘要
第571行: 第571行:  
下面,我们来比较实数集合R和自然数集合N的元素个数的多少。首先,我们很容易构造一个从N到R的单射f:NR,f(x)=x。所以c(N)<=c(R)。
 
下面,我们来比较实数集合R和自然数集合N的元素个数的多少。首先,我们很容易构造一个从N到R的单射f:NR,f(x)=x。所以c(N)<=c(R)。
   −
接下来,是否存在从R到N的单射呢?答案是不存在,我们可以用反证法来证明。我们可以先把问题简化,仅仅看从[0,1]这个闭区间到自然数集合N存在一个单射g。这也就意味着,对于任意的[0,1]之间的实数x,都唯一存在着一个确定的自然数n与它对应。我们称n为x的编号。我们不妨按照x的编号大小写下这些实数而形成一个表格:
+
接下来,是否存在从R到N的单射呢?答案是不存在,我们可以用反证法来证明。我们可以先把问题简化,仅仅看从\[ 0,1 \]这个闭区间到自然数集合N存在一个单射g。这也就意味着,对于任意的[0,1]之间的实数x,都唯一存在着一个确定的自然数n与它对应。我们称n为x的编号。我们不妨按照x的编号大小写下这些实数而形成一个表格:
 +
 
 +
<div style="text-align: center;">表2:对所有\[ 0,1 \]区间内的实数编号</div>
 +
 
   −
表2:对所有[0,1]区间内的实数编号
      
假设我们可以将[0,1]之间的所有自然数放置到一张无穷行、无穷列的表格上。每一行就是一个实数,某一行的每一列就表示该实数小数点后面的第n位数字。例如第一个实数的第1、2、„„、n、„„列分别是1、3、„„、8、„„,那么这个小数就是0.13…8…。
 
假设我们可以将[0,1]之间的所有自然数放置到一张无穷行、无穷列的表格上。每一行就是一个实数,某一行的每一列就表示该实数小数点后面的第n位数字。例如第一个实数的第1、2、„„、n、„„列分别是1、3、„„、8、„„,那么这个小数就是0.13…8…。
第593行: 第595行:  
康托尔的这种巧妙的对角线证明方法正是我们前面讨论的自指方法,对角线Q(n)也正是蒯恩函数,我们马上就会对此明朗了。
 
康托尔的这种巧妙的对角线证明方法正是我们前面讨论的自指方法,对角线Q(n)也正是蒯恩函数,我们马上就会对此明朗了。
   −
(2)、程序的黄金对角线与“自我”
+
====程序的黄金对角线与“自我”====
    
下面,我们将进入计算机程序的世界。首先,让我们把考虑的计算机程序设定到自然数范围内,也就是说程序F(x)中的输入x是自然数,F(x)的计算结果也是自然数。我们知道计算机程序都是有限的指令组成的字符串,于是我们可以为这些字符串编号。所以,任何程序F都对应了一个自然数编码f,而输入变量x也是自然数,我们还可以定义一个函数λ(f,x)来对程序“把数据x输入给函数F”这个事件编码,其中λ(f,t)也是一个自然数。
 
下面,我们将进入计算机程序的世界。首先,让我们把考虑的计算机程序设定到自然数范围内,也就是说程序F(x)中的输入x是自然数,F(x)的计算结果也是自然数。我们知道计算机程序都是有限的指令组成的字符串,于是我们可以为这些字符串编号。所以,任何程序F都对应了一个自然数编码f,而输入变量x也是自然数,我们还可以定义一个函数λ(f,x)来对程序“把数据x输入给函数F”这个事件编码,其中λ(f,t)也是一个自然数。
第599行: 第601行:  
既然所有程序和输入数据都编好号了,我们便可以把所有的程序针对所有的输入数据的运算情况画在下面的大表格上:
 
既然所有程序和输入数据都编好号了,我们便可以把所有的程序针对所有的输入数据的运算情况画在下面的大表格上:
   −
表3:程序与数据的列表
+
<div style="text-align: center;">表3:程序与数据的列表</div>
 +
 
 +
 
    
其中,(n,m)就表示第n个程序计算输入数据m这个事件的编码。下面我们来考察那条黄金色的
 
其中,(n,m)就表示第n个程序计算输入数据m这个事件的编码。下面我们来考察那条黄金色的
第631行: 第635行:  
这样的编码函数λ是存在的,例如取λ(f,x)=23。则对任意的自然数组合(f,x),都有唯一的自然数λ(f,x)作为这对自然树的编码。
 
这样的编码函数λ是存在的,例如取λ(f,x)=23。则对任意的自然数组合(f,x),都有唯一的自然数λ(f,x)作为这对自然树的编码。
   −
(3)、对角线版本的递归定理
+
====对角线版本的递归定理====
    
利用对角线这种几何方法,我们同样可以说明递归定理必然成立(参看《Computability:anintroduction torecursivefunctiontheory》)。首先,我们仿照表3构造另外一个表:
 
利用对角线这种几何方法,我们同样可以说明递归定理必然成立(参看《Computability:anintroduction torecursivefunctiontheory》)。首先,我们仿照表3构造另外一个表:
   −
表4递归定理所用的程序-数据表
+
<div style="text-align: center;">表4递归定理所用的程序-数据表</div>
 +
 
 +
 
    
与表3不同的地方是,此表格中的每一项不再是λ(m,n)了,而是m(n),也就是第k个计算机程序k,其中k为第m个程序作用到第n个数据上所计算出来的结果。如果第m个程序计算第n个数据不停机,则
 
与表3不同的地方是,此表格中的每一项不再是λ(m,n)了,而是m(n),也就是第k个计算机程序k,其中k为第m个程序作用到第n个数据上所计算出来的结果。如果第m个程序计算第n个数据不停机,则
第697行: 第703行:  
有趣的是,康托尔的证明以及下面所讲的破坏性自指的黄金对角线等方法恰恰是利用了与此类似的技巧。只不过,在那里的对角线中,我们能够事先保证v(v)是非空的数值。于是我们只能得到诸如c=c+1的矛盾,从而返回去否定前提的成立。
 
有趣的是,康托尔的证明以及下面所讲的破坏性自指的黄金对角线等方法恰恰是利用了与此类似的技巧。只不过,在那里的对角线中,我们能够事先保证v(v)是非空的数值。于是我们只能得到诸如c=c+1的矛盾,从而返回去否定前提的成立。
   −
(4)、破坏性自指的黄金对角线
+
====破坏性自指的黄金对角线====
    
下面,我们再用“黄金对角线”,对图灵停机问题的不可解性进行两种不一样的证明。我们知道,任何计算机程序都是由一个固定的指令集中的指令组合而成的。我们还是仿照表5的方法,将所有的程序作用到所有的数据上的情况列成一张表,只不过,这张表上面的每一项不再是n(m)再是了,而是H(n,m)也就是那个能判断第n个程序作用到第m个数据上是否停机的结果。如果停机,则相应的表项就是1,否则就是0。
 
下面,我们再用“黄金对角线”,对图灵停机问题的不可解性进行两种不一样的证明。我们知道,任何计算机程序都是由一个固定的指令集中的指令组合而成的。我们还是仿照表5的方法,将所有的程序作用到所有的数据上的情况列成一张表,只不过,这张表上面的每一项不再是n(m)再是了,而是H(n,m)也就是那个能判断第n个程序作用到第m个数据上是否停机的结果。如果停机,则相应的表项就是1,否则就是0。
   −
表6图灵停机判别表
+
<div style="text-align: center;">表6图灵停机判别表</div>
 +
 
 +
 
    
其中,每一项H(m,n)就要么是0要么是1。这样,上面的黄金对角线上的数值就应该相应地取为一个01的序列,我们不妨设这个序列为:
 
其中,每一项H(m,n)就要么是0要么是1。这样,上面的黄金对角线上的数值就应该相应地取为一个01的序列,我们不妨设这个序列为:
第709行: 第717行:  
那么,这个程序D(x)所得到的计算结果就应该与对角线序列完全相反,也就是:
 
那么,这个程序D(x)所得到的计算结果就应该与对角线序列完全相反,也就是:
   −
我们知道D(1)运算的结果与该列表中的第一行不同,D(2)与第2行不同,„„,所以D(x)这个序列与列表中的每一行都不同,也就意味着D(n)这个序列不在列表中。但是,我们知道此表已经列出了所有的程序。这就得到了矛盾,于是我们得出结论,H这个函数本身的存在性应该受到质疑。
+
我们知道D(1)运算的结果与该列表中的第一行不同,D(2)与第2行不同,...,所以D(x)这个序列与列表中的每一行都不同,也就意味着D(n)这个序列不在列表中。但是,我们知道此表已经列出了所有的程序。这就得到了矛盾,于是我们得出结论,H这个函数本身的存在性应该受到质疑。
    
下面我们再给出另外一个图灵停机问题不可解性的证明,在这个证明中,你将能更清楚地看到对角线方法、破坏性自指、悖论之间的联系。
 
下面我们再给出另外一个图灵停机问题不可解性的证明,在这个证明中,你将能更清楚地看到对角线方法、破坏性自指、悖论之间的联系。
 +
 
与以上的证明不同,我们并不直接否定掉D函数不在表6中的事实,而是假设它在该表中,并且它的编号是d,这样我们就得到了如下表格:
 
与以上的证明不同,我们并不直接否定掉D函数不在表6中的事实,而是假设它在该表中,并且它的编号是d,这样我们就得到了如下表格:
   −
表7自指悖论与黄金对角线
+
<div style="text-align: center;">表7自指悖论与黄金对角线</div>
程序\数据
+
 
 +
 
    
让我们把目光锁定到蓝色的第d行。如果说D这个程序在列表中,并且d就是D的编码,那么这第d行必然会跟黄金对角线在表中有一个交点(绿色格子),按照对角线的定义法则,这个交点对应的元素必然会是H(d,d)。
 
让我们把目光锁定到蓝色的第d行。如果说D这个程序在列表中,并且d就是D的编码,那么这第d行必然会跟黄金对角线在表中有一个交点(绿色格子),按照对角线的定义法则,这个交点对应的元素必然会是H(d,d)。
   −
但是,请不要忘记,按照D(n)这个函数的定义,D(n)=1-H(n,n),所以当n=d的时候,D(d)就应该等于
+
但是,请不要忘记,按照D(n)这个函数的定义,D(n)=1-H(n,n),所以当n=d的时候,D(d)就应该等于1-H(d,d)。
1-H(d,d)。
      
H(d,d)与1-H(d,d)无论如何都不可能相等(注意,这里H(d,d)要么是0要么是1,绝无可能是空值)。也就是说H(d,d)说停机的时候,1-H(d,d)就说不停机,而H(d,d)说不停机的时候,1-H(d,d)就说停机。因此,我们只能得到矛盾。在整个推理的链条中,只有第一个环节,即H函数是存在的出现了问题。
 
H(d,d)与1-H(d,d)无论如何都不可能相等(注意,这里H(d,d)要么是0要么是1,绝无可能是空值)。也就是说H(d,d)说停机的时候,1-H(d,d)就说不停机,而H(d,d)说不停机的时候,1-H(d,d)就说停机。因此,我们只能得到矛盾。在整个推理的链条中,只有第一个环节,即H函数是存在的出现了问题。
   −
实际上,这种对角线证明图灵停机问题的方法与第5节中构造自指程序的方法是相通的,尽管它们在表面上看似乎很不相同。首先,第5节中的程序D(z)实际上就是这里的程序D(n)。只不过D(z)通过判断语句和实际的死循环实现了与H(z,z)判断相反的结果,而这里的D(n)通过1-H(n,n)这样一步数学运算就实现了相同的效果。其次,在第5节中的第二步,将z=d代入D函数自己其实就相当于本节第二个方法中的对角线与蓝色的第d行的交点元素H(d,d)。最后,本节的方法1的独到之处就是在于,它直接分析D(d)这个函数计算的结果与H(1,1)不同,与H(2,2)不同,„„,从而导致了D(n)不可能在列表中。以至于该方法不用分析到H(d,d)这个元素上就能完成H不存在的证明。
+
实际上,这种对角线证明图灵停机问题的方法与第5节中构造自指程序的方法是相通的,尽管它们在表面上看似乎很不相同。首先,第5节中的程序D(z)实际上就是这里的程序D(n)。只不过D(z)通过判断语句和实际的死循环实现了与H(z,z)判断相反的结果,而这里的D(n)通过1-H(n,n)这样一步数学运算就实现了相同的效果。其次,在第5节中的第二步,将z=d代入D函数自己其实就相当于本节第二个方法中的对角线与蓝色的第d行的交点元素H(d,d)。最后,本节的方法1的独到之处就是在于,它直接分析D(d)这个函数计算的结果与H(1,1)不同,与H(2,2)不同,...,从而导致了D(n)不可能在列表中。以至于该方法不用分析到H(d,d)这个元素上就能完成H不存在的证明。
   −
利用黄金对角线方法也同样可以分析哥德尔定理的证明等其它的破坏性自指现象(读者不妨分析一下如何用对角线方法来构造哥德尔定理的证明)。也就是说,黄金对角线方法与自指方法是一脉相承的;因此多书上,蒯恩函数也被称为对角线函数(例如:《DiagonalizationandSelf-Reference》)。
+
利用黄金对角线方法也同样可以分析哥德尔定理的证明等其它的破坏性自指现象(读者不妨分析一下如何用对角线方法来构造哥德尔定理的证明)。也就是说,黄金对角线方法与自指方法是一脉相承的;因此多书上,蒯恩函数也被称为对角线函数(例如:《[http://ebooklink.net/g/detail/0198534507/Diagonalization%20and%20Self-Reference%20%28Oxford%20Logic%20Guides%29/ Diagonalization and Self-Reference]》)。
    
===自指与观察者===
 
===自指与观察者===
第737行: 第746行:  
察者模型是如何将观察者作用真正地耦合到系统之中,并让它发挥普通计算机程序所不能发挥的作用的。
 
察者模型是如何将观察者作用真正地耦合到系统之中,并让它发挥普通计算机程序所不能发挥的作用的。
   −
(1)、观察者藏于何处?
+
====观察者藏于何处?====
    
首先,在讨论自指语句,尤其是“把„„中的第一个字放在引号前面,其余的字放在引号后面„„”的时候,我曾经指出,这个句子中的动词可以使役读句子的观察者来对它进行
 
首先,在讨论自指语句,尤其是“把„„中的第一个字放在引号前面,其余的字放在引号后面„„”的时候,我曾经指出,这个句子中的动词可以使役读句子的观察者来对它进行
第749行: 第758行:  
你大概已经猜到了我将会干什么,我可以构造一个程序D(z)为:
 
你大概已经猜到了我将会干什么,我可以构造一个程序D(z)为:
   −
D(z)
+
<pre>
{If
+
D(z){
P(z,z)=0
+
        If P(z,z)=0 then
 
+
            Return Self;
then
+
        Else
 
+
            Return‘ok’;
Return Self;
+
        Endif
 
  −
Else
  −
 
  −
Return‘ok’;
  −
 
  −
Endif
  −
 
   
}
 
}
 +
</pre>
 +
<div style="text-align: center;">源代码6:让判断是否可以打印自身源代码的程序P实效的程序</div>
   −
源代码6:让判断是否可以打印自身源代码的程序P实效的程序
+
这个程序会来调用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>
等。然而,在标准的数理逻辑、计算理论的教科书中,人们从来没有明确做出停机、真假的判断的人是系统之外的观察者。
     −
(2)、如何利用观察者?
+
我们假设这句话的确不是系统的定理。那么观察者在外面就会判断这个句子的真实意义,也就是观察得出这个句子说了一个事实:它自己不是一个定理。假如没有一个观察者来观察、理解这个哥德尔语句,那么它不过就是一个普通的命题语句。如果系统推理得不到它,它也就被抛出系统了。所以,观察者在判断这个句子是一个真理的时候起到了至关重要的作用。
 +
 
 +
不仅仅是停机、或者真假等意义,几乎任何一种有意义的属性原则上讲只能由观察者做出最终的判别。比如判断一个程序是否打印了自己的源代码,判断两个程序是否完全一样等等。然而,在标准的数理逻辑、计算理论的教科书中,人们从来没有明确做出停机、真假的判断的人是系统之外的观察者。
 +
 
 +
====如何利用观察者?====
    
既然理解“自我”和程序意义的关键因素就是观察者,那么我们能否开发一种方法来系统地应用只有观察者才具备,而普通的计算机程序却没有的能力呢?答案应该是肯定的,我
 
既然理解“自我”和程序意义的关键因素就是观察者,那么我们能否开发一种方法来系统地应用只有观察者才具备,而普通的计算机程序却没有的能力呢?答案应该是肯定的,我
 
们将说明利用上一章提到的图灵机-观察者模型,原则上是可以将计算机屏幕前面的观察者利用起来的。
 
们将说明利用上一章提到的图灵机-观察者模型,原则上是可以将计算机屏幕前面的观察者利用起来的。
   −
假设观察者-图灵机模型中的图灵机就是一个可以根据某个简单特征来判断程序X作用到y上是否停机的程序H(x,y)。(例如,程序H可以简单地根据x中是否包含“dowhiletrue”
+
假设观察者-图灵机模型中的图灵机就是一个可以根据某个简单特征来判断程序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’。
 
当然,接下来,图灵机又会根据这个新的程序H’而构造出新的程序D’,使得H’(d’,d’)总得到与真实的D’(d’)的运行情况相反的判断。于是,我们再让观察者对H’进行修改,而构造出新的程序H’’。
 
当然,接下来,图灵机又会根据这个新的程序H’而构造出新的程序D’,使得H’(d’,d’)总得到与真实的D’(d’)的运行情况相反的判断。于是,我们再让观察者对H’进行修改,而构造出新的程序H’’。
„„
+
 
 +
......
    
这个过程可以永远地重复下去。由于图灵停机问题的不可解性,我们可以保证这样永远重复的过程不可能被任何一个计算机程序所模拟。所以,观察者独一无二的作用便在这样一个看似机械但又不是固定的计算机程序循环中体现出来了。
 
这个过程可以永远地重复下去。由于图灵停机问题的不可解性,我们可以保证这样永远重复的过程不可能被任何一个计算机程序所模拟。所以,观察者独一无二的作用便在这样一个看似机械但又不是固定的计算机程序循环中体现出来了。
第802行: 第806行:  
[[File:2011131713152730.jpg |450px |thumb |center |图5-4(2-5)空间上的因果]]
 
[[File:2011131713152730.jpg |450px |thumb |center |图5-4(2-5)空间上的因果]]
   −
这张图说明了空间上的质料因和形式因的因果箭头的逆转。我们知道任何系统在空间上都是由低层更小的元素组合而成的,例如细胞组成生物体,人组成城市。我们通常的解释是,这些微观的个体决定了整体的性质。因此我们习惯于用亚里士多德所说的质料因来解释这种因果依赖性。然而,当我们考虑生命系统的诸如自我修复特征的时候,虽然我们也可以将系统的这种能力还原到底层的质料因,但是我们通常说:“细胞自己完成了修复”,而不是说:“XX分子作用到了YY通路上,导致了ZZ生成了新的化学物质WW„„”,因为后一种描述太过复杂了。所以,这时,我们用形式因代替了质料因(即右图中从上而下的虚箭头)。我们发现因果箭头从原来的自下而上转变为现在的自上而下。
+
这张图说明了空间上的质料因和形式因的因果箭头的逆转。我们知道任何系统在空间上都是由低层更小的元素组合而成的,例如细胞组成生物体,人组成城市。我们通常的解释是,这些微观的个体决定了整体的性质。因此我们习惯于用亚里士多德所说的质料因来解释这种因果依赖性。然而,当我们考虑生命系统的诸如自我修复特征的时候,虽然我们也可以将系统的这种能力还原到底层的质料因,但是我们通常说:“细胞自己完成了修复”,而不是说:“XX分子作用到了YY通路上,导致了ZZ生成了新的化学物质WW...”,因为后一种描述太过复杂了。所以,这时,我们用形式因代替了质料因(即右图中从上而下的虚箭头)。我们发现因果箭头从原来的自下而上转变为现在的自上而下。
    
[[File:2011131713152830.jpg |500px |thumb |center |图5-5(2-6)时间上的因果]]
 
[[File:2011131713152830.jpg |500px |thumb |center |图5-5(2-6)时间上的因果]]
第814行: 第818行:  
假如我们能够创造这样一种完美的人类克隆体,它不仅外貌上与被克隆的人一模一样,而且能够非常完美地在瞬间模仿真人的一切动作(包括说话、运动等等)。我们假设,A和A的克隆体A’之间存在着信号传递,无论A做了什么动作,说了什么话,都可以用一个无线电装置在瞬间传递给A’,并让A’马上模仿出来。
 
假如我们能够创造这样一种完美的人类克隆体,它不仅外貌上与被克隆的人一模一样,而且能够非常完美地在瞬间模仿真人的一切动作(包括说话、运动等等)。我们假设,A和A的克隆体A’之间存在着信号传递,无论A做了什么动作,说了什么话,都可以用一个无线电装置在瞬间传递给A’,并让A’马上模仿出来。
   −
当你看到这两个人,你如何判定它们两个哪个是真人,哪个是克隆体呢?当你面对两个一模一样的事物的时候,你会很容易发生误判。例如,你将克隆体A’误判成真实的人了。于是,你的头脑会做出这样一种解释:A’所做出的某种动作导致了A做出同样的动作。你会发现,这种假设是完全说得通的,因为A和A'的所有动作都是同时的、一模一样的,于是你既可以将A看成是原因A’是结果,你也可以将A’看成是原因A是结果。这实际上已经发生了因果的互换!我们可以这样说:完全地重合恰恰就是因果关系开始发生倒置的起点!下面,再让我们来看自指。什么是自指?可以这样说,自指恰恰就是同样一个事物在不同的层次上发生了完美的重合。所以,不同层次的同一事物就会表现给观察者完全一样的动
+
当你看到这两个人,你如何判定它们两个哪个是真人,哪个是克隆体呢?当你面对两个一模一样的事物的时候,你会很容易发生误判。例如,你将克隆体A’误判成真实的人了。于是,你的头脑会做出这样一种解释:A’所做出的某种动作导致了A做出同样的动作。你会发现,这种假设是完全说得通的,因为A和A'的所有动作都是同时的、一模一样的,于是你既可以将A看成是原因A’是结果,你也可以将A’看成是原因A是结果。这实际上已经发生了因果的互换!我们可以这样说:'''完全地重合恰恰就是因果关系开始发生倒置的起点!'''
作和过程,这个时候,观察者也就不能够分辨出哪一个是因,哪一个是果了。自指让观察者心智中的因果箭头开始发生倒置。
+
 
 +
下面,再让我们来看自指。什么是自指?可以这样说,自指恰恰就是同样一个事物在不同的层次上发生了完美的重合。所以,不同层次的同一事物就会表现给观察者完全一样的动作和过程,这个时候,观察者也就不能够分辨出哪一个是因,哪一个是果了。自指让观察者心智中的因果箭头开始发生倒置。
    
让我们以自我反省的程序为例说明。我们知道,自我反省的程序包括两个层次,一个是它的“物理层”也就是由我们设计者写好的源代码。另一个层次则是由这个计算机程序动态
 
让我们以自我反省的程序为例说明。我们知道,自我反省的程序包括两个层次,一个是它的“物理层”也就是由我们设计者写好的源代码。另一个层次则是由这个计算机程序动态
第822行: 第827行:  
[[File:2011131713152930.jpg |400px |thumb |center |图5-7自我反省程序中的两个层次]]
 
[[File:2011131713152930.jpg |400px |thumb |center |图5-7自我反省程序中的两个层次]]
   −
由于程序将自己的源代码原封不动地拷贝到了虚拟层,并进行分析、模拟,所以我们观察者将会看到两个不同层次完美的重合。当程序不仅仅做出分析,而且还能够做出输入输出
+
由于程序将自己的源代码原封不动地拷贝到了虚拟层,并进行分析、模拟,所以我们观察者将会看到两个不同层次完美的重合。当程序不仅仅做出分析,而且还能够做出输入输出响应的时候,我们将会看到和刚才的假想实验相似的情况:不知情的观察者将会发生混淆,以至于既可以把程序物理层的源代码看作是原因,也有可能将程序的虚拟层的源代码看作是原因。这就使得因果倒置成为了可能。假如虚拟层的程序比物理层的程序跑得更快些(虚拟层的程序跑了T步,而物理层的程序仅仅跑了t步,其中T>t),那么观察者将更可能认为这个程序的虚拟层“控制”了物理层的部分,于是程序按照“自己”的意愿完成了动作。这和观察者看到一个小虫可以朝向食物自主的运动是完全同样的道理。
响应的时候,我们将会看到和刚才的假想实验相似的情况:不知情的观察者将会发生混淆,以至于既可以把程序物理层的源代码看作是原因,也有可能将程序的虚拟层的源代码看作是原因。这就使得因果倒置成为了可能。假如虚拟层的程序比物理层的程序跑得更快些(虚拟层的程序跑了T步,而物理层的程序仅仅跑了t步,其中T>t),那么观察者将更可能认为这个程序的虚拟层“控制”了物理层的部分,于是程序按照“自己”的意愿完成了动作。这和观察者看到一个小虫可以朝向食物自主的运动是完全同样的道理。
     −
不仅仅是自我反省的程序,我们会看到任何一个具备构建型自指能力的系统都包括了两层次,而且是同一个东西在不同的层次实现了重合。例如,我们考察自打印程序,这个程序实际上是三个不同层次的两两重合。第一层是该程序内部包含的数据:λ((CopyоPopupоControl)),第二个层次是该程序内部的实体结构:(CopyоPopupоControl)。首先,这两层其实是同一个东西的再现,即都是(CopyоPopupо Control),它们完成了一次重合。
+
不仅仅是自我反省的程序,我们会看到任何一个具备构建型自指能力的系统都包括了两层次,而且是同一个东西在不同的层次实现了重合。例如,我们考察自打印程序,这个程序实际上是三个不同层次的两两重合。第一层是该程序内部包含的数据:λ((Copy<sub>о</sub> Popup<sub>о</sub> Control)),第二个层次是该程序内部的实体结构:(Copy<sub>о</sub> Popup<sub>о</sub> Control)。首先,这两层其实是同一个东西的再现,即都是(Copy<sub>о</sub> Popup<sub>о</sub> Control),它们完成了一次重合。
   −
另外,我们考察另外两个层面,与自我反省的程序类似,一个层面是该程序的物理层,也就是整个源代码:λ((CopyоPopupоControl))о(CopyоPopupоControl)。另一个是它运行之后在屏幕上打印出来的东西,即仍然是这个源代码自己。这两个层次发生了重合。
+
另外,我们考察另外两个层面,与自我反省的程序类似,一个层面是该程序的物理层,也就是整个源代码:λ((Copy<sub>о</sub> Popup<sub>о</sub> Control))<sub>о</sub> (Copy<sub>о</sub> Popup<sub>о</sub> Control)。另一个是它运行之后在屏幕上打印出来的东西,即仍然是这个源代码自己。这两个层次发生了重合。
    
这种不同层次的融合也发生在对角线证明方法之中。我们看表3。粉色的格子上面一行是程序Q所得到的运算结果;下面一行是表格的排列规则;当两者重合在桔黄色的那个方
 
这种不同层次的融合也发生在对角线证明方法之中。我们看表3。粉色的格子上面一行是程序Q所得到的运算结果;下面一行是表格的排列规则;当两者重合在桔黄色的那个方

导航菜单