11.3 通用性现象
在上一节中,我们了解到元胞自动机能够执行一些相当复杂的计算。但是,对于我们想要执行的每种特定计算,我们总是需要设置一个具有不同底层规则的元胞自动机。事实上,我们日常使用机械装置和其他设备的经验可能会让我们认为,为了执行不同类型的任务,我们总是需要使用具有不同底层结构的系统。
但计算机革命带来的非凡发现却表明,事实并非如此。相反,我们可以构建通用系统,其底层结构保持不变,但只需以不同的方式进行编程,就可以执行不同的任务。
实际上,这正是实用计算机的工作原理:计算机的硬件保持不变,但可以通过加载不同的软件来对计算机进行编程,以执行不同的任务。
通用性的概念也是计算机语言的基础。因为在每种语言中,都有一组原始操作,这些操作以不同的方式组合在一起来创建用于不同任务的程序。
特定计算机系统或计算机语言的细节肯定会影响执行特定任务的难易程度。但到目前为止,一个众所周知的关键事实是,通过适当的编程,任何计算机系统或计算机语言最终都可以执行完全相同的一组任务。
证明这一点必然正确的一个方法是,注意到任何特定的计算机系统或计算机语言都可以通过适当的编程来模拟任何其他系统或语言。
通常,这是通过让待模拟系统中的每个单独动作通过另一系统中的一系列动作来再现来实现的。实际上,这正是例如 Mathematica 的工作方式。当输入如 Log[15] 这样的命令时,实际上发生的是,实现 Mathematica 语言的程序会在所使用的任何计算机系统上执行相应的机器指令序列来解释这个命令。
(p 642)
既然现在已经在实用计算的背景下确定了通用性现象,人们可以立即在共同经验的其他领域看到它的各种类似物。人类语言就是一个例子。因为人们知道,给定一个单一的、固定的底层语言,就有可能描述几乎任意广泛的事物。而且,给定任意两种语言,大多数情况下都可以在这两种语言之间进行翻译。
那么自然科学呢?通用性现象在那里也相关吗?尽管它在计算和其他领域具有重要意义,但事实证明,过去从未认真考虑过通用性与自然科学的关系。
但本章和下一章我将展示的是,事实上,通用性在寻找表征和理解我们在自然系统中看到的复杂性的通用方法方面至关重要。
基本点是,如果一个系统是通用的,那么它必须能够有效地模拟任何其他系统,因此它必须能够产生与其他任何系统的行为一样复杂的行为。因此,知道一个特定系统是通用的,就意味着该系统能够产生在某种意义上任意复杂的行为。
但现在的问题是,什么样的系统实际上是通用的。
例如,当今的大多数机械设备都仅用于执行相当具体的任务,并不具有通用性。在电子设备中,也有像简单计算器和电子通讯录这样不具有通用性的例子。但到目前为止,尽管这些实用电子设备在表面上存在种种差异,但大多数都基于具有通用性的计算机。
然而,在某种程度上,这些计算机往往非常相似。实际上,它们基本上都基于相同类型的逻辑电路、相同的基本数据路径布局等。知道这一点后,人们可能会得出结论,认为任何具有通用性的系统都必须包含这些特定元素的直接类似物。但从计算机语言的经验来看,已经表明具有通用性的系统范围可能更广泛一些。
(p 643)
事实上,Mathematica 是一个特别好的例子,人们可以选择使用非常不同的操作集,但仍然能够实现完全相同类型的程序。
那么元胞自动机和其他具有简单规则的系统呢?这些系统有可能具有通用性吗?
起初,这似乎不太可能。因为从实用计算机和计算机语言中获得的直觉似乎表明,为了实现通用性,必须存在一些本质上相当复杂的元素。
但正如我们发现,简单规则不能导致复杂行为的直觉是错误的,同样,简单规则不能具有通用性的直觉也被证明是错误的。事实上,在本章后面,我将展示一个具有极其简单底层规则的元胞自动机示例,但它最终却被证明是具有通用性的。
过去,人们往往倾向于认为通用性是一种罕见且特殊的品质,通常只有那些特别构建来拥有这种品质的系统才具备。但本章的一个结论是,实际上,通用性是一种更为普遍的现象。在下一章,我将论证,例如,它在自然界中我们看到的许多重要系统中也同样存在。