回答集编程,ASP是一种建模非单调推理的逻辑编程与问题求解范式。一个 ASP 程序由一组规则组成,每条规则
与霍恩子句
类似,但可以包含带缺省否定(not)的文字。故ASP
可以建模非单调推理。
ASP
结合了逻辑编程语言 Prolog
的语法和语义定义,以及 SAT
求解器的可满足搜索机制。
逻辑程序
逻辑程序由一组逻辑编程规则组成。
逻辑编程规则
每条逻辑编程规则
形如:
a0←a1,...,an,not an+1,...,not an+k.
其中a 是原子公式, not a 称作 “失败即否定” 公式,简称 naf公式。
not 与 ¬: 强否定与弱否定
- ¬a: 表示明确知道 a为假。
- not a : 表示a为真是不可证明的,是弱否定。
记上公式为r,则
- a0被称为规则头,记作head(r)
- {a1,...,an,not an+1,...,not an+k} 被称为规则身体,记作body(r)。
则r可记作
head(r)←body(r).
- 基规则:规则中的所有
文字
都是基文字
的规则。
- 肯定规则:k=0,即不包含
naf
。
- 事实: body(r)=∅
- 约束/目标:head(r)=∅
基化,grounding
给定一个语言 L, 则该语言的
- 赫布兰德域HUL:所有可以由 L 中的
个体常元
和函数形成的基项
的集合。
- 赫布兰德基底HBL:所有可以由L中的
谓词
和HUL 的项形成
的基原子公式
的集合。
设 r 是语言 L中的一条规则。r 在 L中的基化,grounding,记作 ground(r,L):HU_\cal L 中的元素对 r 中的变元进行所有可能的代换而得到的所有规则
集合。
字母表
给定一个字母表,回答集语言是所有可以从该字母表
中的符号建构起来的基规则
集合。
基程序
给定一个逻辑程序
Π,则基程序:
ground(Π,L)=∪r∈Πground(r,L)
通常简写为ground(Π)。
程序的语义
给定一个程序Π,它的语义按照它的基程序 ground(Π) 的语义来定义。
肯定程序的语义
给定程序Π,
-
Π的一个赫布兰德解释:赫布兰德基底
的任意子集。记作 I,I⊆HBL。
-
Π的一个赫布兰德模型:Π的赫布兰德解释
I,且满足以下条件:
- 对于每条规则r=a0←a1,...,an.,如果a1,...,an 关于 I 为真,即 {a1,...,an}⊆I,那么 a0 也关于 I 为真。
也即说 I 满足规则 r。
- 对于每条规则r=←a1,...,an.,如果 {a1,...,an}⊆I,那么 说 I 满足规则 r。
-
Π的极小赫布兰德模型:赫布兰德解释
I 在集合{I1,...,In}中是极小的,如果不存在j:1≤j≤n,使得Ij⊊I。把这样的I简称极小模型,记作MΠ。
极小赫布兰德模型不是唯一的。可能出现两个不可比的赫布兰德解释
,任何解释
都不是它们的真子集。如{a},{b},{a,b}中{a},{b}是极小的
。
-
Π的最小赫布兰德模型:赫布兰德解释
I 在集合{I1,...,In}中是最小的,如果∀j:1≤j≤n,I⊆Ij。
回答集
Π的回答集:Π的极小赫布兰德模型
。
不动点算子TΠ
定义一个不动点算子TΠ把程序Π的一组原子公式
集合X映射到另外一组原子公式
集合TΠ(X),使得
TΠ(X)={a∈HBΠ∣∃r∈Π:(head(r)=a)∧(∀b∈body(r):b∈X)}
计算极小模型
极小模型
是TΠ算子的不动点。即TΠ(X)=X。计算不动点的方法如下:
- k=1:X1=TΠ(∅)。
- k≥2:Xk+1=TΠ(Xk)
- 若Xk+1=Xk, 停止并返回Xk作为不动点,记作TΠ∞(∅)或者lfp(TΠ)。
- 否则,k=k+1,并重复2.。
LEMMA 1
对于一个肯定程序Π和有穷的赫布兰德基底HBΠ,上述算法将会停止。
TΠ的性质:
- TΠ 是单调的:如果X⊆Y, 则TΠ(X)⊆TΠ(Y)。
- MΠ=lfp(TΠ)
- 不含约束的
肯定程序
Π的MΠ 是唯一的。
一般/正规逻辑程序的语义
一般逻辑程序 / 正规逻辑程序: 含含形如式
a0←a1,...,an,not an+1,...,not an+k.
的规则的逻辑程序
。
肯定程序
的极小模型方法不能被直接用来定义正规逻辑程序的回答集。
考虑仅含一条规则的程序Π:
a←not b.
则Π有两个"极小模型" {a} 和 {b}。但是由于没有理由说明b 为真的理由,故该方法的结果是违反直觉的。
正规逻辑程序回答集
设Π是一个不含约束的正规逻辑程序
,S是任意原子公式集合 。
ΠS 是通过如下步骤得到的约简的逻辑程序:
- 将Π赋值给ΠS。ΠS<=Π。
- 对于每条ΠS中的规则r :
- 如果 not a∈body(r) 且 a∈S,则把r从ΠS中删除。
- 否则把其 body(r)的每个形如 not a 的文字删除。
显然ΠS 是一个肯定程序
。称S是Π的回答集,若MΠS=S,也即ΠS的回答集存在且为S。
有些程序可能没有回答集。考虑程序Π:
p←not p,d.r←.d←.
由于 r 和 d 必须在任何回答集中,Π的两个可能回答集是S1={r,d,p} 和S2={r,d}。
- ΠS1={r←.,d←.} 有回答集 {r,d}=S1。
- ΠS2={r,d,p}=S2
因此S1和S2均不为Π的回答集。形如p←not p.的规则会导致程序没有回答集合。
含约束逻辑程序的回答集
对于一个含约束
的逻辑程序Π,把 Π 分为两个集合:
- ΠO={r∣r∈Π,head(r)=∅} 是一个不含约束的程序。
- ΠC=Π−ΠO={r∣r∈Π,head(r)=∅}。
对于一个基原子公式集合 S 和一个约束
c:
←a1,...,an,not an+1,...,not an+k.
称 S 满足 c,如果 {a0,...,an}−S=∅ 或 {an+1,...,an+k}∩S=∅。
一个基原子公式集合 S 是程序 Π 的一个回答集,如果
- S 是 ΠO 的回答集;
- S满足 ground(ΠC) 的所有
约束
。