我想在谓词规则的主体中使用通用量词,即类似
A(x,y)< - ∀B(x,a),C(y,a)。
这意味着只有当每个 a 来自C(y, a )时,B(x, a )总是有x到匹配(x, a ),然后A(x,y)为真。
由于在Datalog中,默认情况下,规则体中的每个变量都是存在量词, a 也是一个存在量词。我应该怎样做才能在谓词规则体中表达通用量词?
谢谢。
P.S。我使用的Datalog引擎是logicblox。
答案 0 :(得分:2)
基本思想是使用逻辑公理
∀ x φ( x )⇔¬∃ x ¬φ( x )
将规则置于只需要存在量词的形式(以及否定)。直觉上,这通常意味着先计算答案的补码,然后计算其补码以产生最终答案。
例如,假设您有一个图形 G ( V , E ),并且您想要找到与其相邻的顶点图中的所有其他人。如果在Datalog规则体中允许通用量化,则可以编写类似
的内容Q(x) <- ∀y E(x,y).
要在没有通用量词的情况下编写此代码,首先要计算不与所有其他顶点相邻的顶点
NQ(x) <- V(x), V(y), !E(x,y).
然后返回其补充作为答案
Q(x) <- V(x), !NQ(x).
同样的技巧可以在SQL中使用,它也缺乏通用的量词。