AIL C7 回答集编程

回答集编程,ASP是一种建模非单调推理的逻辑编程与问题求解范式。一个 ASP 程序由一组规则组成,每条规则与霍恩子句类似,但可以包含带缺省否定(notnot)的文字。故ASP可以建模非单调推理。

ASP 结合了逻辑编程语言 Prolog 的语法和语义定义,以及 SAT 求解器的可满足搜索机制。

逻辑程序

逻辑程序由一组逻辑编程规则组成。

逻辑编程规则

每条逻辑编程规则形如:

a0←a1,...,an,not an+1,...,not an+k.a_0 \leftarrow a_1, . . . , a_n, not\ a_{n+1}, . . . , not\ a_{n+k}.

其中aa 是原子公式, not anot\ a 称作 “失败即否定” 公式,简称 naf\textbf {naf}公式。

not 与 ¬\lnot: 强否定与弱否定

  • ¬a\lnot a: 表示明确知道 aa为假。
  • not a\rm not\ a : 表示aa为真是不可证明的,是弱否定。

记上公式为rr,则

  • a0a_0被称为规则头,记作head(r)head(r)
  • {a1,...,an,not an+1,...,not an+k}\left\{a_1, . . . , a_n, not\ a_{n+1}, . . . , not\ a_{n+k}\right\} 被称为规则身体,记作body(r)body(r)。

则rr可记作

head(r)←body(r).head(r)\leftarrow body(r).

  • 基规则:规则中的所有文字都是基文字的规则。
  • 肯定规则:k=0k = 0,即不包含naf。
    • 肯定程序 / 霍恩程序:只包含肯定规则的程序。
  • 事实: body(r)=∅body(r) = \empty
  • 约束/目标:head(r)=∅head(r) = \empty

基化,grounding

给定一个语言 L\cal L, 则该语言的

  • 赫布兰德域HULHU_{\cal L}:所有可以由 L\cal L 中的个体常元和函数形成的基项 的集合。
  • 赫布兰德基底HBLHB_{\cal L}:所有可以由L\cal L中的谓词和HULHU\cal_L 的项形成
    的基原子公式的集合。

设 rr 是语言 L\cal L中的一条规则。rr 在 L\cal L中的基化,grounding,记作 ground(r,L)ground(r, {\cal L}):HU_\cal L 中的元素对 rr 中的变元进行所有可能的代换而得到的所有规则集合。

字母表

给定一个字母表,回答集语言是所有可以从该字母表中的符号建构起来的基规则集合。

基程序

给定一个逻辑程序Π\Pi,则基程序:

ground(Π,L)=∪r∈Πground(r,L)ground(\Pi,{\cal L}) = \cup_{r\in\Pi}ground(r,{\cal L})

通常简写为ground(Π)ground(\Pi)。

程序的语义

给定一个程序Π\Pi,它的语义按照它的基程序 ground(Π)ground(\Pi) 的语义来定义。

肯定程序的语义

给定程序Π\Pi,

  • Π\Pi的一个赫布兰德解释:赫布兰德基底的任意子集。记作 I,I⊆HBLI,I \sube HB_{\cal L}。

  • Π\Pi的一个赫布兰德模型:Π\Pi的赫布兰德解释II,且满足以下条件:

    1. 对于每条规则r=a0←a1,...,an.r = a_0 \leftarrow a_1, . . . , a_n.,如果a1,...,ana_1, . . . , a_n 关于 II 为真,即 {a1,...,an}⊆I\{a_1, . . . , a_n\} \sube I,那么 a0a_0 也关于 II 为真。
      也即说 II 满足规则 rr。
    2. 对于每条规则r=←a1,...,an.r = \leftarrow a_1, . . . , a_n.,如果 {a1,...,an}⊈I\{a_1, . . . , a_n\}\not\sube I,那么 说 II 满足规则 rr。
  • Π\Pi的极小赫布兰德模型:赫布兰德解释II 在集合{I1,...,In}\{I_1, . . . , I_n\}中是极小的,如果不存在j:1≤j≤nj:1 \le j\le n,使得Ij⊊II_j \subsetneq I。把这样的II简称极小模型,记作MΠM_\Pi。

    极小赫布兰德模型不是唯一的。可能出现两个不可比的赫布兰德解释,任何解释都不是它们的真子集。如{a}\{a\},{b}\{b\},{a,b}\{a,b\}中{a}\{a\},{b}\{b\}是极小的。

  • Π\Pi的最小赫布兰德模型:赫布兰德解释II 在集合{I1,...,In}\{I_1, . . . , I_n\}中是最小的,如果∀j:1≤j≤n,I⊆Ij\forall j: 1 \le j\le n,I \sube I_j。

回答集

Π\Pi的回答集:Π\Pi的极小赫布兰德模型。

不动点算子TΠT_\Pi

定义一个不动点算子TΠT_\Pi把程序Π\Pi的一组原子公式集合XX映射到另外一组原子公式集合TΠ(X)T_\Pi(X),使得

TΠ(X)={a∈HBΠ∣∃r∈Π:(head(r)=a)∧(∀b∈body(r):b∈X)}T_{\Pi}(X) = \{a \in HB_\Pi | \exist r \in \Pi:(head(r) = a )\wedge (\forall b\in body(r):b\in X)\}

