非單調謂詞

以下是不是單調的謂詞示例 :

  • var/1integer/1 等的元邏輯謂詞
  • 術語比較謂詞如 (@<)/2(@>=)/2
  • 謂詞使用 !/0(\+)/1 和其他打破單調性的結構
  • 所有解決方案的謂詞findall/3setof/3

如果使用這些謂詞,那麼新增目標可能會導致更多的解決方案,這與邏輯中已知的重要宣告性屬性相反,即新增約束最多可以減少,從不擴充套件解決方案集。

因此,我們依賴於宣告性除錯和其他推理的其他屬性也會被破壞。例如,非單調謂詞打破了從一階邏輯中已知的連詞交換的基本概念。以下示例說明了這一點:

?- var(X), X = a.
X = a.

?- X = a, var(X).
false.

findall/3 這樣的全解決方案謂詞也打破了單調性: 新增條款可能會導致之前持有的目標失敗。這也與從一階邏輯中已知的單調性背道而馳,其中新增事實最多可以增加,而不會減少後果集。 ** ** ** **