首页 文章

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

提问于
浏览
2

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

A(x,y)< - ∀B(x,a),C(y,a) .

这意味着只有当C(y, a )中的每个 a ,B(x, a )始终具有匹配(x, a )的x时,则A(x,y)为真 .

因为在Datalog中,默认情况下,规则体中包含的每个变量都是存在量词, a 也是一个存在量词 . 我应该怎样做才能在谓词规则体中表达通用量词?

谢谢 .

附:我使用的Datalog引擎是logicblox .

1 回答

  • 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中也可以使用相同的技巧,它也缺乏通用的量词 .

相关问题