一阶逻辑自动推理系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一阶逻辑自动推理系统

一基础知识

(1)定义 1设t是LF(X)中的项,若t为常量或变元,则t为 0元项,记为 0-T;若t为

fn(t1 t2……tn)的形式,则t为 n元项。

(2)定义2 设g是LF(X)中的广义文字,若g为如下形式:

P( f1( f2( f m(t) )))或ØP( f1( f2( f m(t) )))

这里P是LF(X)中的谓词符号,f i(i = 1 2 m)是LF(X)中的函数符号且f i(i = 1 2 m)为0 元或1 元,t为常量或变元,且g中不含有蕴涵算子“®”,则称g为简单广义文字,称m为g的复杂度。

(3)定理1 设g1,g2是LF(X)中的简单广义文字,且g1,g2分别

为如下形式:

P(f ( f ( f(a) ))) (k个f)

ØP(f ( f ( f(x) ))) (k个f)

这里k,l分别是g1,g2的复杂度,a是LF(X)中的常量,x是LF(X)中的变元,f 是LF(X)中的函数符号。

如果k < l,则(g1 g2)不是α -归结对。

(4)定义3 设C 是LF(X) 中的子句,且C 为如下形式:

g1 Ú g2 Ú Ú g n,其中g i(i = 1 2 n)为LF(X)中简单广义文字,则称C为简单广义子句。(5)定义4 设S ={C1 C2 C m}是LF(X)中的子句集,若C i(i = 1 2 m)为简单广义子句,则称S为简单广义子句集。

(6)定理2LF(X)中子句集S为α-不可满足的当且仅当存在S中子句的基例的有穷集合S′,S′是α-不可满足的。

(7)定理3 设S为LF(X)中的子句集,S*是S经过基替换后得到的子句集,若S*是α-不可满足的,则S是α-不可满足的。

(8)引理1 LF(X)中的子句集S={C1 C2 C m}是α-不可满足的当且仅当对于任意的p i Î G i ,存在最一般合一σ,使得pσ1 Ù pσ2 Ù Ù pσm £ α,这里G i是子句C i中的广义文字集合。

(9)定理4 LF(X)中的子句集S为α-不可满足,当且仅当S的每一条路径上均有α- 归结对,即对任意的P i Î H i(i = 1 2 m),{P1 P2 P m}中有α-归结对。

(10)定理5 设S = S1 S2是LF(X)中的子句集,S1 ={C1 C2 C k},S2 ={C k + 1 C k + 2 C m},如果存在S的一条无α-归结对的前k元子路径R1,并且R1与子句集S2无α-归结对,则S为α-不可满足的当且仅当S2为α-不可满足的

(11)定理6 将LF(X)中的子句集S中子句的次序调换或S中某个子句中文字的次序调换不改变S的α-不可满足性和α-可满足性。

二简单子句集的归结自动推理算法

为了便于计算机程序的编制,首先对LF(X)中的子句集S

进行如下的预处理:

(1)定义一个二维数组C[m][n]来存储子句集S,其中n为子句集S中所有子句所含文字的最大数,则C[i]表示S中子句C i;C[i][0]表示子句C i广义文字的个数,C[i][ j]表示子句C i中第j个广义文字,i Î{1 2 m},j Î{1 2 n};

(2)定义一个二维数组Com[i][ j],Com[i][ j]表示子句C i中第j个广义文字的复杂度;

(3)定义一个一维数组num[i],num[i]表示子句C i中基广义文字的个数,num[θ[i]]表示子句C i进行θ替换后生成的新的基广义文字的个数;

(4)变量k用于标记当前子句的位置;

(5)定义两个一维数组p[k]和R[n],用p[i]记录子句C k中当前搜索位置,而R[1 2 k]来储存在S中目前的路径(k表示路径的有效长度);

(6)定义与二维数组C[i][ j]相对应的变量t[i][ j](i Î{1 2 m},j Î{1 2 n}),在同一路径上的t[i][ j] = 1的两个广义文字是α-归结对;

(7)定义与C[i]相对应的数组t[i],用于保存子句C[i]中所对应的t[i][ j];

(8)定义一个二维数组G[i][p[i]],G[i][p[i]]表示子句C i中当前路径p[i]的所有基例。

详细的算法如下:

(1)置循环变量k = 0,p(0) = 1,t[i][ j] = 0,R[0] = C[0][p[0]]。

(2)判断是否存在路径R[1 2 m]上广义文字对应的t[i][ j]全为0。

(2.1)若存在,则选择这样路径中复杂度最高的基广义文字C[i][ j],此时会出现两种情况:

(2.1.1)这样的广义文字存在多个,则选择将C[i][ j]作为初始文字,G[i][p[i]]=:G[i][p[i]] {C[i][ j]},转到第(4)步;

(2.1.2)这样的广义文字若不存在,则转到(3.2)。

(2.2)若不存在,则S是α-不可满足的且输出G[i][p[i]],算法结束。

(3)在S中选定C[k]

(3.1)若S中含有基广义文字,则在S中选定这样的子句C[i]:

A.C[i]中含有最复杂的基广义文字C[i][ j];

B.满足条件A的最短的子句,G[i][p[i]]=:G[i][p[i]] {C[i][ j]}。

(3.2)若S中不含有基广义文字,则在S中选定这样的子句C[i]:

A.C[i]中含有最复杂的广义文字C[i][ j];

B.满足条件A的最短的子句。

(3.3)如果i ¹k,则将子句C[i]与C[k]的位置对调,t[i]与t[k]的位置对调。

(3.4)如果j ¹p[k],则将C[i][ j]与C[i][k]的位置对调,t[i][ j]与t[i][k]的位置对调。(4)在后m - 1 - k中选择C[k + 1],C[k + 1]中含有与C[k][p[k]]为α-归结对的广义文字

(4.1)若这样的子句不存在:

A.若m - 1 - k > 2,则删除前k + 1个子句,重置S。

a.C[i] = C[i + k + 1],i = 1 2 m - 2 - k;

b.C[i] = 0;

c.k = 0,转到第(1)步;

B.若m - 1 - k = 2,如果C[m - 1]与C[m - 2]是α-归结对,则子句集S是α-不可满足的,算法结束;

C.若m - 1 - k = 2,如果C[m - 1]与C[m - 2]不是α-归结对,则子句集S是α-可满足的,算法结束;

D.若m - 1 - k £ 1,则子句集S是α-可满足的,算法结束。

(4.2)若这样的子句有多个:

(4.2.1)选择这样的子句C[i]。

a.含有与C[k][p[k]]为α-归结对的广义文字;

b.C[i][ j]中的变量对于子句C[i]中的其他广义文字是独立的;

c.满足条件a和b的且含有复杂度最高的广义文字的子句;

d.满足条件a、b 和c 的最短的子句;

(4.2.2)否则,选择满足如下条件的子句C[i]:

a.含有与C[k][p[k]]为α-归结对的复杂度最高的广义文字;

相关文档
最新文档