基于Prolog二元关系闭包运算的研究与实现_第1页
基于Prolog二元关系闭包运算的研究与实现_第2页
基于Prolog二元关系闭包运算的研究与实现_第3页
基于Prolog二元关系闭包运算的研究与实现_第4页
基于Prolog二元关系闭包运算的研究与实现_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于Prolog二元关系闭包运算的研究与实现摘要:在代数系统中,关系作为一种抽象工具,在计算机科学研究领域有着极其广泛的应用。本文在研究传统闭包求解方法的基础上,结合其思想给出了用人工智能语言Prolog实现传递闭包求解策略的思想与方法,并在实例中给予论证,此方法具有一定的典型研究意义及价值。论文关键词:二元关系,传递闭包,人工智能,回溯Prolog是逻辑程序设计(Programming in logic)的缩写。其理论基础是谓词逻辑,它是人们把逻辑作为程序设计的一种语言的努力结果。Prolog由于具有简洁的文法、丰富的表现力以及强大的逻辑推理能力,特别适用于解决人工智能方面的问题,目前已成为

2、实现专家系统最理想的语言工具1。代数结构中,构造关系上的各种闭包在实际中有很多重要的应用,例如,在编译程序中的语法分析中,常常要通过求定义在某字母表上有关语法规则的二元关系的传递闭包,来计算非终结符所能导出的字符表。对于怎样求关系R的闭包,离散数学中有着不同的方法,相对于自反、对称闭包求解方法,无论是用Warshall算法(详细介绍及求解方法见文献2和3)还是寻找连通路径法,传递闭包的求解都比较复杂,求解过程也容易出错。这时可根据传递闭包的定义和性质,用Prolog语言实现闭包运算。1 传统闭包求解1.1集合上二元关系的若干基本性质定义1 设集合A,RAA。形式定义2 R是自反的(Reflex

3、ive)(或R具有自反性)Iffx (xR xRx)。 R是反自反的(Irreflexive)(或R具有反自反性)Iffx (xR xRx)。 R是对称的(Symmetric)(或R具有对称性)Iffx,yA, xRy yRx。 R是反对称的(Antsymmetric)(或R具有反对称性)Iffx,yA, (xRyyRx x=y。 R是传递的(Transitive)(或R具有传递性)Iffx,y,zA, (xRyyRz xRz。定义2 设集合A,RAA。若R AA满足: R 是自反的(对称的和传递的); R R ; 对A上的任意满足和的二元关系R ,皆有R R ,则称R 为R的自反(对称或者传

4、递)闭包。关系R的自反闭包(Reflexive closure)通常记为r(R), 对称闭包(Symmetric closure)记为s(R), 传递闭包(Transitive closure)记为t(R)。r(R) ,s(R)及 t(R)分别是包含R且具有自反性、对称性或传递性的最小二元关系。1.2传统闭包求解方法对于怎样求关系R的闭包,离散数学中有着不同的方法,在介绍传统闭包求解方法前,先介绍两个概念。定义3 二元关系的逆设RAB,则R的逆(Inverse)或逆关系记为R-1,是从B到A的二元关系。形式定义R-1=(y,x)xRy 定义4 集合上的恒等关系设有集合A=x1,x2,xn,A上

5、的恒等关系IA= (x,x) x R 。根据闭包的定义及性质,求解各个闭包的一般方法如下: 自反闭包:若存在x A,把序偶(x,x)添加到关系R中即可,即r(R)=RIA 。 对称闭包:若存在序偶(x, y) R,把序偶(y ,x)添加到关系R中即可,即s(R)=RR-1。 传递闭包:关于传递闭包的求解相对比较复杂,方法也较多,可以用矩阵运算,也可以根据R上的传递闭包 R + 等于连通关系R*进行求解,即t(R)= R + = R* =RR2R3Rn(n为集合A的基数,|A| = n)有关证明详见文献3。2 用prolog实现二元关系的闭包运算根据上述传统闭包求解方法,很容易可以看出自反、对称

6、闭包的求解方法相对比较容易,只需要在其中添加一些特殊的关系序对即可。而针对传统传递闭包求解的复杂性,可根据上述传递闭包的定义和性质,结合人工智能语言Prolog的语法特点和结构实现闭包运算。2.1基本思想与步骤综合传统闭包求解方法和思想以及Prolog语言的语法规则,用Visual Prolog实现传递闭包运算的基本步骤为:STEP1 分析描述问题根据上一节对集合二元关系若干基本性质的介绍及闭包的定义及求解方式,用Visual Prolog实现传递闭包运算。STEP2 定义谓词在Prolog中,谓词表示子句中关系的名称,本问题领域定义的相关谓词分别为:r-关系对序偶(包含两个变元)transi

7、tive_closure-传递闭包(包含两个变元)STEP3 定义事实及规则在理解二元关系的有关定义及性质基础上,按照Prolog语言的语法和上面所定义的谓词,首先定义的事实和规则(子句)分别为:r(A,B) /*元素A和B之间存在关系R*/transitive_closure(A,B):-r(A,B). /*求R,Rt(R) */transitive_closure(A,B):-r(A,C),r(C,B). /* 求R2 ,R2t(R)*/transitive_closure(A,B):- r(A,D),r(D,E),r(E,B). /* 求R3 ,R3t(R)*/*定义求解传递闭包规则*/

8、根据Prolog的取规则又等价于:transitive_closure(A,B):-r(A,B);r(A,C),r(C,B);r(A,D),r(D,E),r(E,B);以上,都是Prolog中的子句,称为无条件子句,一般情况下在知识库中只表示事实;而称为条件子句,合起来构成一个Prolog程序。下面的步骤需要根据实例进行。2.2 举例例1设集合A=a, b ,c,, R=(a ,a),(a, b),(b ,a),(c, b),求关系R的传递闭包。关系R的有向图和布尔矩阵表示法分别如图1(a)和(b)所示。图1 关系R的有向图和矩阵表示STEP1 按照Prolog语言语法,对上述实例,建立如下事实:r(a,a). /*(a, a)R */r(a,b). /*(a, b)R */r(b,a). /*(b, a)R */r(c,b). /*(c, b)R */STEP2 使用传递闭包规

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论