【发布时间】: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