我是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节点图)。
谢谢, 爱德华多
答案 0 :(得分:1)
您使用的是哪个版本的Alloy?由于整数溢出,您似乎得到了该解决方案。 Alloy(Alloy 4.2_2015-02-22)的最新版本有"防止溢出"选项(选项 - >防止溢出)应防止这种情况发生。