所以我想了解Datalog是如何工作的,它和Prolog之間的區別之一是它對分層和遞歸有分層限制。 引述百科:Datalog分層
如果謂詞p是正從謂詞Q衍生(即,P是 規則的頭部,並且Q在同一 規則體正發生),則P的分層數目必須大於或 等於分層數量爲Q
的如果謂詞P從一個否定謂詞Q衍生(即,P是一個規則的 頭,且Q在負發生相同規則的正文), 那麼P的分層數必須大於 分層Q,
因此,通過這樣做,以下兩個謂詞不會導致分層錯誤,因爲它們可以簡單地分配相同的分層數。所以儘管有循環定義,這些謂詞也很好。
- A(X): - B(X)
- B(X): - A(X)
但相比之下,與如果我們有有一些否定的定義發生了什麼涉及(凡〜是否定)
- A(x)的: - 〜B(x)的
- B(x)的: - 〜A(x)的
這裏分層是不可能的。 A(x,y)必須具有大於B(x,y)的分層數並且B(x,y)必須具有大於A(x,y)的分層數。我的第一個想法是,這是不好的,因爲這是一個循環定義,但只要謂詞不被否定,分層就可以循環。但爲什麼?真值只是二元的。以這種方式處理具有否定符號的公式似乎是非常武斷的。在第一種情況下,這種分層試圖防止什麼?