与C或Pascal等经典编程语言相比,Logic可以优雅,紧凑和声明地表达关系。自动定理证明甚至能够决定知识库是否在逻辑上需要查询。存储在知识库中的证明微积分和知识是严格分开的。子句正规形式中描述的公式可以用作任何定理证明器的输入数据,与所使用的证明演算无关。这对于推理和知识表示具有重要价值。
如果一个人希望实现不可避免地具有程序性组件的算法,那么纯粹的声明性描述往往是不够的。逻辑编程的先驱之一罗伯特科瓦尔斯基(Robert Kowalski)用这个公式提出了这一观点
算法=逻辑+控制。
这个想法在PROLOG语言中得以实现。PROLOG用于许多项目,主要用于人工智能和计算语言学。我们现在将简要介绍这种语言,介绍最重要的概念,展示它的优点,并将其与其他编程语言和定理证明进行比较。那些寻找完整编程课程的人可以使用[Bra11,CM94]和手册[Wie04,Dia04]等教科书。
PROLOG语言的语法只允许使用Horn子句。逻辑表示法和PROLOG的语法并列在下表中:
PL1 /子句正常形式PROLOG描述
(¬阿1 ∨ … ∨¬甲米∨ B)B: –一个1
,… ,A 米。规则
(A 1 ∧ … ∧甲米)⇒乙B: –一个1
,… ,A 米。规则
答:事实
(¬阿1 ∨ … ∨¬甲米)–甲1
,… ,A 米。询问
¬(A 1 ∧ … ∧甲米)–甲1
,… ,A 米。询问
W. Ertel,人工智能导论,67
计算机科学本科专业,
DOI
10.1007 / 978-0-85729-299-5_5,©Springer-Verlag London Limited 2011
1.
孩子(奥斯卡,莫文蔚,坦诚)。
2.
孩子(玛丽・卡伦,坦诚)。
3.
孩子(前夕,安妮,奥斯卡)。
4.
孩子(亨利,安妮,奥斯卡)。
6.
孩子(克莱德,玛丽,oscarb)。7
8个孩子(X,Z,Y): – 孩子(X,Y,Z)。9
1.
后代(X,Y): – 子(X,Y,Z)。
2.
后代(X,Y): – 子(X,U,V),后代(U,Y)。
图5.1 PROLOG程序与家庭关系
这里A 1 ,…,Am,A,B是文字。与PL1一样,文字是用谓词符号构造的,其中术语作为参数。正如我们在上表中所看到的,在PROLOG中,在严格的逻辑意义上没有否定,因为文字的符号由其在子句中的位置决定。