2017-02-25 174 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。
  • 还有什么?
相关问题