不对称二元关系,我的代码运行不正常

Asymmetric binary relations, my code is not working good

这是我的代码:

binary_relations(x,y) .
binary_relations(y,z) .

asymmetric :-
  not(symmetric) .

symmetric :-
  binary_relations(X,Y) ,
  binary_relations(Y,X) .

一切都是真的,程序运行良好,但如果我写:

binary_relations(x,y).
binary_relations(y,y).
binary_relations(y,z).

程序是假的。

如您所见,我需要做的是非对称二元关系。有人帮忙吗?这种情况怎么办?

开始你必须写:不对称。

考虑以下知识库明确描述了三个二元关系r1/2r2/2r3/3

r1(a,a).
r1(a,b).
r1(b,a).
r1(a,c).
r1(c,a).

r2(a,b).
r2(a,c).

r3(a,a).
r3(b,a).
r3(a,c).

很明显r1/2是对称的,r2/2r3/2都是反对称的,r2/2是三者中唯一的不对称

让我们尝试用自然语言表达,然后使用逻辑。关系 R 是对称的,如果两个对象 XY 使得 R(X,Y) 为真,但 R(Y,X) 为假不存在。

symmetric(R):-
    \+ (call(R, X, Y), \+ call(R, Y, X)).

如果没有两个对象(不一定不同)使得 R(X,Y)R(Y,X) 都为真,则关系 R 是不对称的。

asymmetric(R):-
    \+ (call(R, X, Y), call(R, Y, X)).

第三,关系 R 是反对称的,如果 R(X,Y)R(Y,X) 都为真意味着 XY 是同一个实体(换句话说:没有两个不同的对象 XY 使得 R(X,Y)R(Y,X) 都为真。

antisymmetric(R):-
    \+ (call(R, X, Y), call(R, Y, X), Y \== X).

还有一些疑问:

?- symmetric(r1).
true.

?- symmetric(r2).
false.

?- symmetric(r3).
false.

?- asymmetric(r1).
false.

?- asymmetric(r2).
true.

?- asymmetric(r3).
false.

?- antisymmetric(r1).
false.

?- antisymmetric(r2).
true.

?- antisymmetric(r3).
true.