逻辑式程序设计语言.ppt

上传人:王** 文档编号:188172 上传时间:2023-04-04 格式:PPT 页数:37 大小:520.50KB
下载 相关 举报
逻辑式程序设计语言.ppt_第1页
第1页 / 共37页
逻辑式程序设计语言.ppt_第2页
第2页 / 共37页
逻辑式程序设计语言.ppt_第3页
第3页 / 共37页
逻辑式程序设计语言.ppt_第4页
第4页 / 共37页
逻辑式程序设计语言.ppt_第5页
第5页 / 共37页
逻辑式程序设计语言.ppt_第6页
第6页 / 共37页
逻辑式程序设计语言.ppt_第7页
第7页 / 共37页
逻辑式程序设计语言.ppt_第8页
第8页 / 共37页
逻辑式程序设计语言.ppt_第9页
第9页 / 共37页
逻辑式程序设计语言.ppt_第10页
第10页 / 共37页
亲,该文档总共37页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《逻辑式程序设计语言.ppt》由会员分享,可在线阅读,更多相关《逻辑式程序设计语言.ppt(37页珍藏版)》请在优知文库上搜索。

1、第06章 逻辑式程序设计语言程序要对数据结构实施某个算法过程,算法实现计算逻辑 算法 = 逻辑 + 控制逻辑程序设计的基本观点是程序描述的是数据对象之间的关系。关系也是联系对象和对象、对象和属性的联系就是我们所说的事实。事实之间的关系以规则表述,根据规则找出合乎逻辑的事实就是推理逻辑程序设计范型是陈述事实、制定规则,程序设计就是构造证明。程序的执行就在推理谓词变元的个数称作目(arity),有单目、N目谓词之称 N-目谓词的例子。 谓词 目 含义 odd(X) 1 X是奇数 father(F,S) 2 F是S的父亲 divide(N,D,Q,R) 4 N除D得商Q和余数R 谓词例化 结果值 o

