█ 本文译自 Stephen Wolfram 2017年7月19日的博客文章:The Practical Business of Ontology: A Tale from the Front Lines
化学与哲学
"我们正面临一项抉择,把化学品当作一座城市,还是一个数字?" 昨天我花了一整天时间设计 Wolfram 语言的新功能,就像过去30年的每一天一样。昨天下午的一场快节奏会议中我们讨论了如何扩展 Wolfram 语言在化学领域的功能。
我们所讨论的问题在某种程度上具有典型的实用性。但事实证明,和以往我们面临的诸多问题一样,我们所做的事情最终会涉及到一些深层次的知识问题。而真正得到正确答案,并成功设计能经受时间考验的语言功能,需要我们深入思考,像哲学家一样思考。
当然,问题的一方面是我们所要处理的是前所未有的问题。传统的计算机语言只跟抽象数据打交道,而不会直接与化学品对话。但 Wolfram 语言则试图把与世间万物相关的知识囊括进来,这意味着我们必须与现实中的物品打交道,比如化学品。
我们在 Wolfram 语言中建立了一整套体系来应对世间万物,我们称之为实体(Entity)。实体可以是城市(比如New York City)、电影、星球、或无数种其他事物。实体具有某类名称("New York City"),并有明确的属性(如人口、占地面积、成立日期,等等)。
化学实体早已有各种标记,如水、乙醇、或碳化钨。每一种化学品实体都有各自的属性,如分子量、结构图、或沸点。
我们已经知道成百上千种化学品的各种属性。但所有这一切都是实实在在的化学品:可以放在试管中进行实验的具体的化合物。
而昨天我们想要搞清楚的是如何对付抽象的化学品,即我们自己凭空构建的化学品,比如给出一个抽象的图表表示化学结构。这些可以用实体表示吗?像水或纽约市一样?还是把它们当成更抽象的事物,比如数列、或者数学图表?
当然,我们能够构造的抽象化学品是已经能用实体表示的,比如蔗糖或阿司匹林。但这里我们必须明确一点:我们讨论的是单个的蔗糖或阿司匹林分子,还是这些分子组成的材料?
在一定程度上,这种区分很容易产生混淆。因为我们可能会以为,知道了分子结构,就等于知道了一切,不过是个计算问题而已。并且有些属性,如分子质量,根据分子结构来计算基本上是小菜一碟。但其它属性,比如熔点,可就是另一回事了。
可这是否只是个暂时问题(会不会制约语言的长期设计理念?),还是个永久性的根本问题?好吧,我恰好涉猎过一些基本的科学领域,能够回答这个问题。是的,这是个根本性的问题。这与我称之为计算型不可约的理念关联。举例来说,无穷数量的某种材料,其熔点可能实际上就是无法计算。(这与平铺问题的不确定性有关;拼贴瓷砖就像观察分子如何排列成为固体一样。
有这点基本(而不是前沿)科学知识,我们可以把化学品的批量版本和单个分子区别开来。显然,水分子和一杯水之间有紧密的关系。但它们之间仍存在本质上的不同,对各自属性的计算方法也不同。
至少原子没有问题
好,我们来讨论下单个的分子。显然它们是由原子组成的。至少当我们谈论原子时,我们是有理论基础的。可以说,任何分子都是一些确定的原子的集合,虽然当讨论聚合物时,我们也许希望考虑"参数分子"。
但至少将原子的类型作为实体考虑是安全的。毕竟,每个原子类型都对应于一个化学元素,而周期表中只有数量有限的原子。当然,原则上可以想象其他的 "化学元素";甚至可以认为一颗中子星就像是一个巨大的原子核。但再次,这里必须合理区分:基本稳定的原子数量是非常有限的,而其他大部分则转瞬即逝。
然而,有一点必须注意。"化学元素"并不像人们想象的那么明确。因为它总是不同同位素的混合。比方说,不同的钨矿,其混合物可能会改变,从而得到不同的有效原子质量。
实际上,这是用实体表示原子类型的一个很好的理由。因为这样的话,只需要有一个表示钨的单个实体就可以用来说明分子。而且仅当我们想要获得的原子类型属性取决于从哪个矿提炼时,才需要明确这个概念。
在一些情况下(例如重水),人们需要在明确的化学情境下讨论同位素。但是大多时候,只要指定化学元素就足够了。
要指定一个化学元素,只需要给出原子序数 Z。教科书会告诉你,要指定一个特定的同位素,只需要说明它包含多少个中子。但这忽略了钽元素的个别情况。因为你看,钽的天然形式之一(180mTa)实际上是钽核的激发态,这恰好是非常稳定的。为了正确地说明这一点,必须给出其激发水平以及其中子数。
从某种意义上说,量子力学在这里派上了用场。因为尽管原子核的激发态可能有无数个,量子力学说,它们只能通过两个离散值来表征:自旋和奇偶性。
每个同位素和每个激发态都不同,并且具有各自的特定属性。尽管如此,同位素世界,比方说与动物世界相比,往往更加有序。因为量子力学认为,同位素世界中的一切都可以通过有限的离散量子数来表征。
我们从分子、原子,谈到了原子核,现在来看看粒子吧!粒子的数量更加庞大。有些大家都很熟悉,如电子和质子,很容易用 Wolfram 语言中的实体所表示。但还有更多的粒子,只有其中一些很容易被表征出来,比如核子。基本上可以说:"这是一个粲夸克 - 反粲夸克系统",或者类似的表述。但在粒子物理学中,人们要研究量子场理论,而不仅仅是量子力学。并且不仅仅是"基本粒子计数";还必须考虑虚拟粒子的可能性等等。最后,可以存在什么样的粒子,这个问题非常复杂,具有计算不可约性。(例如,胶子场的稳定状态有哪些可能比我上面提到的与熔点有关的平铺问题复杂得多。)
也许有一天我们会有一套完整的基础物理学理论,甚至这套理论会更简单。尽管想到这个会令人兴奋,但在这里并不会有太大帮助。因为计算不可约性意味着现象和本质之间有一个不可缩小的距离。
在创造一种描述世界的语言时,我们需要讨论的是实际上可以观察和计算的事物。我们需要考虑基础物理学,以避免导致混乱。 但是我们也需要关注科学发展的实际历史,以及已经被测量的实际事物。例如,可能的同位素有无数个。但是对于大多数目的而言,为已知的事物建立实体已经相当有用了。
可能化学品的空间
那么我们怎么可以表示所有这些潜在的分子呢?在第一次近似中,我们可以通过图表指定它们的化学结构,其中每个节点是一个原子,每条边是一个键。
"键"到底是什么?虽然它在化学中非常有用,但在某种程度上却是一个模糊的概念,是量子力学的某种半经典近似。有一些标准的附加位: 双键,离子化状态等。而实际上,只要适当标记原子和键图以表征分子结构,化学研究就可以成功进行。
那么化学物质是由实体还是用抽象图表表示?如果它是我们已经听说过的一种化学物质,就像二氧化碳,用实体表示似乎很方便。但如果它是一种之前从未被讨论过的新化学物质呢?可以考虑创建一个新的实体来表示它。
任何一个有自尊的实体,最好有一个名字。那么这个名字是什么呢?在 Wolfram 语言中,它可以是表示结构的图表。但也许人们想要一个用字符串表示的普通文本名称。总之,存在一个采用 IUPAC 命名方式的化学名称,如1,1′-{[3-(dimethylamino)propyl]imino}bis-2-propanol。或是更加电脑友好的 SMILES形式:CC(CN(CCCN(C)C)CC(C)O)O。无论其底层图表是什么,都可以生成一个字符串来表示它。
但这可能直接导致一个问题:字符串不唯一。实际上,无论人们选择如何写出图表,都不能永远是唯一的。特定的化学结构对应于一个特定的图表。但绘制图表可以有许多方法,从而对应多种不同的表示。实际上,确定两个表示方法是否对应于同一个图(即"图形同构"问题)也是相当棘手的难题。
化学品到底是什么?
好吧,让我们想象一下,我们用一个图表来表示一个化学结构。首先,这是一个抽象的东西。图中有原子作为节点,但是我们不知道它们在实际的分子中如何排列(以及原子之间的距离有多少埃)。当然,答案没有完全明确定义。我们是在谈论分子的最低能量配置吗?(如果有相同能量的多个配置怎么办 ?)分子应该是独立存在,还是在水中,或是其他介质?分子应该如何制作?(也许它是一种蛋白质,在脱离核糖体时,折叠成特定的方式)。
如果我们只有一个实体,表示"自然发生的血红蛋白",那情形也许会简单得多。因为某种意义上,实体可以封装所有这些细节。
但如果我们想讨论的是一种从未被真正合成过的化学物质,就是另外一回事了。感觉上对任何可能的化学物质进行抽象表示貌似会更好。
让我们再来看看一些其他的例子。也许我们应该把所有东西都当成一个实体。就像每一个整数都可以是一个实体。是的,它们的数量是无穷的。但至少它们应该叫什么名字很明确。而实数就混乱多了。例如,实数不再具有与整数一样的唯一性:0.99999…与1.00000…其实是一回事, 只是写法不同。
那么整数数列或者数学公式呢?每一个可能的数列或每一个可能的公式都可以被当作一个不同的实体。但这并不是特别有用,因为很多人想做的是进入数列或者公式内部,并改变它们的结构。而实体的方便之处在于,它们只是个"单一的东西",人们不必"进去"。
那"抽象化学物质"是怎样一回事呢?这将是一个混合物。但当然,人们想要"走进去"并改变这个结构,这为用图表表示化学品提供了论据。
但这可能会导致不连续性。我们已经得到了二氧化碳的实体,并知道了很多属性。但我们得到的却是抽象地表示二氧化碳分子的图表。
我们可能会担心这会对工作人员和程序造成混淆。但是首先要注意的是,对于这两个东西分别表示什么,我们是可以区分的。实体表示的是自然产生的化学物质,其属性可能已经被测量。图表表示一个抽象的理论化学物质,其属性必须被计算得到。
但是显然两者之间必须有一座桥梁。给出一个具体的化学实体,其中一个属性将是表示分子结构的图表。给出一个图表,需要有某种化学识别(ChemicalIdentify)函数,即有点像 GeoIdentify,或者 ImageIdentify,试着从图表中识别出什么化学实体(如果存在的话),具有与该图表对应的分子结构。
当哲学遇到化学、数学、物理学……
当我写下上述一些问题时,我意识到这一切似乎很复杂。的确是的,确实很复杂。但在昨天的会议上,这一切都来得很快。当然,有一点很有帮助,到会的所有人都遇到过类似的问题,但每一种情况都是不一样的。
不知何故,这种情况比其它问题来得更深刻,更哲学。有人说,"我们来谈谈已命名的恒星。" 显然,对于距离较近的恒星,我们有明确的名字。在大规模的星际勘探中,还有一些其他的恒星可能已被确定,并给出了某种类型的标识符。但在遥远的星系中许多恒星将永远不会被命名。我们应该如何表示它们?
这引起了对城市问题的讨论。是的,有一些明确的特许城市已被正式指定名称,而且可能已经全部收录在 Wolfram 语言中,并定期更新。但是一些游牧民族为了某个季节而创造的村庄呢?我们应该如何表达呢?至少在一段时间,它有一定的位置。但它是一个明确的单一事物,还是会演变成两个村庄,或者根本就不再是一个村庄?
人们对于很多事情的身份,甚至存在性,争论几乎无休无止。但我们感兴趣的并不是这个,我们正在尝试构建一种对人们真正有用的软件。所以最终重要的是什么会有用。
当然, 这不是一个确切的事情。但它就像一般的语言设计:设想人们可能想做的一切,然后决定如何设置基元, 让人们来做这些事情。是否需要一些实体来表示化学品?是的, 这很有用。想用图表来表示任意的化学结构吗?是的, 这很有用。
但是,要看实际要做什么,必须非常深刻地理解每个情形中真正表示的是什么,以及一切是如何相关的。这就是哲学与化学、数学、物理等等相遇的地方。
令人欣慰的是, 昨天一小时的会议结束时(通过我所拥有的大约40年的相关经验,以及与会人员总计100年以上的经验),我们已经对如何对待化学物质和化学结构,提出了一个非常好的方案。这个方案在 Wolfram 语言中完全实现还将需要一段时间。但是这些灵感将对我们如何计算和解释化学产生深远影响。对我来说,弄清楚这样的事情是一种非常惬意的消磨时间的方式。我很高兴我在为推进 Wolfram 语言不懈努力的过程中亲历亲为。