为什么以下Datalog程序等效?

时间:2010-12-14 21:15:26

标签: datalog

对于一些外来谓词a,b为什么会这样:

q(X,Y) <-- a(X,Y), q(Z,Y)
q(X,Y) <-- b(X,Y)

相当于:

q(X,Y) <-- a(X,Y), b(Z,Y)
q(X,Y) <-- b(X,Y)

? 为什么顶级递归不能继续扩展?

1 个答案:

答案 0 :(得分:3)

如果您展开第一个子句,则获得a(X,Y), a(Z,Y), b(Z′,Y)。由于 Z 是免费的,a(Z,Y) Y 上的一个简单的存在量词,它已被第一个子句断言,因此表达式折叠为{{1当然这等于a(X,Y), b(Z′,Y),因为 Z'也是一个自由变量。