[英]Defining the material conditional in Prolog
我一直試圖適應Prolog和Horn條款,但從形式邏輯的過渡仍然感到尷尬和被迫。 我知道以標准形式提供所有東西都有好處,但是:
定義材料條件運算符的最佳方法是什么-->
在Prolog中,當A = true
且B = true
或B = false
時, A --> B
成功? 也就是說, if
為false
而沒有else
,則if->then
語句不會fail
。
另外,Horn條款的非顯而易見的優點究竟是什么?
在Prolog中定義材質條件運算符的最佳方法是什么?
當A
和B
只是要綁定到原子的變量true
和false
,這很容易:
cond(false, _).
cond(_, true).
但總的來說,沒有最好的方法,因為Prolog沒有提供適當的否定,只有作為失敗的否定 ,這是非單調的。 最接近實際命題A
和B
的經常是
(\+ A ; B)
試圖證明A
,然后如果A
無法證明則繼續B
(這並不意味着由於封閉世界假設它是假的)。
然而,在Prolog中應謹慎使用否定。
另外,Horn條款的非顯而易見的優點究竟是什么?
他們有一個簡單的程序性閱讀。 Prolog是一種編程語言 ,而不是一個定理證明者。 編寫具有明確邏輯意義的程序是可能的,但它們仍然是程序。
要了解差異,請考慮經典的排序問題。 如果L
是沒有重復的數字列表,那么
sort(L, S) :-
permutation(L, S),
sorted(S).
sorted([]).
sorted([_]).
sorted([X,Y|L]) :-
X < Y,
sorted([Y|L]).
是S
按排序順序包含L
元素的含義的邏輯規范。 但是,它也有一個程序意義,即:嘗試L
所有排列,直到你有一個排序。 在最壞的情況下,這個程序貫穿所有n ! 排列,即使排序可以在O( n lg n )時間內完成,使其成為一個非常差的排序程序。
另見這個問題 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.