Prolog - 如果二元关系是对称的,则为true

时间:2014-11-30 08:53:26

标签: prolog relation symmetric

我有二元关系,如果所有二元关系都是对称的,我想得到结果为真,否则为假。到目前为止,我有这个:

married(mary, tom).
married(sam, linda).
married(linda, sam).

spouse(X, Y) :- married(X, Y), married(Y, X).

结果如下:

?- spouse(X, Y).
X = sam,
Y = linda ;
X = linda,
Y = sam ;
false.

但是在这种情况下我想得到结果为假,因为没有二元关系结婚(tom,mary)(根据formule∀x,y:xRy⇒yRx)。而另一方面,当我有这些二元关系时:

married(tom, mary).
married(mary, tom).
married(sam, linda).
married(linda, sam).

我希望结果为真,因为二元关系是对称的。我怎样才能做到这一点?我使用的是SWI-Prolog。

1 个答案:

答案 0 :(得分:3)

  

如果所有二元关系都是对称的,我想得到结果为真,否则为假。

all_relations_symmetric :- not(some_relations_not_symmetric).
some_relations_not_symmetric :- married(X, Y), not(married(Y, X)).

第一个例子:

?- all_relations_symmetric.
false.

对于第二个:

?- all_relations_symmetric.
true.