0

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

我希望算法以广度优先顺序解决候选父子句。但是,我有一点困惑:

令 S 为知识库中所有子句的合取和目标子句的否定

当我们尝试用 S 中的候选子句解析 S 中的候选子句时,我们得到 S'

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

例如;

假设知识库+否定。目标集由一组子句组成,例如

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

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

q(a) ^ ~p(z,b)(我们称这个集合为 S')

现在,如果我们必须采用 BFS 策略,我们是否应该首先找到其第一个父级在 S 中,第二个在 S' 中的解析器?或尝试检查其父母都来自S'的解析器?

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

提前致谢

4

1 回答 1

1

这里指出:

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

在这里

  • 0级子句是原始公理和目标的否定
  • k 级子句是从两个子句计算的解析器,其中一个必须来自 k-1 级,另一个必须来自任何更早的级别。

我从这些陈述和评论中的意思如下:

  • 0级包括原始从句和目标的否定。设这个集合为 X。
  • 级别 1 包括 (X,X) 的分辨率,这是唯一可能的候选者。设这个集合为 Y。
  • 级别 2 包括 (Y,X) 和 (Y,Y) 的分辨率。

等等。

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

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

于 2012-12-28T08:55:54.953 回答