回答集程序(Answer Set Programming),简称ASP,是一个描述性编程语言(Declarative Programming Language),是人工智能知识表示领域中最重要的几个语言之一。很多知识并不适合用经典一阶逻辑(First-Order Logic)来表示,比如:“如果一个人有VIP卡,而且不知道其是否黑名单上的话,可以给折扣”。这种情况下,可以把它表示成规则如下:
Discount(x) :- VIP(x),not BlackList(x)
其中,Discount(x),VIP(x)以及BlackList(x)分别表示可以给x折扣,x是VIP以及x在黑名单上。“:-”是用来表示规则的符号,可以读成“如果”,含义是如果该符号右侧所有事实成立,那么该符号左侧事实也成立。“not”符号是表示缺省符号“不知道”。
回答集程序就是用来计算如果有一堆如上所述规则,那么能推出来的结果应该是什么。
回答集程序是很多经典表示和求解语言的扩充,包括命题可满足求解(SAT),约束满足求解(CSP),非单调推理(NMR),演绎数据库(Datalog)等等。简而言之,
ASP=SAT+Datatlog+NMR+CSP
groc是一个新的ASP求解器,支持normal ASP rule,aggregate,not等等。