查看“︁回答集编程”︁的源代码
←
回答集编程
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
{{NoteTA |G1 = IT }} '''回答集编程'''是语法上类似[[逻辑编程|传统逻辑编程]]而语义上密切于[[非单调逻辑]]的一种[[声明式编程]]。在传统逻辑编程和回答集编程之间的主要区别是如何表示[[否定为失败]]。在传统逻辑编程中,否定为失败指示推导失败;在回答集编程中,它指示一个文字的一致性。 ==语法== 回答集编程由规则的集合构成,每个规则由一个''头部''和一个''后部''构成: <math>head \leftarrow body</math> 规则的头部和后部二者都是文字的集合,每个文字都是可能被否定的原子。与传统逻辑程序相反,原子都是命题而不是一阶的,并且可以使用两种形式的否定去否定它们: 经典否定(指示为 <math>\neg</math>)和否定为失败(指示为 <math>not</math>)。文字要么是原子要么是(使用经典否定)否定的原子。下面是一个例子程序: <math>a \leftarrow b, not~c</math><br> <math>a, not~\neg c \leftarrow not~d, \neg e</math><br> <math>\neg c \leftarrow not~\neg e, a</math> 依据第一个规则,<math>a</math> 是真,只要 <math>b</math> 是真,并且 <math>c</math> 可以被假定为假而不产生矛盾。 ==语义== 程序的语义基于它的回答集,每个回答集都是文字集合。对于不包含否定为失败的程序,程序的语义基于闭包和最小性的概念: *程序在一个文字集合下闭合,如果这个集合包含至少一个在某个规则的头部中的文字,而总是包含在规则的体部中的所有文字。 *文字集合是一个程序回答集,如果在这个程序闭合于的文字集合中、它(在集合的容量(containment)上)是最小化的。 如果程序包含使用否定为失败否定的一些文字,语义要求额外的简约概念: * 一个程序在一个文字集合下的简约是通过对每个规则进行下列变更而获得的程序: *# 除去在头部中的、使用否定为失败否定的并且在集合中的所有文字; *# 除去在后部中的、使用否定为失败否定的并且在集合中不包含的所有文字; *# 删除整个规则,如果在应用完上面两个规则之后,它仍然包含(使用否定为失败)否定的原子。 文字集合是一个程序的回答集,如果它是这个程序在这个集合自身下的简约的回答集。换句话说,可以通过运行下列[[非确定性]]的算法来计算一个回答集可以: 选择文字集合 L; 计算程序 P 在 L 下的简约 PL; 如果 L 是 PL 所闭合的最小化文字集合则 输出 L 最初的文字集合 L 的选择是非确定性的。确定 L 是否为一个回答集的算法,首先计算程序在 L 下的简约,并接着检查 L 是否是这个无否定为失败的程序的回答集。 一个回答集程序可以有零个、一个或多个回答集。一个程序蕴涵一个文字,如果它的所有的回答集都包含这个文字。 ==比较、复杂性和实现== 与 [[Prolog]] 相反,回答集程序的语义不依赖于规则的求值和原子在每个规则中的特定次序。 检查一个程序的回答集的存在性的复杂性,和检查一个程序是否蕴涵一个文字复杂性,范围是从 [[P (复杂性)|P]] 到[[多项式层次]]的第二级,依赖于一个程序可以满足也可以不满足的一组条件(就是说分层、头部中的析取)。 实现了回答集编程的三个系统是:smodels、dlv 和 cmodels。 <!-- missing here: comparison with non-monotonic logic (default logic in particular); restrictions, in particular the definition of stratification; exact complexity in the various cases; uses of answer set programming --> ==参见== *[[逻辑编程]] *[[Prolog]] *[[非单调逻辑]] *[[缺省逻辑]] ==引用== *T. Eiter, N. Leone, C. Mateis, G. Pfeifer, F. Scarcello (1998). The KR System dlv: Progress Report, Comparisons and Benchmarks. In ''Proceedings of the Sixth International Conference on Principles of Knowledge Representation and Reasoning (KR'98)'': 406-417 *V. Lifschitz (2002). Answer set programming and plan generation. ''Artificial Intelligence.'' 138(1-2): 39-54. {{doi|10.1016/S0004-3702(02)00186-8}} *I. Niemela, P. Simons, T. Syrjanen (2000). [http://arxiv.org/abs/cs.AI/0003033 Smodels: A System for Answer Set Programming.] ''CoRR'' cs.AI/0003033 ==外部链接== *[https://web.archive.org/web/20051227122251/http://wasp.unime.it/ Working group on Answer Set Programming] *[http://www.dbai.tuwien.ac.at/proj/dlv The DLV Project]{{Wayback|url=http://www.dbai.tuwien.ac.at/proj/dlv |date=20051229105040 }} *[http://www.tcs.hut.fi/Software/smodels Smodels]{{Wayback|url=http://www.tcs.hut.fi/Software/smodels |date=20051229061917 }} *[http://www.cs.utexas.edu/users/tag/cmodels/ CMODELS]{{Wayback|url=http://www.cs.utexas.edu/users/tag/cmodels/ |date=20051202120554 }} {{编程范型}} [[Category:计算机逻辑]] [[Category:编程范式]]
该页面使用的模板:
Template:Doi
(
查看源代码
)
Template:NoteTA
(
查看源代码
)
Template:Wayback
(
查看源代码
)
Template:编程范型
(
查看源代码
)
返回
回答集编程
。
导航菜单
个人工具
登录
命名空间
页面
讨论
不转换
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
工具
链入页面
相关更改
页面信息