计算极小模型

极小模型是TΠT_\Pi算子的不动点。即TΠ(X)=XT_\Pi(X) = X。计算不动点的方法如下:

  1. k=1:X1=TΠ(∅)k = 1: X_1 = T_\Pi(\empty)。
  2. k≥2:Xk+1=TΠ(Xk)k \ge 2:X_{k + 1} = T_\Pi(X_k)
    • 若Xk+1=XkX_{k+1} = X_k, 停止并返回XkX_k作为不动点,记作TΠ∞(∅)T_\Pi^\infty(\empty)或者lfp(TΠ){\rm lfp}(T_\Pi)。
    • 否则,k=k+1k = k + 1,并重复2.。

LEMMA 1 对于一个肯定程序Π\Pi和有穷的赫布兰德基底HBΠHB_\Pi,上述算法将会停止。

TΠT_\Pi的性质:

  • TΠT_\Pi 是单调的:如果X⊆YX \sube Y, 则TΠ(X)⊆TΠ(Y)T_\Pi(X) \sube T_\Pi(Y)。
  • MΠ=lfp(TΠ)M_\Pi = {\rm lfp}(T_\Pi)
  • 不含约束的肯定程序Π\Pi的MΠM_\Pi 是唯一的。

一般/正规逻辑程序的语义

一般逻辑程序 / 正规逻辑程序: 含含形如式

a0←a1,...,an,not an+1,...,not an+k.a_0 \leftarrow a_1, . . . , a_n, not\ a_{n+1}, . . . , not\ a_{n+k}.

的规则的逻辑程序。

肯定程序的极小模型方法不能被直接用来定义正规逻辑程序的回答集。

考虑仅含一条规则的程序Π\Pi:

a←not b.a \leftarrow not\ b.

则Π\Pi有两个"极小模型" {a}\{a\} 和 {b}\{b\}。但是由于没有理由说明bb 为真的理由,故该方法的结果是违反直觉的。

正规逻辑程序回答集

设Π\Pi是一个不含约束的正规逻辑程序,SS是任意原子公式集合 。

ΠS\Pi^S 是通过如下步骤得到的约简的逻辑程序:

  1. 将Π\Pi赋值给ΠS\Pi^S。ΠS<=Π\Pi^S <= \Pi。
  2. 对于每条ΠS\Pi_S中的规则rr :
    1. 如果 not a∈body(r)not\ a \in body(r) 且 a∈Sa \in S,则把rr从ΠS\Pi_S中删除。
    2. 否则把其 body(r)body(r)的每个形如 not anot\ a 的文字删除。

显然ΠS\Pi^S 是一个肯定程序。称SS是Π\Pi的回答集,若MΠS=SM_{\Pi^S} = S,也即ΠS\Pi^S的回答集存在且为SS。

有些程序可能没有回答集。考虑程序Π\Pi:

p←not p,d.r←.d←.\begin{align*}&p \leftarrow not\ p, d.\\&r \leftarrow .\\&d \leftarrow .\end{align*}

由于 rr 和 dd 必须在任何回答集中,Π\Pi的两个可能回答集是S1={r,d,p}S_1 = \{r, d, p\} 和S2={r,d}S_2 = \{r, d\}。

  • ΠS1={r←.,d←.}\Pi^{S_1} = \left\{r \leftarrow .,d \leftarrow .\right\} 有回答集 {r,d}≠S1\{r, d\} \not = S_1。
  • ΠS2={r,d,p}≠S2\Pi^{S_2} = \left\{r,d,p\right\} \not= S_2

因此S1S_1和S2S_2均不为Π\Pi的回答集。形如p←not p.p \leftarrow not\ p.的规则会导致程序没有回答集合。

注意区分回答集为空和没有回答集的区别。

含约束逻辑程序的回答集

对于一个含约束的逻辑程序Π\Pi,把 Π\Pi 分为两个集合:

  • ΠO={r∣r∈Π,head(r)≠∅}\Pi_O = \{r | r \in \Pi, head(r) \not = \empty\} 是一个不含约束的程序。
  • ΠC=Π−ΠO={r∣r∈Π,head(r)=∅}\Pi_C = \Pi - \Pi_O = \{r | r \in \Pi, head(r) = \empty\}。

对于一个基原子公式集合 SS 和一个约束 cc:

←a1,...,an,not an+1,...,not an+k.\leftarrow a_1, . . . , a_n, not\ a_{n+1}, . . . , not\ a_{n+k}.

称 SS 满足 cc,如果 {a0,...,an}−S≠∅\{a_0, . . . , a_n\} - S \not = \empty 或 {an+1,...,an+k}∩S≠∅\left\{a_{n+1}, . . . , a_{n+k}\right\} \cap S \not = \empty。

一个基原子公式集合 SS 是程序 Π\Pi 的一个回答集,如果

  • SS 是 ΠO\Pi_O 的回答集;
  • SS满足 ground(ΠC)ground(\Pi_C) 的所有约束。

AIL C7 回答集编程
http://example.com/2023/05/26/AIL-7/
Author
Tekhne Chen
Posted on
May 26, 2023
Licensed under