弗雷格、Prolog与一种经验逻辑观,本文主要内容关键词为:逻辑论文,经验论文,弗雷格论文,Prolog论文,此文献不代表本站观点,内容供学术参考,文章仅供参考阅读下载。
[中图分类号]B815.9 [文献标识码]A [文章编号]1002-8862(2010)09-0079-04
弗雷格(Gottlob Frege)通过对旧逻辑中命题的主词和谓词赋予新的含义而提出了一种新逻辑即谓词逻辑,而从谓词逻辑发展而来的逻辑程序设计系统Prolog则提出了另一种新逻辑即非单调逻辑(nonmonotonic logic)。虽然Prolog的非单调逻辑并不是第一种非经典逻辑,但它却是在某些实践应用中被证明是极为有用的第一种非经典逻辑。
随着各种逻辑形式系统和逻辑程序设计系统的出现,逻辑推理的机械化取得了越来越多的成就,而整个形式逻辑的发展似乎也可以看成是一个机械化逐渐代替手工工艺的过程。按此类比,不妨认为弗雷格的逻辑变革不过是将检查数学证明有效性过程的机械化又推进了一步。在这场变革之前,由于数学证明一般都是用自然语言和数学语言写出的,要检查一个新的证明是否真正有效并不是一项容易的任务,通常要由训练有素的数学家来完成,但他们常常会因“手工工艺”的不同而对证明中的某一步是否真能从给定的前提中推出产生分歧。而如果一个数学证明是用形式语言写出的,其中的每一步都逻辑有效,那么证明的检查似乎就不会再有什么分歧,并且完全可以成为一项由机器来完成的纯粹机械性任务。
我们可以简单地考查一下弗雷格对数学证明的一些看法。在其《概念文字》一书的前言中,弗雷格写道:“为了避免任何直觉的东西悄然渗入,我尽力使推理链条不出现跳跃。在试图以最为严格的可能方式照此要求去做的时候,我发现语言的不完善是一个障碍;不管我准备接受的那些表达如何庞大,随着关系越来越复杂,我越来越难以达到我的目的所需要的精确性了。正是这种语言的不完善使我有了目前概念文字(ideography)的想法。因此,它的首要目的就是给我们提供推理链条有效性的最可靠的检验,并指出每一个企图悄然潜入的假设,以便能找出其来源。”①而在其《数学中的逻辑》一文中,弗雷格也表达了类似的看法:“我们必须避免像‘稍微想一下就能明白’,或者‘我们很容易看出’这样一类表达。我们必须把‘稍微想一下’变成语词(words),以便我们能够看出它包含了何种推论,并且运用了何种前提。在数学中,我们千万别满足于某些东西是显然的或者我们信任某些东西这一事实,而是必须努力弄清楚使我们产生信任的推论之网。只有这样,我们才能够发现初始真理是什么,并且也只有这样,系统才能够被构造出来。”②这两段引文清楚地表明,弗雷格逻辑变革的一个主要目的就是为了从数学证明中消除“任何直觉的东西”,而要达到这一目的,弗雷格认为把自然语言和数学语言转换成一种特殊的“概念文字”即形式语言是必要的。如此一来,数学证明有效性的检查似乎就因每一步都严格无误而变得非常简单甚至完全可以由机器来做了。
实际上,在弗雷格之前,已有耶芳斯(William Stanley Jevons)明确提出了逻辑推理机械化的想法,并于1869年造出了一台逻辑机。在其《论逻辑推理的机械实施》一文中,耶芳斯对这台机器做了详细的说明,③而在其《科学的原理》一书中,耶芳斯再次对这台机器做了概要的说明。④这一被称做“耶芳斯的逻辑钢琴”的机器外表形似一架钢琴,通过其上的一些按键,操作者输入一些前提信息后就可使逻辑推理得以机械地进行。结合布尔(George Boole)所做的一些数学和逻辑工作,耶芳斯评价他的这台机器说:“他要通过数页复杂的计算才能得出的结论这台机器一两分钟就能得出。那些结论不仅很容易得出,而且它们也被证明是真的,因为除了三个基本的思维规律外,推理过程的每一步都不包含任何模糊不清的东西。”⑤弗雷格在《布尔的逻辑演算和概念文字》一文中明确提到了耶芳斯的这台逻辑机,其中弗雷格写道:“我认为推理中所犯的几乎所有错误的根源都在于概念的不完善。布尔预先设定了所要运用的逻辑上完善的概念,因而这一任务中最困难的部分得到了解决;这样,他就可以通过机械的计算过程从给定的前提进行推理了。斯坦利·耶芳斯事实上发明了一台机器来做这事。”⑥由此可见,逻辑演算的机械化与弗雷格“概念文字”的提出有着直接的关联。
不过,虽然弗雷格致力于提出一种“概念文字”,从而可使数学证明或者逻辑推理机械化,但弗雷格也明确表明了这样一种观点:“布尔式的公式语言仅仅表现了我们思维的一部分,我们的思维总体而言绝不能被当做一台机器来对待或由纯粹的机械活动来代替。”⑦显然,弗雷格虽然认为数学证明有效性的检查可以在逻辑演算的基础上机械化,但他并不认为人类思维也可以在逻辑演算的基础上机械化,更不可能在耶芳斯的逻辑机中得到全面反映。这似乎是因为人类思维绝非仅仅由逻辑演算就能刻画,其思维活动更多地表现出与逻辑演算不同的特点。当然,耶芳斯的逻辑机本来也只是着眼于机械的数学证明,并不是着眼于反映真实的人类思维。而当Prolog出现后,我们看到,机器在反映人类实际思维活动方面似乎大大前进了一步。
Prolog是自动定理证明和自然语言处理两种研究领域相结合而产生的一种逻辑程序设计系统,其于20世纪70年代初出现后一直处于不断的发展完善中。Prolog系统通常由事实(facts)和规则(rules)两部分构成,不仅包含形式语言和推论规则,而且包含一种用来进行搜索和构成证明的复杂控制机制,这意味着Prolog语句除了有陈述解释(declarative interpretation)的功能,还有程序解释(procedural interpretation)的功能。例如,“所有天鹅都是白的。”这一普通语句用谓词演算的语言可表示为:(x)(swan(x)→white(x)),而用Prolog语言则可表示为:white(X):-swan(X),读做“X是白的,如果X是天鹅”。其中陈述解释指“所有天鹅都是白的”,而程序解释则指“若要确立X是白的这一目标,可以试着确立X是一只天鹅”。假如有这样一个Prolog程序,使用者进行如下质询:?-p(a).即“p(a)是真的吗?”,那么Prolog就试图从数据库中“构造”出一个p(a)的证明,如果证明成功则回答“yes”,反之则回答“no”。这里所说的“构造”,指的是Prolog包含一个指令集(通常被称为Prolog解释者)来用于系统地搜索各种可能性,搜索的方法是深度优先(depth first)、从左至右(eft-to-right)。如果一条路径的搜索失败,就原路返回(backtracking)到Prolog解释者指定的节点上再次进行搜索。⑧
在经典逻辑演算中,如果A是某个公式集的后承即ГA,那么A也一定是Г∪{A}的后承(实际上可以是Г并上任意一个公式集的后承),即Г∪{A}A,这即是经典逻辑的单调性(monotonicity)。而人类的许多日常思维活动并不具有这种单调性,因为即使在某个时候从当时的前提信息中得出了一个事实或事态的否定,但当前提信息中一旦出现了这个事实或事态后,就不能再得出这个事实或事态的否定了。实际上,人类日常思维活动一般具有非单调性(nonmonotonicity)的特点,常常会根据前提信息的变化而随时调整相应的推理结论。在这方面,Prolog与经典逻辑演算相比,其推理过程更加符合人类日常思维的情况。对此,我们可以举一简单的例子来加以说明。设想我们将从A地去B地的火车时刻信息用Prolog语言编成如下一个程序:
p(6).
p(7).
p(8).
p(9).
现在,我们向该程序询问:?-p(10).,即“有10点钟的火车吗?”,回答是“no”,因为Prolog通过搜索后显然无法从数据库中找到“p(10).”。这里,Prolog运用了失败-否定(negation-by-failure)推理,即通过把“p(10).”这一语句与数据库中的语句一一进行匹配来试图证明“p(10).”,当这一证明失败后,Prolog就得出了“not p(10).”的结论。但如果将语句“p(10).”作为一个事实补充到数据库中,Prolog显然就不能再推出“not p(10).”这一结论了,而是会推出“p(10).”,从而回答“yes”。这样一种推理在人类日常思维活动中是再自然不过的事了,但经典逻辑演算却无法做到这一点,而Prolog与经典逻辑演算也正是在这一似乎很微不足道的方面表现出了极大的不同。不过,就失败-否定而言,Prolog的否定与经典二值逻辑的否定似乎并无区别,因为两种否定都可表明:当p为真时not p为假,而当p为假时not p为真。
Prolog与经典逻辑演算之间存在着另外一种不同。在经典逻辑演算中,作为前提的语句的顺序对结论的得出并无影响,即如果{B,C,D}A成立,那么{D,B,C}A也一样成立。但在Prolog中,前提顺序的不同会导致结论的极大差异。这一点可由如下一个简单的例子来说明。考虑这样一个程序:
p(a).
p(X):-p(X).
如果向程序询问:?-p(a).,Prolog会立即回答“yes”,因为它只要检查一下程序的第一行就可以发现p(a)是真的。然而,假如将上面两个前提的顺序颠倒一下,即将程序改写成:
p(X):-p(X).
p(a).
现在,如果进行同样的询问:?-p(a).,程序在执行第一行时,显然会因“要证明p(a)就先要证明p(a)”而陷入一种恶性循环,从而无法继续搜索包含问题答案的第二行。这个简单的例子表明:Prolog与经典逻辑演算相比,其对前提顺序的要求相对来说要更为严格。
Prolog和经典逻辑演算之间还有一种重要的不同。经典逻辑演算的推论在如下这种意义上具有有效性和保真性,或者说具有确定性,即如果前提为真则结论必然为真。弗雷格对此明确地指出:“事实上,证明的目的不仅仅是使一个命题的真不容置疑,而且也是让我们洞察到真彼此之间的依赖性。”(11)正因如此,经典逻辑演算始终关注推论的确定性。但对于Prolog来说,其推论并不具有这种确定性,也即是说,即使前提为真,Prolog有时也会得出假的结论。以前文中询问从A地去B地的火车时刻信息为例。向程序询问:?-p(10).,即“有10点钟的火车吗?”,Prolog会运用失败-否定回答“no”。但即使数据库中的信息都是正确的或都为真,这一结论也可能是假的,原因是可能有一班10点钟从A地去B地的火车信息恰恰被遗漏了。这里显然表明了这么一个问题,即在日常思维活动中,如果作为前提的信息本身并不充分,那么一味要求其推论像在经典逻辑演算中那样具有确定性似乎没有什么太大的意义。火车时刻信息虽然一般都比较可靠,但不会有人认为它是确定的。对于处理这一类的问题,使用一种能够得出虽不完全确定但却比较合理的结论的逻辑似乎更为可取。
Prolog的逻辑非常适合于处理类似时刻表信息这样的问题,而在处理形式数论的证明问题上,经典逻辑演算似乎更胜一筹。在其1993年的《经典逻辑对非经典逻辑:经典逻辑的普遍性》这篇研究报告中,戈巴依(Dov M.Gabbay)系统阐述了一种将模态逻辑、时态逻辑等非经典逻辑翻译为经典逻辑的思想和方法,从而提出了经典逻辑的普遍性问题。按照戈巴依的看法,经典逻辑虽然反过来也可以翻译为直觉主义逻辑、线性逻辑甚至模态逻辑,但对于自动演绎来说,把非经典逻辑翻译成经典逻辑是最为简单而实用的。⑨戈巴依坦言,他这篇报告的总体目标就是要表明,从自动演绎的观点看,经典逻辑比非经典逻辑有更多的优点,完全可以被当做一种普遍逻辑系统来使用。⑩而Prolog的出现似乎表明,非经典逻辑在自动演绎方面虽然没有经典逻辑那么多的优点,但在许多情况下对人类实际思维活动的刻画却是非常恰当的。
通过将Prolog与经典逻辑演算进行对比,似乎可以得出如下结论:并不存在一种适用于所有领域或问题情境的普遍逻辑,而是不同的逻辑适用于不同的领域或问题情境。除了Prolog的非单调逻辑之外,许多非经典逻辑的提出似乎都可以佐证这一点。如量子逻辑,虽然逻辑学家们至今还在就量子逻辑是否是一种逻辑存在着争论,(12)但这样一种逻辑的提出无疑是因为用经典逻辑来处理量子世界中的一些问题存在着更大的困难。各种非经典逻辑的可能性揭示了这样一种哲学观点,即逻辑是经验的而不是先验的。换句话说,在不同的领域或问题情境中,人们可以选择仅仅适用于该领域或该情境的逻辑。而这也就表明,适用于一种领域或情境的逻辑可能与适用于另一种领域或情境的逻辑不同。不过,一些非经典逻辑如量子逻辑至今不怎么成功让逻辑是经验的而不是先验的这一观点并没有得到真正的支持,而Prolog的成功或者说一种非单调逻辑的成功则使这种观点确确实实得到了真正的支持。
实际上,早在20世纪50年代,蒯因在其《经验论的两个教条》一文中已经表明了逻辑是可修正的这样一种思想:“相反,由于同样的原因,没有任何一个陈述可免于被修正,甚至作为一种简化量子力学的方式已提出了对排中律的修正。这样一种转变与开普勒代替托勒密、爱因斯坦代替牛顿或者达尔文代替亚里士多德这一类的转变原则上有什么区别呢?”(13)由于Prolog的逻辑反映了人类日常思维活动的一个重要方面,即不像经典逻辑那样从确定的前提得出确定的结论而是从可接受的前提得出合理的结论,所以,Prolog的出现在一定程度上支持了蒯因认为逻辑是可修正的思想,并进而从一个方面支持了这一结论,即逻辑是经验的而不是先验的。
注释:
①Begriffsschrift,G.Frege,in Jean van Heijenoort(ed.),From Frege to Gdel,Cambridge:Harvard University Press,1967,pp.5-6.
②G.Frege,"Logic in Mathematics",Hans Hermes,Friedrich Kambartel and Friedrich Kaulbach(ed.),Posthumous Writings,Chicago:The University of Chicago Press,1979,p.205.
③W.S.Jevons," On the Mechanical Performance of Logical Inference",Philosophical Transactions of the Royal Society,160,1870,pp.497-518.
④⑤W.S.Jevons,The Principles of Science,London:Macmillan,1877,pp.107-114,pp.113-114.
⑥⑦G.Frege,"Boole's Logical Calculus and the Concept-script",Hans Hermes,Friedrich Kambartel and Friedrich Kaulbach(ed.),Posthumous Writings,Chicago:The University of Chicago Press,1979,pp.34-35,p.35.
⑧M.Bramer,Logic Programming with Prolog,Springer,2005,pp.1-11,pp.99-107.D.Gillies,Artificial Intelligence and Scientific Method,Oxford:Oxford University Press,1996,pp.72-97.
⑨⑩D.M.Gabbay,"Classical vs Non-classical Logics:The University of Classical Logic",Technical Report,MPI-I-93-230,Max-Planck-Institut für Informatik,1993,pp.98-99.
(11)G.Frege,The Foundation of Arithmetic,New York:Harper & Brothers,1950,p.2.
(12)M.Pavicic,and N.D.Megill,"Is Quantum Logic a Logic?",K.Engesser,D.M.Gabbay and D.Lehmann(ed.),Handbook of Quantum Logic and Quantum Structures:Quantum Logic,Amsterdam:Elsevier,2009,pp.23-48.
(13)W.V.O.Quine,"Two Dogmas of Empiricism",From a Logical Point of View,New York:Harper & Row,1963,p.43.