论文部分内容阅读
[摘 要]基于逻辑的计算机语言的出现,为一些逻辑问题提供了更高效的解决途径。文章基于经典的逻辑推理问题,分别按照人类的正常思维过程和逻辑程序设计两种方案,分析推理得到问题的解,并比较总结逻辑程序的特点、优势和应用前景。
[关键词]逻辑问题;推理;逻辑程序设计
中图分类号:TP311.52 文献标识码:A 文章编号:1009-914X(2015)41-0216-01
1 概述
传统的程序设计都属于过程性语言,都是围绕设计解决问题的过程来进行编写。而在逻辑程序设计中,用户只需要对问题用逻辑程序语言进行描述,编写程序的逻辑部分,其余的分析计算工作,都交给逻辑程序处理器进行,迅速返回用户结果。1972年,法国科莫劳埃小组在实现了第一个逻辑程序设计语言PROLOG[1]。目前,国际上,具有回答集语义的逻辑程序方面的研究非常活跃[2]。
文章中我們讨论的问题使用具有回答集语义的逻辑程序来解决,程序运行的平台为smodels[3]。文章首先讨论使用逻辑程序解决日常生活中一些逻辑推理问题,并分析人的推理过程,并对这两种方式进行分析和比较,来说明逻辑程序设计解决该类问题的优势。
2.常见的逻辑推理问题分析
在我们的日常生活中,逻辑问题比较常见,尤其是公安系统中,有关复杂逻辑问题的推理更是疑难案件分析的重要环节。逻辑程序的出现,为这些与逻辑思维密切相关的问题,提供了更快捷的解决方法。例如,一天晚上,在一个由一对夫妇和他们的儿子、女儿组成的四口之家中,发生了一起谋杀案。家庭中的一个成员杀害了另一个成员;其他两个成员,一个是目击者,另一个是凶手的同谋。同时,已知以下六条信息:
(1)同谋和目击者性别不同。
(2)最年长的成员和目击者性别不同。
(3)最年轻的成员和被害者性别不同。
(4)同谋的年龄比被害者大。
(5)父亲是最年长的成员。
(6)凶手不是最年轻的成员。
问题:凶手、同谋、目击者分别是谁?
按照一般的推理方式来解决这个问题,步骤如下:
首先根据(5)和(2)对(2)重新表述:目击者是女性
根据(1)和上述推断,对(1)重新表述:同谋是男性
以上6个条件变为:
(a)同谋是男性。
(b)目击者是女性。
(3)最年轻的成员和被害者性别不同。
(4)同谋的年龄比被害者大。
(5)父亲是最年长的成员。
(6)凶手不是最年轻的成员。
然后,根据(a)(b),列出所有组合(x代表未知) :
根据(aa)得到进一步组合:
根据(cc)得到进一步组合:
根据(dd)得到进一步组合:
只有(ddd)组合没有不符合项。因此,母亲是凶手,父亲是同谋且年龄最大,儿子是被害人,女儿是目击者并年龄最小。
3 用逻辑程序语言解决逻辑推理问题
用逻辑程序方法来解决这个问题,更快捷高效。首先,用加权的约束逻辑程序来描述上面提到的问题,代码见图1:
这段程序在smodel系统(逻辑程序的一种推理机)中的运行结果见图2。
输出结果表明,该问题只有一个稳定模型,即母亲是凶手,父亲是同谋且年龄最大,儿子是被害人,女儿是目击者并年龄最小。系统提示的其它信息表示,系统运行时间极短,效率很高。文章使用加权的约束逻辑程序设计并和人的推理过程做出比较,使我们更清楚地认识到逻辑程序在解决逻辑推理问题的优势。
4 总结
文章通过经典逻辑推理问题,用人类的思维方法和逻辑程序两种途径进行求解,并分析两种方法的特点。实验证明,使用传统的编程语言来解决推理问题,效率低,且容易出错;而使用逻辑程序方法来解决逻辑问题,程序简洁,易于编写,极不容易出错,推理效率更高。
参考文献
[1] PROLOG 语言,它的应用与实现,刘椿年,曹德和著,科学出版社,1990.
[2] Lparse 1.0 User’s Manual (用户手册)
[3] 1) M.Gelfond and V. Lifschitz. The stable model semantics for logic programming. Logic programming:proc.of the Fifth int.Conf.and Symp.,pages 1070-1080,1988.
[关键词]逻辑问题;推理;逻辑程序设计
中图分类号:TP311.52 文献标识码:A 文章编号:1009-914X(2015)41-0216-01
1 概述
传统的程序设计都属于过程性语言,都是围绕设计解决问题的过程来进行编写。而在逻辑程序设计中,用户只需要对问题用逻辑程序语言进行描述,编写程序的逻辑部分,其余的分析计算工作,都交给逻辑程序处理器进行,迅速返回用户结果。1972年,法国科莫劳埃小组在实现了第一个逻辑程序设计语言PROLOG[1]。目前,国际上,具有回答集语义的逻辑程序方面的研究非常活跃[2]。
文章中我們讨论的问题使用具有回答集语义的逻辑程序来解决,程序运行的平台为smodels[3]。文章首先讨论使用逻辑程序解决日常生活中一些逻辑推理问题,并分析人的推理过程,并对这两种方式进行分析和比较,来说明逻辑程序设计解决该类问题的优势。
2.常见的逻辑推理问题分析
在我们的日常生活中,逻辑问题比较常见,尤其是公安系统中,有关复杂逻辑问题的推理更是疑难案件分析的重要环节。逻辑程序的出现,为这些与逻辑思维密切相关的问题,提供了更快捷的解决方法。例如,一天晚上,在一个由一对夫妇和他们的儿子、女儿组成的四口之家中,发生了一起谋杀案。家庭中的一个成员杀害了另一个成员;其他两个成员,一个是目击者,另一个是凶手的同谋。同时,已知以下六条信息:
(1)同谋和目击者性别不同。
(2)最年长的成员和目击者性别不同。
(3)最年轻的成员和被害者性别不同。
(4)同谋的年龄比被害者大。
(5)父亲是最年长的成员。
(6)凶手不是最年轻的成员。
问题:凶手、同谋、目击者分别是谁?
按照一般的推理方式来解决这个问题,步骤如下:
首先根据(5)和(2)对(2)重新表述:目击者是女性
根据(1)和上述推断,对(1)重新表述:同谋是男性
以上6个条件变为:
(a)同谋是男性。
(b)目击者是女性。
(3)最年轻的成员和被害者性别不同。
(4)同谋的年龄比被害者大。
(5)父亲是最年长的成员。
(6)凶手不是最年轻的成员。
然后,根据(a)(b),列出所有组合(x代表未知) :
根据(aa)得到进一步组合:
根据(cc)得到进一步组合:
根据(dd)得到进一步组合:
只有(ddd)组合没有不符合项。因此,母亲是凶手,父亲是同谋且年龄最大,儿子是被害人,女儿是目击者并年龄最小。
3 用逻辑程序语言解决逻辑推理问题
用逻辑程序方法来解决这个问题,更快捷高效。首先,用加权的约束逻辑程序来描述上面提到的问题,代码见图1:
这段程序在smodel系统(逻辑程序的一种推理机)中的运行结果见图2。
输出结果表明,该问题只有一个稳定模型,即母亲是凶手,父亲是同谋且年龄最大,儿子是被害人,女儿是目击者并年龄最小。系统提示的其它信息表示,系统运行时间极短,效率很高。文章使用加权的约束逻辑程序设计并和人的推理过程做出比较,使我们更清楚地认识到逻辑程序在解决逻辑推理问题的优势。
4 总结
文章通过经典逻辑推理问题,用人类的思维方法和逻辑程序两种途径进行求解,并分析两种方法的特点。实验证明,使用传统的编程语言来解决推理问题,效率低,且容易出错;而使用逻辑程序方法来解决逻辑问题,程序简洁,易于编写,极不容易出错,推理效率更高。
参考文献
[1] PROLOG 语言,它的应用与实现,刘椿年,曹德和著,科学出版社,1990.
[2] Lparse 1.0 User’s Manual (用户手册)
[3] 1) M.Gelfond and V. Lifschitz. The stable model semantics for logic programming. Logic programming:proc.of the Fifth int.Conf.and Symp.,pages 1070-1080,1988.