Logic 宽度优先分辨率算法

Logic 宽度优先分辨率算法,logic,computer-science,unification,Logic,Computer Science,Unification,我想实现一个解析算法,在解析候选子句时尝试获取空集 我需要一个算法,以广度优先的顺序解析候选父子句。然而,我在某一点上感到困惑: 让我们将知识库中的所有子句连接起来,并对目标子句进行否定 当我们试图解决S中的候选子句和S中的候选子句时,我们得到了S 作为算法的第二步,我们应该尝试解决S和S'还是S'与S'本身? 如何进行 比如, 假设知识库+neg。目标集的集合由一组子句组成,例如 p(a,b)^q(z),~p(z,b)^q(y)((我们把这个集合称为s) 当我们在集合S上运行解析算法时,我们得

我想实现一个解析算法,在解析候选子句时尝试获取空集

我需要一个算法,以广度优先的顺序解析候选父子句。然而,我在某一点上感到困惑:

让我们将知识库中的所有子句连接起来,并对目标子句进行否定

当我们试图解决S中的候选子句和S中的候选子句时,我们得到了S

作为算法的第二步,我们应该尝试解决S和S'还是S'与S'本身? 如何进行

比如,

假设知识库+neg。目标集的集合由一组子句组成,例如

p(a,b)^q(z),~p(z,b)^q(y)((我们把这个集合称为s)

当我们在集合S上运行解析算法时,我们得到如下子句:

q(a)^~p(z,b)(我们把这个集合称为s’)

现在,如果我们必须使用BFS策略,我们应该首先找到其第一个父项在S中,第二个父项在S‘first’中的解决方案,还是尝试检查其父项都来自S’的解决方案

在某些示例中,当您第一次用S'和S'检查解析式时,您得到了解决方案。但是,当您继续检查一对集合(S,S')(S,(S,S'))时,您得到了另一种导致空子句的方法。那么,哪个顺序对应于BFS

提前感谢

首先计算所有第一级分解,然后计算第二级分解, 依此类推。第一级预解式是基集中两个子句之间的预解式;第i级预解式 级别预解式是其最深父级是第(i-1)级预解式的预解式

  • 0级子句是最初的公理,是对目标的否定
  • 级别k子句是根据两个子句计算的解决方案,其中一个必须来自级别k-1,另一个来自任何早期级别
从这些声明和我的评论中,我的意思如下:

  • 级别0由原始子句和目标的否定组成。设该集合为X
  • 第1级由(X,X)的分辨率组成,这是唯一可能的候选。设此集合为Y
  • 2级由(Y,X)和(Y,Y)的分辨率组成
等等

我的解释适用于第二种说法。实际上,它会给出与第一种说法相同的结果,只是在每个级别上解析相同的集合,这是不必要的。广度优先策略已经非常低效,错误的方法会使情况更糟


我希望这能澄清你的问题。

如果你用一个小例子指出你的疑问,任何人都会更容易帮助你;只需在某个条款上勾勒出你的bfs统一的应用,
a(b(X),c):-a(Y,Z)。
,例如example@Rubens,我编辑了我的问题