- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于Prolog二元关系闭包运算的研究与实现
摘要:在代数系统中,关系作为一种抽象工具,在计算机科学研究领域有着极其广泛的应用。本文在研究传统闭包求解方法的基础上,结合其思想给出了用人工智能语言Prolog实现传递闭包求解策略的思想与方法,并在实例中给予论证,此方法具有一定的典型研究意义及价值。
论文关键词:二元关系,传递闭包,人工智能,回溯
Prolog是逻辑程序设计(Programming in logic)的缩写。其理论基础是谓词逻辑,它是人们把逻辑作为程序设计的一种语言的努力结果。Prolog由于具有简洁的文法、丰富的表现力以及强大的逻辑推理能力,特别适用于解决人工智能方面的问题,目前已成为实现专家系统最理想的语言工具[1]。
代数结构中,构造关系上的各种闭包在实际中有很多重要的应用,例如,在编译程序中的语法分析中,常常要通过求定义在某字母表上有关语法规则的二元关系的传递闭包,来计算非终结符所能导出的字符表。对于怎样求关系R的闭包,离散数学中有着不同的方法,相对于自反、对称闭包求解方法,无论是用Warshall算法(详细介绍及求解方法见文献2和3)还是寻找连通路径法,传递闭包的求解都比较复杂,求解过程也容易出错。这时可根据传递闭包的定义和性质,用Prolog语言实现闭包运算。
1 传统闭包求解
1.1集合上二元关系的若干基本性质
定义1 设集合A,RAA。形式定义[2]
⑴ R是自反的(Reflexive)(或R具有自反性)Iffx (xR? xRx)。
⑵ R是反自反的(Irreflexive)(或R具有反自反性)Iffx (xR? xRx)。
⑶ R是对称的(Symmetric)(或R具有对称性)Iffx,yA, xRy? yRx。
⑷ R是反对称的(Antsymmetric)(或R具有反对称性)Iffx,yA, (xRy?yRx ? x=y。
⑸ R是传递的(Transitive)(或R具有传递性)Iffx,y,zA, (xRy?yRz ? xRz。
定义2 设集合A,RAA。若R ˊ AA满足:
⑴ R ˊ是自反的(对称的和传递的);
⑵ R R ˊ;
⑶ 对A上的任意满足⑴和⑵的二元关系R 〞,皆有R ˊ R 〞,则称R ˊ为R的自反(对称或者传递)闭包。
关系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上的恒等关系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实现二元关系的闭包运算
根据上述传统闭包求解方法,很容易可以看出自反、对称闭包的求解方法相对比较容易,只需要在其中添加一些特殊的关系序对即可。而针对传统传递闭包求解的复杂性,可根据上述传递闭包的定义和性质,结合人工智能语言Prolog的语法特点和结构实现闭包运算。
2.1基本思想与步骤
综合传统闭包求解方法和思想以及Prolog语言的语法规则,用Visual Prolog实现传递闭包运算的基本步骤为:
STEP1 分析描述问题
根据上一节对集合二元关系若干基本性质的介绍及闭包的定义及求解方式,用Visual Prolog实现传递闭包运算。
STEP2 定义谓词
在Prolog中,谓词表示子句中关系的名称,本问题领域定义的相关谓词分别为:
r-关系对序偶(包含两个变元)
t
文档评论(0)