2017-02-25 177 views
1

我想知道如何表達一個公式如何表達∀X∃Y r(X,Y),∃XŸY r(X,Y)?

  • ∀ X ∃ŸR(X,Y);和
  • ∃ X&forall的; Y R(X,Y)
中的Prolog

。 (我的理解是,序言應該能夠表達這些公式,我無法找到我的Prolog的教科書和他們一樣的東西)


UPDATE

我從j4n bur53的信息回答莫不是在Prolog中,我的問題的答案在某種程度上取決於r的性質,或者更具體地說,關於r的論據屬於的集合的性質。

因此,爲了具體,下面我描述兩種我現在感興趣的情況(並且是相當規範的)。 (碰巧,這兩種情況下與FORALL; X ∃ŸR(X,Y)是真實的,∃ X∀ Y R(X,Y)是假的。)

案例1r給予明確由以下兩個事實(僅此而已):

r(1, 2). 
r(2, 1). 

案例2r是≤的(積極)的自然數ň = {1,2,3,... }。因此r(1, Y)對於Y的所有可允許的實例化都是正確的,但是沒有X的實例化,因此r(X, Y)對於Y的所有實例化均爲真。

回答

1

最容易的是使用領域相關的量詞,讓我們假設X和Y來自領域a(。)和b(。)。然後,您可以將它表示爲如下:

∀X (a(X) -> ∃Y (b(Y) & r(X, Y)))   (1) 
∃X (a(X) & ∀Y (b(Y) -> r(X, Y)))   (2) 

現在結合(&)/ 2是直接Prologs結合(,)/ 2。並且爲了暗示( - >)/ 2,觀察以下邏輯等價A→B ==〜(A &B)。

因此,如果我們允許我們否定爲失敗(+)/ 1否定(〜)/ 1,我們可以定義一個元謂詞,這是在許多Prolog的系統預定義的(例如SWI-Prolog),具體如下:

forall(F, G) :- \+ (F, \+ G). 

因此,如果我們在這裏接受所有的轉換,那麼最後這兩個查詢將相當於下面的Prolog查詢。

?- forall(a(X), (b(Y),r(X,Y))). 
?- a(X), forall(b(Y), r(X,Y)). 

的方法通常適用於數據記錄,但並沒有在這種情況下:

  • 如果a或b是無限的()()。
  • 如果r(。,。)具有其他參數,即否定故障丟棄綁定。
  • 如果需要經典推理,即失敗的否定太弱,這裏
  • 如果涉及到約束條件,我們可能需要foreach/2而不是forall/2。
  • 還有什麼?
相關問題