为什么以下 Datalog 程序是等效的?
对于某些存在谓词 a,b 为什么 this:
q(X,Y) <-- a(X,Y), q(Z,Y)
q(X,Y) <-- b(X,Y)
等价于 this:
q(X,Y) <-- a(X,Y), b(Z,Y)
q(X,Y) <-- b(X,Y)
? 为什么顶层递归不能继续扩展呢?
For some existentional predicates a,b why is this:
q(X,Y) <-- a(X,Y), q(Z,Y)
q(X,Y) <-- b(X,Y)
equivalent to this:
q(X,Y) <-- a(X,Y), b(Z,Y)
q(X,Y) <-- b(X,Y)
?
Why can't the top recursion just continue to expand?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果将第一个子句展开一次,您将得到
a(X,Y), a(Z,Y), b(Z′,Y)
。由于 Z 是自由的,a(Z,Y)
是 Y 上的一个简单存在量词,它已由第一个子句断言,因此表达式折叠为a(X,Y), b(Z′,Y)
,这当然相当于a(X,Y), b(Z,Y)< /code>,因为 Z′ 也是一个自由变量。
If you expand the first clause once, you get
a(X,Y), a(Z,Y), b(Z′,Y)
. Since Z is free,a(Z,Y)
is a simple existential quantifier on Y, which has already been asserted by the first clause, so the expression collapses toa(X,Y), b(Z′,Y)
, which is of course equivalent toa(X,Y), b(Z,Y)
, since Z′ is also a free variable.