2、dd(2) False divide (23, 7, 3,2) Ture father (changshan, changping) True divide (23, 7, 3, N) N未例化, 不知真假谓词的量化量化谓词 结果值 Xodd(X) False Xodd(X) True X(X=2*Y+1odd (X) True XYdivide (X,3,Y,0) False XYdivide (X,3,Y,0) True, 如X =3,Y=1 XYdivide(X,3,Y,0) False, 但很难证明证明一个全称谓词是比较难的,因为最可靠的证明方法是枚举例证。 于是采取反证的方法,全称量

3、化的谓词取反量化谓词 取反Xodd(X) Xnot odd(X) 1Xodd(X) Xnot odd(X) 2X(X=2*Y+1odd(X) Xnot(X+2*Y+1odd(X) 3 Xnot(X=2*Y+1)or odd (X) 4 X(X=2*Y+1)and not add(X) 5XY divide (X,3,Y,0) XY not divide (X,3,Y,0) 6XY divide (X,3,Y,0) XY not divide (X,3,Y,0) 7XY divide (X,3,Y,0) XY not divide (X,3,Y,0) 8谓词演算的等价变换谓词演算的等价变换1以,

4、 消除、符号2化为前束范式,消除最外的符号,否定符号内移(XP(X) X( p(X)3用斯柯林变换消去存在量词 X(a ( X) b(X) Y c (X,Y) X(a (X) b(X) c (X, g(X)4 消除前束范式的全称量词 a(X) b(X) c (X,g(X) 一般谓词公式变换为子句的实例。一般谓词公式变换为子句的实例。号为号为“可推可推出出”5用分配率P(QR)=(PQ)(PR)化成合取范式 (a(X)c(X,g(X)(b(X)c(X,g(X) 经过以上变换,任何一复合公式均可成为如下形式: F = C1C2 Cn 且其中Ci称为子句 若以;代则有: Ci = L1 L2 Lv

5、= L1;L2;Lv 因此,任一公式均可化为连接的子句的集合6.2 自动定理证明自动定理证明 证明系统证明系统 事实即证明系统中的公理(axioms) 证明系统(proof system)是应用公理演绎出定理 (theorems)的合法演绎规则的集合 演绎也叫归约(deduction),是对证明系统中合法 推理规则的一次应用 演绎从公理导出结论(conclusion), 中间可利用以 这些规则演绎出的定理证明证明(proof)是个语句序列, 以每个语句得到证明而结束, 即每个句子要么演绎成公理, 要么演绎成前此导出的定理一个证明若有一个证明若有N个语句个语句(命题命题)则称则称N步证明步证明

6、反驳反驳(refutation)是一个语句的反向证明。是一个语句的反向证明。 它证明它证明 一个语句是矛盾的,一个语句是矛盾的, 即不合乎给定的公理即不合乎给定的公理 一个语句若能从公理出发推演出来,一个语句若能从公理出发推演出来, 则称则称合法合法语句语句, 任何合法语句也叫做任何合法语句也叫做定理定理(theorem) 从某一公理集合导出的所有定理集合称为从某一公理集合导出的所有定理集合称为理论理论(theory) 模型模型 从公理集合中导出定理集称之为从公理集合中导出定理集称之为理论理论, 有了理有了理论我们要解释它的语义必须借助某个论我们要解释它的语义必须借助某个模型模型(model)

7、。 因为形式系统只是符号抽象,借助模型我们可为每因为形式系统只是符号抽象,借助模型我们可为每个常量、函数、谓词符号找到真理性的解释。个常量、函数、谓词符号找到真理性的解释。 即定即定义每个论域,义每个论域, 并表明域上成员和常量公理之间的关并表明域上成员和常量公理之间的关系。系。 公理的谓词符号必须派定为域中对象的性质,公理的谓词符号必须派定为域中对象的性质, 函数派定为对域中对象的操作。函数派定为对域中对象的操作。 公理集合一般情况下只是定义的部分公理集合一般情况下只是定义的部分(偏偏)函数函数和谓词,和谓词, 是问题域的一个侧面。是问题域的一个侧面。 所以能满足该理论所以能满足该理论的模型

8、往往不止一个。的模型往往不止一个。例例 一个最简单的理论一个最简单的理论 公理集公理集: Xinterval(X)not interval (X+1) (a1) Xnot interval (X+1)interval(X) (a2)2=1+1 (a3) 从间隔数公理可导出定理从间隔数公理可导出定理: Xinterval (X)interval (X+2) (t1) Xinterval (X+2) interval(X) (t2)谓词谓词interval(间隔数间隔数)在整数域上有两个子域在整数域上有两个子域odd、even都能够满足都能够满足 间隔数理论不能证明间隔数理论不能证明interva

9、l(3),也不能证明也不能证明not interval(3)为真命题为真命题这就是这就是Milbert讨论过的讨论过的可判定可判定(decidability)问题问题.1936年年Church和和Turing证实谓词演算可判定性问题是没有解的证实谓词演算可判定性问题是没有解的 一旦我们断言一旦我们断言interval(3)或或interval(2)是真命题是真命题,我们立刻可通过我们立刻可通过演绎证明按这个理论写出的每一个谓词为真演绎证明按这个理论写出的每一个谓词为真.这就是这就是Godel和和Herbrand1930年证实的谓词演算具备的完整性年证实的谓词演算具备的完整性(completen

10、ess) 证明技术证明技术 从谓词演算具有完整性,从谓词演算具有完整性, 理论上可证明按公理理论上可证明按公理集合建立的任何理论。集合建立的任何理论。 关键是效率。关键是效率。 如果我们从公理出发做出每一个如果我们从公理出发做出每一个步骤,步骤, 在新的步骤上仍然要查找每一个公理,找出在新的步骤上仍然要查找每一个公理,找出可能的推理。如此下去就形成一个庞大的树行公理可能的推理。如此下去就形成一个庞大的树行公理集,集, 每层的结点表示一个公理的语句,每层的结点表示一个公理的语句, 其深度和宽其深度和宽度随问题和最初给出的公理而定,度随问题和最初给出的公理而定, 一层一步骤,一层一步骤, N层的树

11、就是层的树就是N步推理。步推理。 对于自动定理证明程序,对于自动定理证明程序, 只有穷举每条可能的证只有穷举每条可能的证明步骤才能说它是完全的。明步骤才能说它是完全的。 穷举完所有路径马上遇穷举完所有路径马上遇到组合爆炸问题,无论是深度优先还是广度优先,到组合爆炸问题,无论是深度优先还是广度优先,百步演绎可能的路径数都是天文数字。百步演绎可能的路径数都是天文数字。 归结定理证明归结定理证明J.A.Robinson1965年提出的年提出的归结法归结法(resolution) ,是命题,是命题演算中对合适公式的一种证明方法。演算中对合适公式的一种证明方法。 为了证明合适公为了证明合适公式式F为真,

12、为真, 归结法证明归结法证明 F恒假来代替恒假来代替F永真。把两子句永真。把两子句合一合一(unification)并消去一对正逆命题,故归结也译作并消去一对正逆命题,故归结也译作消解消解。归结证明的过程并称之归结演绎,。归结证明的过程并称之归结演绎, 其步骤如下其步骤如下:1把前题中所有命题换成子句形式。把前题中所有命题换成子句形式。2取结论的反取结论的反,并转换成子句形式并转换成子句形式,加入加入1中的子句集中的子句集.3在子句集中选择含有互逆命题的命题归结。用合在子句集中选择含有互逆命题的命题归结。用合一算法得出新子句一算法得出新子句(归结式归结式),再加入到子句集。,再加入到子句集。4

13、重复重复3,若归结式为空则表示此次证明的逻辑结,若归结式为空则表示此次证明的逻辑结论是矛盾,原待证结论若不取反则恒真。命题得证。论是矛盾,原待证结论若不取反则恒真。命题得证。 否则继续重复否则继续重复3。 例:归结证明例:归结证明 若有前题若有前题 待证命题待证命题 取反得新子句取反得新子句 p1 Q P P U p5 P p2 R Q p6 U p3 S R p4 U S 取待证命题的反,取待证命题的反, 得得PU, 它是它是连接的两个子句连接的两个子句P、U,把它们加到前题子句集,把它们加到前题子句集, 为为p5,p6。归结演绎如下图归结演绎如下图: Q P P p1-p5归结归结 Q R

14、 Q 再与再与p2归结归结 S R R 再与再与p3归结归结 S U S 再与再与p4归结归结 U U 再与再与p6归结归结 矛盾矛盾由本例可以看出两个问题:由本例可以看出两个问题:第一,归结法是由合一算法实现的。所谓第一,归结法是由合一算法实现的。所谓合一合一是找出是找出型式匹配的两子句,型式匹配的两子句, 将它们合一为归结式,将它们合一为归结式, 相当于相当于代数中的化简。代数中的化简。第二,如果得不出矛盾,那么归结法要无休止地做下第二,如果得不出矛盾,那么归结法要无休止地做下去,中间归结式出得越多,去,中间归结式出得越多, 匹配查找次数越多,匹配查找次数越多, 每每一步都做长时间计算,一

15、步都做长时间计算, Solution:利用切断利用切断(cut)操作,操作, 并利用对子句形式进并利用对子句形式进一步限制的一步限制的超级归结法超级归结法(Hyperresolution)。 Horn子句实现超归结子句实现超归结 Horn子句是至多只有一个非负谓词符号的子句子句是至多只有一个非负谓词符号的子句 Horn子句形式示例如下子句形式示例如下: P QS R T 其中只有一个非负谓词其中只有一个非负谓词S,可作以下演算:可作以下演算: 先将先将S移向右方移向右方 S P Q R T 按德按德摩根定律摩根定律 S (PQRT) 即即, 则则 S(P Q R T) 此条件此条件Horn子句

16、的意义是子句的意义是 if (PQRT) then S。 若若S为空,为空, 则为无条件则为无条件Horn子句,子句, 是一个断言是一个断言(事实事实)6.3 逻辑程序的风格逻辑程序的风格第一第一个特点是它不描述计算过程而是描述证明过程个特点是它不描述计算过程而是描述证明过程第二个特点是描述性第二个特点是描述性第三个特点是大量用表和递归实现重复操作第三个特点是大量用表和递归实现重复操作例例 求平均成绩的逻辑程序,打开一分数文件求平均成绩的逻辑程序,打开一分数文件scores, 读入分数求和并用的数读入分数求和并用的数N除之得平均成绩除之得平均成绩 average :- see(scores), getinput (Sum,N), seen (scores), Av is Sum /N, print (Average = , Av) getinput (Sum,N) :- ratom (X), not (eof), getinput (Sum1,N1), Sum is Sum1 + X, N is N11. getinput (0,0) :- eof. 6.4 典型逻辑程序设计语言典型逻

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > C/C++资料

copyright@ 2008-2023 yzwku网站版权所有

经营许可证编号:宁ICP备2022001189号-2

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!