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" 选项(选项 -> 防止溢出)应该可以防止这种情况发生。
我是 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 限制,例如
谢谢, 爱德华多
您使用的 Alloy 是哪个版本?由于整数溢出,您似乎正在获得该解决方案。 Alloy (Alloy 4.2_2015-02-22) 的最新版本有 "Prevent Overflows" 选项(选项 -> 防止溢出)应该可以防止这种情况发生。