Datalog 的单面统一是不是足够?

Posted

技术标签:

【中文标题】Datalog 的单面统一是不是足够?【英文标题】:Is single sided unification sufficient for Datalog?Datalog 的单面统一是否足够? 【发布时间】:2021-05-25 02:34:36 【问题描述】:

Datalog 很容易用 Prolog 的一个子集来识别 不使用函数符号,而只使用常量和变量。 但是不使用否定的纯 Datalog 有进一步的约束(*):

    每一个事实都是有根据的。 规则头中的每个变量也出现在规则主体中。

我们能否得出结论,单面统一就足以 回答分层数据记录查询?或者有没有例子,可以证明 SWI-Prolog 8.3.19,单面有 (=>)/2

unfication,即纯 Datalog 但不以单面统一运行?

(*)你一直想知道的关于 Datalog 的知识 切里等。人。 - 1989https://www.researchgate.net/publication/3296132

【问题讨论】:

【参考方案1】:

答案是否定的。对于最简单的 Datalog 事实和查询,直接转换为单面统一已经不起作用:

p(a).

?- p(X).
X = a

如果我们将 Prolog 事实 P 设为 P :- true,则通过 (=>)/2 将事实重写为 P => true。 SWI-Prolog 8.3.19 演示了这个东西不再起作用了:

p(a) => true.

?- p(X).
ERROR: No rule matches p(_2556)

甚至 Picat 也被这个问题所困扰,并且最初对事实进行了特殊处理。最近发布的 Picat v3 甚至重新引入了 Horn 子句。

【讨论】:

以上是关于Datalog 的单面统一是不是足够?的主要内容,如果未能解决你的问题,请参考以下文章

单面统一可以改善错误处理吗?

有没有办法使用 vbo 在 Opengl 中使用单个输入值而不是统一的?

DataLog 是不是等同于 SQL?

CUDA统一内存和Windows 10

如果未绑定,统一值是不是保留在 GLSL 着色器中?

看看我是不是在统一线程上