合金 - #和Int

时间:2016-05-23 13:55:14

标签: alloy

我是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限制,例如: enter image description here 对于同一个例子,在评估器中我得到#Node4.nearby = -4(减4!)。 这不会发生在(2),我得到一个独特而正确的解决方案(带有环形拓扑的10节点图)。

谢谢, 爱德华多

1 个答案:

答案 0 :(得分:1)

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