【问题标题】:Breadth-first Resolution Algorithm广度优先分辨率算法
【发布时间】:2012-12-22 15:37:36
【问题描述】:

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

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

让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 对应的是哪个顺序呢?

提前致谢

【问题讨论】:

  • 如果你用一个小例子指出你的疑问,任何人都会更容易帮助你;简单地勾画出你 bfs-unification 在某个子句上的应用,a(b(X), c) :- a(Y, Z).,例如
  • @Rubens,我已经编辑了我的问题

标签: logic computer-science unification


【解决方案1】:

Here it is stated that:

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

here:

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

我从这些陈述和我的 cmets 的意思如下:

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

等等。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多