2012-09-12 28 views
5

所以我想了解Datalog是如何工作的,它和Prolog之間的區別之一是它對分層和遞歸有分層限制。 引述百科:Datalog分層

如果謂詞p是正從謂詞Q衍生(即,P是 規則的頭部,並且Q在同一 規則體正發生),則P的分層數目必須大於或 等於分層數量爲Q

如果謂詞P從一個否定謂詞Q衍生(即,P是一個規則的 頭,且Q在負發生相同規則的正文), 那麼P的分層數必須大於 分層Q,

因此,通過這樣做,以下兩個謂詞不會導致分層錯誤,因爲它們可以簡單地分配相同的分層數。所以儘管有循環定義,這些謂詞也很好。

  1. A(X): - B(X)
  2. B(X): - A(X)

但相比之下,與如果我們有有一些否定的定義發生了什麼涉及(凡〜是否定)

  1. A(x)的: - 〜B(x)的
  2. B(x)的: - 〜A(x)的

這裏分層是不可能的。 A(x,y)必須具有大於B(x,y)的分層數並且B(x,y)必須具有大於A(x,y)的分層數。我的第一個想法是,這是不好的,因爲這是一個循環定義,但只要謂詞不被否定,分層就可以循環。但爲什麼?真值只是二元的。以這種方式處理具有否定符號的公式似乎是非常武斷的。在第一種情況下,這種分層試圖防止什麼?

回答

7

我認爲該問題:

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

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

......它是含糊不清的語義。這種方案有兩個最小模型,即{A(x)}{B(x)},並且因此不是根據定點語義(沒有固定的點)或模型理論語義(沒有獨特的最小模型)下明確定義。

爲了解決這個問題,分層語義的數據記錄規定了數據記錄程序的語法限制,例如,如果一個分層存在的程序,那麼它也有兩個獨特的,最小模型固定點和模型理論語義(反之亦然,我相信)。

你可以找到更多關於數據記錄分層語義的這恰好是免費提供online,有關詳細的文字「由塞爾日·阿比特博,理查德·赫爾和維克托·維安數據庫基礎」的精確細節Chapter 15。這本優秀的文章還解釋了我上面使用的大多數其他術語,如模型,定點等,如果你被卡住了。