Alloy - # 和 Int

Alloy - # and Int

我是 Alloy 的新手,想了解 # 如何与 Int 的限制相关联。 考虑以下无自环无向图的简单模型:

sig Node {
 nearBy : set Node
} 
fact { 
  no iden & nearBy  // irreflexive
  ~nearBy in nearBy // symmetric
}
pred connected[nodes : set Node ] {
  all n: Node | Node in n.*nearBy 
}
pred ringTopology[nodes : set Node ] {
 connected[nodes]
 all n: nodes | #n.nearBy = 2
}
run { // (1)
  ringTopology[Node]
} for exactly 5 Node
run { // (2)
  ringTopology[Node]
} for exactly 5 Node, 5 Int

如果我执行上面显示的 (1),某些解决方案会违反 ringTopology 中的#n.nearBy = 2 限制,例如 对于同一个示例,在求值器中我得到#Node4.nearby = -4(负 4!)。 这不会发生在 (2) 中,我得到了一个唯一且正确的解决方案(具有环形拓扑的 10 节点图)。

谢谢, 爱德华多

您使用的 Alloy 是哪个版本?由于整数溢出,您似乎正在获得该解决方案。 Alloy (Alloy 4.2_2015-02-22) 的最新版本有 "Prevent Overflows" 选项(选项 -> 防止溢出)应该可以防止这种情况发生。