【问题标题】:How Can I Specify All Members of a Set Are Unique in Alloy?如何指定一个集合的所有成员在合金中是唯一的?
【发布时间】:2021-07-08 12:48:53
【问题描述】:

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

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

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

check keywordsAreUniqueForDocument for 5

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

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

【问题讨论】:

    标签: alloy


    【解决方案1】:

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

    如果您希望没有两个文档共享关键字,那就是all disj d, d': Document | no d.keywork & d'.keyword。

    【讨论】:

    • 谢谢@Hovercouch。我认为套装只应该允许独特的元素,但我不确定合金套装是否符合这种行为。只是想确保我在关注你——我根本不需要断言,因为根据定义,每个文档的所有关键字都应该是唯一的。我是否正确地关注了你?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    相关资源
    最近更新 更多