2

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

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.

但在这种情况下,我想让结果为假,因为没有二元关系结婚(汤姆,玛丽)(根据公式∀x,y:xRy⇒yRx)。另一方面,当我有这些二元关系时:

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

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

4

1 回答 1

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.
于 2014-11-30T09:05:42.927 回答