回答集编程是语法上类似传统逻辑编程而语义上密切于非单调逻辑的一种声明式编程。在传统逻辑编程和回答集编程之间的主要区别是如何表示否定为失败。在传统逻辑编程中,否定为失败指示推导失败;在回答集编程中,它指示一个文字的一致性。

语法

编辑

回答集编程由规则的集合构成,每个规则由一个头部和一个后部构成:

 

规则的头部和后部二者都是文字的集合,每个文字都是可能被否定的原子。与传统逻辑程序相反,原子都是命题而不是一阶的,并且可以使用两种形式的否定去否定它们: 经典否定(指示为  )和否定为失败(指示为  )。文字要么是原子要么是(使用经典否定)否定的原子。下面是一个例子程序:

 
 
 

依据第一个规则,  是真,只要   是真,并且   可以被假定为假而不产生矛盾。

语义

编辑

程序的语义基于它的回答集,每个回答集都是文字集合。对于不包含否定为失败的程序,程序的语义基于闭包和最小性的概念:

  • 程序在一个文字集合下闭合,如果这个集合包含至少一个在某个规则的头部中的文字,而总是包含在规则的体部中的所有文字。
  • 文字集合是一个程序回答集,如果在这个程序闭合于的文字集合中、它(在集合的容量(containment)上)是最小化的。

如果程序包含使用否定为失败否定的一些文字,语义要求额外的简约概念:

  • 一个程序在一个文字集合下的简约是通过对每个规则进行下列变更而获得的程序:
    1. 除去在头部中的、使用否定为失败否定的并且在集合中的所有文字;
    2. 除去在后部中的、使用否定为失败否定的并且在集合中不包含的所有文字;
    3. 删除整个规则,如果在应用完上面两个规则之后,它仍然包含(使用否定为失败)否定的原子。

文字集合是一个程序的回答集,如果它是这个程序在这个集合自身下的简约的回答集。换句话说,可以通过运行下列非确定性的算法来计算一个回答集可以:

 选择文字集合 L;
 计算程序 P 在 L 下的简约 PL;
 如果 L 是 PL 所闭合的最小化文字集合则
   输出 L

最初的文字集合 L 的选择是非确定性的。确定 L 是否为一个回答集的算法,首先计算程序在 L 下的简约,并接着检查 L 是否是这个无否定为失败的程序的回答集。

一个回答集程序可以有零个、一个或多个回答集。一个程序蕴涵一个文字,如果它的所有的回答集都包含这个文字。

比较、复杂性和实现

编辑

Prolog 相反,回答集程序的语义不依赖于规则的求值和原子在每个规则中的特定次序。

检查一个程序的回答集的存在性的复杂性,和检查一个程序是否蕴涵一个文字复杂性,范围是从 P多项式层次的第二级,依赖于一个程序可以满足也可以不满足的一组条件(就是说分层、头部中的析取)。

实现了回答集编程的三个系统是:smodels、dlv 和 cmodels。

参见

编辑

引用

编辑
  • 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). Smodels: A System for Answer Set Programming. CoRR cs.AI/0003033

外部链接

编辑


📚 Artikel Terkait di Wikipedia

OCaml

和指令优化一起,OCaml的优化编译器采用静态程序分析方法,来优化值包装(英语:Object type (object-oriented programming))(boxing)和闭包分配,帮助结果代码得到最大化的性能,即使它大量使用了函数式编程构造。 Xavier Leroy(英语:Xavier

续体

returning an "answer"; i.e. the prophesized result of the whole program in which the expression is embedded. In a purely applicative language the answer must be

VBScript

drive or overwrite existing file Set FSO = CreateObject("Scripting.FileSystemObject") If FSO.FileExists(FileName) Then Answer = MsgBox ("File " & FileName

LISP

"2.4 Functional Programming: LISP";"6.9 List Types";"15.4 The First Functional Programming Language: LISP". Concepts of Programming Languages 10th. Boston

Simula

some kind of generalized process concept with record class properties. The answer to their problem suddenly appeared in December 1966, when the idea of prefixing

火影忍者

Begins a New Era for Digital Anime and Delivers the Best in Free Dynamic Programming. Anime News Network. 2014-04-01. (原始内容存档于2016-11-19).  Naruto Shippuden

人工智能史

Economist 2007 Tascarella 2006 Crevier 1993,第108−109頁 He goes on to say: "The answer is, I believe we could have ... I once went to an international conference

递归

(電腦科學) 迴圈 原文:“If you already know what recursion is, just remember the answer. Otherwise, find someone who is standing closer to Douglas Hofstadter than