如何在代码方面表达单位分辨率?例如:
A1
-(A1 & A2 & A3 ... & An)
其中 - 不是,和&是和运算符。
答案应该是:
-(A2 & ... & An)
如何以prolog(或scala或其他语言)编写它?
在我看来,它应该是某种类似的功能:
def unitResolution(sentence1, sentence2, ... sentence_n) : result
任何帮助表示感谢。
答案 0 :(得分:2)
最近发生了类似的问题。我提出的方式有点不同。 让我们假设我们有一个Prolog程序。而不是做后退(这是 是输入分辨率)我们想做前向转换(单位分辨率)。
我还没有完全实现它。但是可以尝试以下方法。一般 反向链接规则如下:
p :- q1, q2, q3, .., qn. /* backward */
现在是一个正向链接规则,它使第一个目标的单位分辨率, 只需切换p和q1的位置即可。因此它看起来如下:
q1 :- p, q2, .., qn. /* forward */
然后,您可以利用Prolog谓词索引来搜索匹配子句 resoluton步骤。让我们先看一下单位r的分辨率步骤 正常后向链规则的情况。假设单位r与q1统一。所以 新条款将是:
p' :- q2', q3', ..., qn'. /* backward */
叛教者表示应用了mgu。现在我们想要我们的算法 在前向表示法中产生新规则。这将是:
q2' :- p', q3', ..., qn'. /* forward */
或者在Prolog中,假设运算符(,)/ 2是xfy:
% resolution_step(+Unit,+TrickyClause,-TrickyClause or Unit)
resolution_step(U,(U :- H, G, B),(G :- H, B)).
resolution_step(U,(U :- H, G),(G :- H)).
resolution_step(U,(U :- H),H).
在这里,您可以看到如何迭代使用它。我使用谓词议程/ 1来持有单位。而Prolog数据库则包含棘手的条款,也包括新创建的条款。所以发挥作用的谓词必须被宣布为动态。
iterate :-
agenda(U),
clause(U,B),
resolution_step(U,(U:-B),C),
(C=(P :- Q) -> assertz((P:-Q)); assertz(agenda(C))).
现在只要有变化就必须进行迭代,并避免创建重复项。或者避免变体或假设。如果棘手的条款中没有更多的delta,或者议程中没有更多的delta,我们可以停止我们的前向搜索。当然,如果找到某个目标,我们也可以停止向前搜索。
但是现在你看到了这个单一分辨率步骤的问题。中间结果不仅是新单位,而且是新的非单位条款。所以在实践中我猜一个人不会实现单个单位分辨率步骤,而是一个被称为超分辨率的东西。即解析具有多个单元的子句,以便创建新单元。
超分辨率将简化迭代的管理。不需要存储中间非单位子句,并且可以更容易地检测到delta。还可以基于先前的增量来计算新的增量。避免对前向规则进行一些冗余的重新评估。但在超分辨率下,我们放弃了棘手条款的索引优势。因此,我仍然在等待一个有趣的提议,以获得适合Prolog代表前向条款的超分辨率。
最好的问候
编辑10.04.2012:
与此同时,我找到了一种超分辨率的方法。它基于转换条款:
P :- A
进入一个条款:
delta(X,P) :- A_new(X)
通过子句扩展。 Delta应该在P中计算新单元X到达时的分辨率结果。我已经做了几个成功的实验(*)(* *),但索引还没有实现。我有一个基于将X上的某些条件移到规则头部的索引的概念,但还没有时间来实现它。
(*)
8皇后通过单位决议
https://plus.google.com/u/0/b/103259555581227445618/103259555581227445618/posts/2q6nd6VbgZJ
(* *)
Earley Chart Parser通过单位决议
https://plus.google.com/u/0/b/103259555581227445618/103259555581227445618/posts/4tFbxLbknYe
答案 1 :(得分:2)
这个想法是使用Prolog块指令来触发单位分辨率。 Howe& Sn有一篇非常好的文章“SAT上的珍珠和Prolog中的SMT解决方案”。 King对此技术以及源代码:http://www.soi.city.ac.uk/~jacob/solver/。 我们在Prolog编写的ProB工具的约束求解器中使用了类似的技术(如果您真的感兴趣,可以在这里找到最近的论文:http://www.stups.uni-duesseldorf.de/publications_detail.php?id=325)。