簡體   English   中英

在Prolog中定義條件材料

[英]Defining the material conditional in Prolog

我一直試圖適應Prolog和Horn條款,但從形式邏輯的過渡仍然感到尷尬和被迫。 我知道以標准形式提供所有東西都有好處,但是:

定義材料條件運算符的最佳方法是什么-->在Prolog中,當A = trueB = trueB = false時, A --> B成功? 也就是說, iffalse而沒有else ,則if->then語句不會fail

真相表

另外,Horn條款的非顯而易見的優點究竟什么?

在Prolog中定義材質條件運算符的最佳方法是什么?

AB只是要綁定到原子的變量truefalse ,這很容易:

cond(false, _).
cond(_, true).

但總的來說,沒有最好的方法,因為Prolog沒有提供適當的否定,只有作為失敗的否定 ,這是非單調的。 最接近實際命題AB的經常是

(\+ 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.

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