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



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

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.

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

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

我想得到的结果是真的,因为二元关系是对称的。我该怎么做?我正在使用SWI-Prolog。

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

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.

相关内容

最新更新