第56行: |
第56行: |
| | | |
| | | |
− | <div style="text-align: center;"><u>'''这句话是错的'''</u></div> | + | <div style="text-align: center;">'''这句话是错的'''</div> |
| | | |
| | | |
第64行: |
第64行: |
| 然而,这句“说谎者悖论”仅仅是广大自指语句家庭中的成员之一,有很多语言是自指的,但却是无害的甚至是有益的。比如下面的句子: | | 然而,这句“说谎者悖论”仅仅是广大自指语句家庭中的成员之一,有很多语言是自指的,但却是无害的甚至是有益的。比如下面的句子: |
| | | |
− | <div style="text-align: center;"><u>'''这句话是对的'''</u></div> | + | <div style="text-align: center;">'''这句话是对的'''</div> |
| | | |
| 这句话就是一个既可以是对又可以是错的句子。你可以非常虔诚地承认这句话所论述的内容是对的,然后,再看它的内容,它正在陈述:它自己是对的。于是你初期的假设被证实了。另一方面,当你假设它是错误的时候,你就会知道它的语义“这句话对”是错误的,于是你就真的得到了这句话就是错误的结论。也就是说这句话的对错完全取决于你的假设。 | | 这句话就是一个既可以是对又可以是错的句子。你可以非常虔诚地承认这句话所论述的内容是对的,然后,再看它的内容,它正在陈述:它自己是对的。于是你初期的假设被证实了。另一方面,当你假设它是错误的时候,你就会知道它的语义“这句话对”是错误的,于是你就真的得到了这句话就是错误的结论。也就是说这句话的对错完全取决于你的假设。 |
第71行: |
第71行: |
| 当然,还有一些更好玩的自指句子,如: | | 当然,还有一些更好玩的自指句子,如: |
| | | |
− | <div style="text-align: center;"><u>这句话有2个‘这’字,2个‘句’字,2个‘话’字,2个‘有’字,7个‘2’字,11个‘个’字,11个‘字’字,2个‘7’字,3个‘11’字,2个‘3’字</u></div> | + | <div style="text-align: center;">'''这句话有2个‘这’字,2个‘句’字,2个‘话’字,2个‘有’字,7个‘2’字,11个‘个’字,11个‘字’字,2个‘7’字,3个‘11’字,2个‘3’字</div> |
| | | |
| 这被称为自描述语句,也就是说这个句子正在描述自己的“分子”构成。当你尝试独立写下这样一个自描述语句的时候就会发现,你其实并没有创造这句话,而是这句话正在“迫使”你写出它自己。这是因为,按照这个句子的逻辑一旦你开始写下第一个字,你就必须按照已出现的字的情况而自动补全后面的句子。同时,这个语句还具有了不起的自我修复性。你不妨将该句子中的某一个汉字删掉(例如你删除第一个‘2’字),就会很快发现该句子中的一部分出现问题了,即“7个‘2’字”是错误的。因此,你会根据句子整体的意思指导而发现你少了一个‘2’字。 | | 这被称为自描述语句,也就是说这个句子正在描述自己的“分子”构成。当你尝试独立写下这样一个自描述语句的时候就会发现,你其实并没有创造这句话,而是这句话正在“迫使”你写出它自己。这是因为,按照这个句子的逻辑一旦你开始写下第一个字,你就必须按照已出现的字的情况而自动补全后面的句子。同时,这个语句还具有了不起的自我修复性。你不妨将该句子中的某一个汉字删掉(例如你删除第一个‘2’字),就会很快发现该句子中的一部分出现问题了,即“7个‘2’字”是错误的。因此,你会根据句子整体的意思指导而发现你少了一个‘2’字。 |
第81行: |
第81行: |
| '''虚拟层次'''是一个我们司空见惯的概念,例如故事中的故事,电影中的电影,梦境中的梦境等等(电影《[http://movie.douban.com/subject/3541415/ 盗梦空间]》(Inception)就是对梦中梦层次的一个非常好的展示)。在上一章中,我们已经领略了程序是可以通过模拟而产生多个虚拟层次的。在语言中,我们不妨将引号看作是标识一个新的虚拟层次出现的符号。这样,下面这句话: | | '''虚拟层次'''是一个我们司空见惯的概念,例如故事中的故事,电影中的电影,梦境中的梦境等等(电影《[http://movie.douban.com/subject/3541415/ 盗梦空间]》(Inception)就是对梦中梦层次的一个非常好的展示)。在上一章中,我们已经领略了程序是可以通过模拟而产生多个虚拟层次的。在语言中,我们不妨将引号看作是标识一个新的虚拟层次出现的符号。这样,下面这句话: |
| | | |
− | <div style="text-align: center;"><u>“明天会下雨”是错的</u></div> | + | <div style="text-align: center;">'''“明天会下雨”是错的'''</div> |
| | | |
| 就包含了两个层次,更深一层的句子是“明天会下雨”,而上面一层则是“‘明天会下雨’是错的”。当然,我们通过不断地加引号就能创造出各种复杂的嵌套结构。 | | 就包含了两个层次,更深一层的句子是“明天会下雨”,而上面一层则是“‘明天会下雨’是错的”。当然,我们通过不断地加引号就能创造出各种复杂的嵌套结构。 |
第88行: |
第88行: |
| 另外,人们发明了一类代词可以指代不同的句子。例如“这句话”,“那句话”。这些代词就仿佛是一个指针会将一个句子整体放到一个引号中而实现多个层次的嵌套。例如下面两句话: | | 另外,人们发明了一类代词可以指代不同的句子。例如“这句话”,“那句话”。这些代词就仿佛是一个指针会将一个句子整体放到一个引号中而实现多个层次的嵌套。例如下面两句话: |
| | | |
− | <div style="text-align: center;"><u>下面的句子是对的</u></div> | + | <div style="text-align: center;">'''下面的句子是对的'''</div> |
| | | |
− | <div style="text-align: center;"><u>明天会下雨</u></div> | + | <div style="text-align: center;">'''明天会下雨'''</div> |
| | | |
| | | |
| 在第一句话中出现了一个指代词“下面的句子”,它是一个指针指向了“明天会下雨”这句话,于是我们观察者作为一个解读器就会将这两句话解释为: | | 在第一句话中出现了一个指代词“下面的句子”,它是一个指针指向了“明天会下雨”这句话,于是我们观察者作为一个解读器就会将这两句话解释为: |
| | | |
− | <div style="text-align: center;"><u>“明天会下雨”是对的</u></div> | + | <div style="text-align: center;">'''“明天会下雨”是对的'''</div> |
| | | |
| | | |
第103行: |
第103行: |
| 按照同样的逻辑,当我们遇到了指代词“这句话”的时候会发生什么呢?我们将会得到一个包含无穷虚拟层次的语句。例如我们将自指语句“这句话是错的”按照代词的法则展开就会得到: | | 按照同样的逻辑,当我们遇到了指代词“这句话”的时候会发生什么呢?我们将会得到一个包含无穷虚拟层次的语句。例如我们将自指语句“这句话是错的”按照代词的法则展开就会得到: |
| | | |
− | <div style="text-align: center;"><u>““““…………”是错的”是错的”…………”是错的”是错的</u></div> | + | <div style="text-align: center;">'''““““…………”是错的”是错的”…………”是错的”是错的'''</div> |
| | | |
| | | |
第111行: |
第111行: |
| 在讨论蒯恩之前,让我们先来领教句子中的动词(动词短语)。大部分动词是与我们读句子的观察者无关的,例如: | | 在讨论蒯恩之前,让我们先来领教句子中的动词(动词短语)。大部分动词是与我们读句子的观察者无关的,例如: |
| | | |
− | <div style="text-align: center;"><u>小明起床了</u></div> | + | <div style="text-align: center;">'''小明起床了'''</div> |
| | | |
| | | |
| 这个句子表达了小明这个人物正在做的一个动作是起床了。其中“起床了”就是一个动词。当然,有很多动词不仅可以描述一个人或者事物,还可以去描述句子,例如: | | 这个句子表达了小明这个人物正在做的一个动作是起床了。其中“起床了”就是一个动词。当然,有很多动词不仅可以描述一个人或者事物,还可以去描述句子,例如: |
| | | |
− | <div style="text-align: center;"><u>“小明起床了”包含5个字</u></div> | + | <div style="text-align: center;">'''“小明起床了”包含5个字'''</div> |
| | | |
| | | |
| 这里面的“包含5个字”就是一个描述句子“小明起床了”的动词。还有一些句子包含了动词,而这个动词是使役我们读这个句子的观察者做出某种动作的: | | 这里面的“包含5个字”就是一个描述句子“小明起床了”的动词。还有一些句子包含了动词,而这个动词是使役我们读这个句子的观察者做出某种动作的: |
| | | |
− | <div style="text-align: center;"><u>删除“小明起床了”中的第一个字</u></div> | + | <div style="text-align: center;">'''删除“小明起床了”中的第一个字'''</div> |
| + | |
| | | |
| 这个“删除第一个字”的动作就是使役读句子的观察者做出的,于是,我们按照这个句子的说法进行操作,就会得到一个新句子: | | 这个“删除第一个字”的动作就是使役读句子的观察者做出的,于是,我们按照这个句子的说法进行操作,就会得到一个新句子: |
| | | |
− | <div style="text-align: center;"><u>明起床了</u></div> | + | <div style="text-align: center;">'''明起床了'''</div> |
| + | |
| | | |
| 我们可以再做稍微复杂一点的操作,例如: | | 我们可以再做稍微复杂一点的操作,例如: |
| | | |
− | <div style="text-align: center;"><u>把“小明起床了”中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变</u></div> | + | <div style="text-align: center;">'''把“小明起床了”中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变'''</div> |
| + | |
| | | |
| 按照这个句子所描述的复杂操作(你最好拿来一个草稿纸,自己在纸上写一写),我们就可以得到: | | 按照这个句子所描述的复杂操作(你最好拿来一个草稿纸,自己在纸上写一写),我们就可以得到: |
| | | |
− | <div style="text-align: center;"><u>小“小明起床了”明起床了</u></div> | + | <div style="text-align: center;">'''小“小明起床了”明起床了'''</div> |
| + | |
| | | |
| 好,既然你已经熟悉了这个复杂的操作,那么让我们来看下面一个古怪的句子: | | 好,既然你已经熟悉了这个复杂的操作,那么让我们来看下面一个古怪的句子: |
| | | |
− | <div style="text-align: center;"><u>把“把中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变”中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变</u></div> | + | <div style="text-align: center;">'''把“把中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变”中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变'''</div> |
| + | |
| | | |
| 如果按照这个句子指示的操作你会得到什么?让我们来做一做。按照这个句子的要求,我们可以把引号之中的句子施行下面的三步操作:第一步,把第一个字,也就是“把”放在左引号前面,这样就得到的新句子中的第一个字:“把”;第二步,将后面的字放在右引号后面,这样新句子就会以“中的第一个字放到……字不变”为结尾;第三步,保持引号和其中的字不变,于是新句子的中间会有一个引号,并且引号的中间就会是“把中的第一个字放到……”。于是,我们得到的新句子就是: | | 如果按照这个句子指示的操作你会得到什么?让我们来做一做。按照这个句子的要求,我们可以把引号之中的句子施行下面的三步操作:第一步,把第一个字,也就是“把”放在左引号前面,这样就得到的新句子中的第一个字:“把”;第二步,将后面的字放在右引号后面,这样新句子就会以“中的第一个字放到……字不变”为结尾;第三步,保持引号和其中的字不变,于是新句子的中间会有一个引号,并且引号的中间就会是“把中的第一个字放到……”。于是,我们得到的新句子就是: |
| | | |
− | <div style="text-align: center;"><u>把“把中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变”中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变</u></div> | + | <div style="text-align: center;">'''把“把中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变”中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变'''</div> |
| | | |
| 请注意,这个新句子和原句子是一模一样的!事实上,原句子使役我们观察者完成了一次对自己的拷贝!这个句子其实就是大名鼎鼎的蒯恩了! | | 请注意,这个新句子和原句子是一模一样的!事实上,原句子使役我们观察者完成了一次对自己的拷贝!这个句子其实就是大名鼎鼎的蒯恩了! |
| + | |
| | | |
| 也许,你已经有些糊涂了,让我们再好好看看究竟蒯恩是怎么操作的。首先,我们定义了一种具有动词的句子,也就是: | | 也许,你已经有些糊涂了,让我们再好好看看究竟蒯恩是怎么操作的。首先,我们定义了一种具有动词的句子,也就是: |
| | | |
− | <div style="text-align: center;"><u>把“X”中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变</u></div> | + | <div style="text-align: center;">'''把“X”中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变'''</div> |
| + | |
| | | |
| 我们不妨将这个句子记为<math>Q(X)</math>,其中的<math>X</math>就是一个空穴,可以往其中添放任何一个句子。例如,如果我们让<math>X</math>=“小明起床了”,那么原句子<math>Q(X)</math>就成为了一个完整的句子: | | 我们不妨将这个句子记为<math>Q(X)</math>,其中的<math>X</math>就是一个空穴,可以往其中添放任何一个句子。例如,如果我们让<math>X</math>=“小明起床了”,那么原句子<math>Q(X)</math>就成为了一个完整的句子: |
| | | |
− | <div style="text-align: center;"><u>把“小明起床了”中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变</u></div> | + | <div style="text-align: center;">'''把“小明起床了”中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变'''</div> |
| + | |
| | | |
| 按照<math>Q(X)</math>的意思对<math>X</math>进行操作就得到了新句子<math>Y</math>: | | 按照<math>Q(X)</math>的意思对<math>X</math>进行操作就得到了新句子<math>Y</math>: |
| | | |
− | <div style="text-align: center;"><u>小“小明起床了”明起床了</u></div> | + | <div style="text-align: center;">'''小“小明起床了”明起床了'''</div> |
| + | |
| | | |
| 在这个例子中,<math>Q(X)</math>显然与<math>Y</math>没有什么关系。 | | 在这个例子中,<math>Q(X)</math>显然与<math>Y</math>没有什么关系。 |
| + | |
| | | |
| 进一步,如果去除句子<math>Q(X)</math>中的空穴<math>X</math>,我们可以得到: | | 进一步,如果去除句子<math>Q(X)</math>中的空穴<math>X</math>,我们可以得到: |
| | | |
− | <div style="text-align: center;"><u>把中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变</u></div> | + | <div style="text-align: center;">'''把中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变'''</div> |
| + | |
| | | |
| 它也是一个句子(尽管它不完整),我们记它为<math>Q</math>。最关键的时刻来临了:我们让<math>X=Q</math>并代入<math>Q(X)</math>之中会怎样?也就是将除去空穴的句子部分<math>Q</math>放到<math>Q(X)</math>这个句子的空穴<math>X</math>之中: | | 它也是一个句子(尽管它不完整),我们记它为<math>Q</math>。最关键的时刻来临了:我们让<math>X=Q</math>并代入<math>Q(X)</math>之中会怎样?也就是将除去空穴的句子部分<math>Q</math>放到<math>Q(X)</math>这个句子的空穴<math>X</math>之中: |
| | | |
− | <div style="text-align: center;"><u>把“把中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变”中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变</u></div> | + | <div style="text-align: center;">'''把“把中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变”中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变'''</div> |
| + | |
| | | |
| 我们不妨把这个句子记做<math>Q(Q)</math>,因为我们把空穴<math>X</math>换成了残句子<math>Q</math>。之后,我们再按照这个句子所给出的使役动词进行操作,就能得到新句子<math>Y</math>,也就是: | | 我们不妨把这个句子记做<math>Q(Q)</math>,因为我们把空穴<math>X</math>换成了残句子<math>Q</math>。之后,我们再按照这个句子所给出的使役动词进行操作,就能得到新句子<math>Y</math>,也就是: |
| | | |
− | <div style="text-align: center;"><u>把“把中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变”中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变</u></div> | + | <div style="text-align: center;">'''把“把中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变”中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变'''</div> |
| + | |
| | | |
| 令人惊奇的是,经过动词操作之后创造的句子<math>Y</math>与原来的句子<math>Q(Q)</math>竟然是一模一样的!所以句子<math>Q(Q)</math>利用使役动词完成了“自复制”过程,也就是<math>Q(Q)=Q(Q)</math>。 | | 令人惊奇的是,经过动词操作之后创造的句子<math>Y</math>与原来的句子<math>Q(Q)</math>竟然是一模一样的!所以句子<math>Q(Q)</math>利用使役动词完成了“自复制”过程,也就是<math>Q(Q)=Q(Q)</math>。 |
| + | |
| | | |
| 我们把这种技巧称之为蒯恩以纪念它的发现者美国哲学家W.V. Quine。你会看到,这种技巧可以让我们不用“这句话”指代词就能够造出自指语句,比如下面这个句子: | | 我们把这种技巧称之为蒯恩以纪念它的发现者美国哲学家W.V. Quine。你会看到,这种技巧可以让我们不用“这句话”指代词就能够造出自指语句,比如下面这个句子: |
| | | |
− | <div style="text-align: center;"><u>把“把中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变得到的句子是假的”中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变得到的句子是假的</u></div> | + | <div style="text-align: center;">'''把“把中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变得到的句子是假的”中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变得到的句子是假的'''</div> |
| + | |
| | | |
| 注意,这个句子与前面的句子稍有不同,这就是在后面加上了一个判断“得到的句子是假的”。我们不妨记<math>F=</math>“得到的句子是假的”,并且把: | | 注意,这个句子与前面的句子稍有不同,这就是在后面加上了一个判断“得到的句子是假的”。我们不妨记<math>F=</math>“得到的句子是假的”,并且把: |
| | | |
− | <div style="text-align: center;"><u>把“X”中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变得到的句子是假的</u></div> | + | <div style="text-align: center;">'''把“X”中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变得到的句子是假的'''</div> |
| + | |
| | | |
| 这句话记为<math>Q^oF(X)</math>,其中<math>^o</math>符号表示将两个句子粘合在一起形成新的句子,于是<math>Q^oF(X)</math>就是: | | 这句话记为<math>Q^oF(X)</math>,其中<math>^o</math>符号表示将两个句子粘合在一起形成新的句子,于是<math>Q^oF(X)</math>就是: |
| | | |
− | <div style="text-align: center;"><u>把“把中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变得到的句子是假的”中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变得到的句子是假的</u></div> | + | <div style="text-align: center;">'''把“把中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变得到的句子是假的”中的第一个字放到左引号前面,其余的字放到右引号后面,并保持引号及其中的字不变得到的句子是假的'''</div> |
| + | |
| | | |
| 我们可以验证,经过<math>Q^oF(Q^oF)</math>句子所描述的操作之后得到的句子跟<math>Q^oF(Q^oF)</math>是一模一样的。所以这句话就相当于:“这句话是假的”。我们没使用“这句话”指代词就实现了自指。 | | 我们可以验证,经过<math>Q^oF(Q^oF)</math>句子所描述的操作之后得到的句子跟<math>Q^oF(Q^oF)</math>是一模一样的。所以这句话就相当于:“这句话是假的”。我们没使用“这句话”指代词就实现了自指。 |
| + | |
| | | |
| 有关更多的语言中的蒯恩操作的讨论请参看《[http://book.douban.com/subject/1291204/ 哥德尔、艾舍尔、巴赫——集异璧之大成]》一书的对话《G弦上的咏叹调》,以及《[http://ebooklink.net/g/detail/0198534507/Diagonalization%20and%20Self-Reference%20%28Oxford%20Logic%20Guides%29/ Diagonalization and Self-Reference]》一书。 | | 有关更多的语言中的蒯恩操作的讨论请参看《[http://book.douban.com/subject/1291204/ 哥德尔、艾舍尔、巴赫——集异璧之大成]》一书的对话《G弦上的咏叹调》,以及《[http://ebooklink.net/g/detail/0198534507/Diagonalization%20and%20Self-Reference%20%28Oxford%20Logic%20Guides%29/ Diagonalization and Self-Reference]》一书。 |
| + | |
| | | |
| 也许你会觉得我们在玩弄语言游戏,然而,这种语言技术却在数学和计算机中起到了非常大的作用,因为蒯恩句子恰恰就是自复制机器的逻辑基础,也是Godel定理证明过程中的关键一步。下面,我们分别对建构性自指和破坏性自指进行详细地介绍。 | | 也许你会觉得我们在玩弄语言游戏,然而,这种语言技术却在数学和计算机中起到了非常大的作用,因为蒯恩句子恰恰就是自复制机器的逻辑基础,也是Godel定理证明过程中的关键一步。下面,我们分别对建构性自指和破坏性自指进行详细地介绍。 |