簡體   English   中英

堅定性:定義及其與邏輯純度和終止的關系

[英]Steadfastness: Definition and its relation to logical purity and termination

到目前為止,我一直堅持 Prolog程序意味着:

如果對於一個查詢Q ,有一個subterm S ,這樣有一個長期T ,讓?- S=T, Q.雖然成功 ?- Q, S=T. 失敗 ,然后由Q調用的謂詞之一不是堅定的。

直覺上,我因此堅定地表示我們不能使用實例化來“欺騙”謂詞來提供解決方案,否則這些解決方案不僅不會被給予,而是被拒絕 注意非終止程序的區別!

特別是,至少在我看來, 總是意味着堅定不移。


例子 為了更好地理解堅定性的概念,考慮這個屬性的幾乎經典的反例,在將高級學生引入Prolog的操作方面時經常引用,使用兩個整數之間關系的錯誤定義及其最大值:

integer_integer_maximum(X, Y, Y) :-
        Y >= X,
        !.
integer_integer_maximum(X, _, X).

這個中的一個明顯錯誤 - 我們應該說“ 搖擺不定 ” - 定義當然是以下查詢錯誤地成功:

?- M = 0, integer_integer_maximum(0, 1, M).
M = 0. % wrong!

而交換目標產生了正確的答案:

?- integer_integer_maximum(0, 1, M), M = 0.
false.

這個問題的一個很好的解決方案是依靠方法來描述關系,例如:

integer_integer_maximum(X, Y, M) :-
        M #= max(X, Y).

這在兩種情況下都能正常工作,甚至可以在更多情況下使用:

?- integer_integer_maximum(0, 1, M), M = 0.
false.

?- M = 0, integer_integer_maximum(0, 1, M).
false.

| ?- X in 0..2, Y in 3..4, integer_integer_maximum(X, Y, M).
X in 0..2,
Y in 3..4,
M in 3..4 ? ;
no

現在由Covington等人撰寫的Prolog編寫指南,由理論家的發明者 Richard O'Keefe共同撰寫,包含以下部分:

5.1謂詞必須堅定不移。

任何體面的謂詞必須是“堅定的”,即如果其輸出變量已經恰好被實例化為輸出值,則必須正常工作(O'Keefe 1990)。

那是,

 ?- foo(X), X = x. 

 ?- foo(x). 

必須在完全相同的條件下成功並具有相同的副作用。 不這樣做只能用於輔助謂詞,其調用模式受主謂詞的強烈約束。

因此,引用文章中給出的定義比我上面所述的定義要嚴格得多。

例如,考慮 Prolog程序:

nat(s(X)) :- nat(X).
nat(0).

現在我們處於以下情況:

?- nat(0).
true.

?- nat(X), X = 0.
nontermination

這顯然違反了在完全相同條件下成功的屬性,因為其中一個查詢根本不再成功

因此我的問題是:我們是否應該稱上述計划堅定? 證明你的答案,並在現有文獻中解釋堅定性及其定義背后的意圖,與關系以及相關的終止概念。

在“The prolog”第96頁中,Richard O'Keef說'即使查詢具有意外形式(通常為我們通常認為的輸入值提供值),我們也稱拒絕給出錯誤答案的屬性'堅定'

*我不確定這是否應該是輸出。 即在您的查詢中?- M = 0, integer_integer_maximum(0, 1, M). M = 0. % wrong! ?- M = 0, integer_integer_maximum(0, 1, M). M = 0. % wrong! M用作輸入,但該子句被設計為輸出。

nat(X), X = 0.我們使用X作為輸出變量而不是輸入變量,但它沒有給出錯誤的答案,因為它沒有給出任何答案。 所以我認為根據這個定義,它可以是堅定的。

他給出的經驗法則是“推遲輸出統一直到削減后”。 在這里,我們沒有削減,但我們仍然想推遲統一。

但是我認為首先使用基本情況而不是遞歸情況是明智的,因此nat(X), X = 0.最初會成功..但是你仍然會有其他問題..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM