防止数据记录逻辑中的对称对

Preventing symetric pairs in datalog logic

我是 运行 jupyter notebookclingo 的数据记录规则,针对图节点检查共享相同直接祖先的节点,如下所示:

ancestor(A,B).
ancestor(A,C).
sibs(X,Y) = ancestor(Z,X), ancestor(Z,Y), X!=Y.

这给了我 2 个对称对,即

sibs(B,C) sibs(C,B)

如何将同胞的生成限制为只有这两种结果中的一种?

设法追查到问题。为确保您不会 return 两个结果都更改此:

sibs(X,Y) = ancestor(Z,X), ancestor(Z,Y), X!=Y.

对此:

sibs(X,Y) = ancestor(Z,X), ancestor(Z,Y), X<Y.