如何在数据记录规则体中表达通用量词?

时间:2013-10-12 23:25:30

标签: datalog

我想在谓词规则的主体中使用通用量词,即类似

  

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。

1 个答案:

答案 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中使用,它也缺乏通用的量词。