不对称二元关系,我的代码运行不正常
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/2
、r2/2
和r3/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/2
和r3/2
都是反对称的,r2/2
是三者中唯一的不对称
让我们尝试用自然语言表达,然后使用逻辑。关系 R
是对称的,如果两个对象 X
,Y
使得 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)
都为真意味着 X
和 Y
是同一个实体(换句话说:没有两个不同的对象 X
、Y
使得 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.
这是我的代码:
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/2
、r2/2
和r3/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/2
和r3/2
都是反对称的,r2/2
是三者中唯一的不对称
让我们尝试用自然语言表达,然后使用逻辑。关系 R
是对称的,如果两个对象 X
,Y
使得 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)
都为真意味着 X
和 Y
是同一个实体(换句话说:没有两个不同的对象 X
、Y
使得 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.