非單調謂詞
以下是不是單調的謂詞示例 :
- 像
var/1
,integer/1
等的元邏輯謂詞 - 術語比較謂詞如
(@<)/2
和(@>=)/2
- 謂詞使用
!/0
,(\+)/1
和其他打破單調性的結構 - 所有解決方案的謂詞如
findall/3
和setof/3
。
如果使用這些謂詞,那麼新增目標可能會導致更多的解決方案,這與邏輯中已知的重要宣告性屬性相反,即新增約束最多可以減少,從不擴充套件解決方案集。
因此,我們依賴於宣告性除錯和其他推理的其他屬性也會被破壞。例如,非單調謂詞打破了從一階邏輯中已知的連詞交換的基本概念。以下示例說明了這一點:
?- var(X), X = a.
X = a.
?- X = a, var(X).
false.
像 findall/3
這樣的全解決方案謂詞也打破了單調性: 新增條款可能會導致之前持有的目標失敗。這也與從一階邏輯中已知的單調性背道而馳,其中新增事實最多可以增加,而不會減少後果集。 ** ** ** **