我们以上面批评过的那种含混不清的思维为例,看看在PROLOG类型系统中计算数值的方法。这里,含有变量的目标被转换成找出变量值的要求。目标“系属(〔a,b〕,〔c,d〕,X)”意味着“找到一个X,它是系属〔a,b〕和〔c,d〕的结果”。如果公理写得正确,就能找到数值。在这个例子中,X被限定为〔a,b,c,d〕。可将这一目标同系属(〔a,b〕,〔c,d〕,〔a,b,c,d〕)作对比,后者的目标是要确证〔a,b,c,d〕就是所要的结果。合理地正确运行的 PROLOG程序的特性是,只要程序能找到一个数值,就能对其加以确证。〔要得到相反的性质就困难得多了(Shoham and McDermott 1984)。
这里的问题是,虽然证实结论的思想一般可以归结为演绎(因为它恰恰就是证明某事物的思想),但是计算数值的思想却并非如此。从逻辑的观点看,系属([a,b],[c,d],X)只不过是(非(存在(X),系属([a,b],[c,,d],X)))的司寇伦式的翻版。(关于司寇伦形式和“非”的解释可参阅任何教科书。)通过找寻X的值,用反向链接证实这种结论,实质上是一种有用的例外情况。如果将其扩展到反向链接之外,这种思想就会完全失败。勒克姆和尼尔森(Luckham and Nilsson1971)给出一个可用于任何分解证明的变体形式,但是对于每个变量,并非每个分解都生成单值。更重要的是,一旦将逻辑扩展到有限可公理化的一阶理论之外(这种情况常常出现在知识表述事务之中),整个分解思想和司寇伦形式就变得不起作用了。
即使在这一思想有效时,逻辑也无法提供一个答案构造的一般性理论。我们来看R·莫尔的“马桶炸弹”问题:你从邮件中收到两个无法区别的滴嗒作响的东西,另有匿名电话警告说,其中肯定有一个是炸弹。从看过的电影中得知,把炸弹放入抽水马桶是一种可靠的防止爆炸的办法。你该怎么办?答案是,把两个东西都放入马桶。(也许放入浴缸更好。)但是如果我们把这个问题变为如下逻辑形式:
结果(计划,与(消除爆炸(物体1),消除爆炸(物体2)))
人工智能哲学
232