如何指定集合的​​所有成员在 Alloy 中都是唯一的?

How Can I Specify All Members of a Set Are Unique in Alloy?

我有一个 alloy 模型。本着小型复制示例的精神,我提取了以下内容:

sig SearchTerm {}
sig Document{
    keyword: set SearchTerm
}

assert keywordsAreUniqueForDocument {
    all k, k' : Document.keyword | k != k'
}

check keywordsAreUniqueForDocument for 5

我想要实现的是与特定文档关联的关键字集应该是唯一的。但这立即向我展示了一个微不足道的反例。

如何指定集合中不应有重复的元素?

document.keyword 是一个集合,根据集合定义,它只是唯一的元素。你得到一个反例 k = k'。如果您改写 all disj k, k' : Document.keyword | k != k',它会轻松通过。

如果您不想让两个 文档 共享关键字,那就是 all disj d, d': Document | no d.keywork & d'.keyword.