数据记录分层

时间:2012-09-12 00:35:08

标签: prolog logic datalog

所以我试图理解Datalog是如何工作的,它和Prolog之间的区别之一是它在否定和递归上存在分层限制。 引用维基百科:

  

如果谓词P是从谓词Q中得出的(即P是   规则的头部,Q在身体的正面发生   规则),那么P的分层数必须大于或   等于Q

的分层数      

如果谓词P是从否定的谓词Q导出的(即P是   规则的负责人,Q在同一规则的主体中发生负面影响),   那么P的分层数必须大于   Q的分层数,

因此,顺便说一句,以下两个谓词不会导致分层错误,因为它们可以简单地分配相同的分层数。因此,尽管有循环定义,这些谓词都很好。

  1. A(x): - B(x)
  2. B(x): - A(x)
  3. 但是如果我们有一个含有一些否定的定义(其中〜是否定的话)会发生什么呢?

    1. A(x): - 〜B(x)
    2. B(x): - ~A(x)
    3. 这里的分层是不可能的。 A(x,y)必须具有大于B(x,y)的分层数,并且B(x,y)必须具有大于A(x,y)的分层数。我的第一个想法是,这不是正常的,因为这是一个循环定义,但只要谓词不被否定,分层就可以完成循环。但为什么?真值是简单的二元值。以这种方式处理具有不同符号的公式似乎是极其随意的。在第二种不是第一种情况的情况下,这种分层试图防止的是什么?

1 个答案:

答案 0 :(得分:8)

我认为问题在于:

  

A(x): - \ + B(x)

     

B(x): - \ + A(x)

......它的语义含糊不清。该程序有两个最小模型,即{A(x)}{B(x)},因此在定点语义下没有明确定义(没有修复)点)或模型理论语义(没有唯一的最小模型)。

为了解决这个问题,Datalog的分层语义对Datalog程序的语法施加了限制,这样,如果程序存在分层,那么它将会在固定点和模型理论语义中也有一个独特的最小模型(反之亦然,我相信)。

您可以在文章“Serge Abiteboul,Richard Hull和Victor Vianu的数据库基础”中找到更多有关Datalog的分层语义的详细信息,这些文章恰好是免费提供的{{3 },以及online中的相关详细信息。这篇优秀的文字还解释了我上面使用的大多数其他术语,如模型,定点等,如果你被卡住了。