我有二元关系,如果所有二元关系都是对称的,我想得到结果为真,否则为假。到目前为止,我有这个:
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。
答案 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.