【发布时间】:2016-03-25 09:10:13
【问题描述】:
我无法让 Alloy 的基数运算符 (#) 按预期工作,即使是简单的示例也是如此。
比如下面这个合金文件……
sig Y {}
sig X {r : Y -> Y} {
//#r = 2
}
run {} for exactly 1 X, 3 Y
... 给了我一个恰好包含 2 个r-edges 的解决方案(见下图)。但是,如果我取消注释 #r = 2 行,Alloy 将找不到任何解决方案!我做错了什么?
编辑。我发现这个问题只影响AlloyStar(与香草合金相反)。使用 AlloyStar(0.2 版)时,我得到了
执行“运行 run$1 for 1 X, 3 Y”
Solver=minisatprover(jni) Bitwidth=1 MaxSeq=0 Symmetry=20
69 个变量。 12个初级变量。 167 条。 923 毫秒。
找到实例。谓词是一致的。 21 毫秒。
但是当我取消注释 #r = 2 时,我得到了
执行“运行 run$1 for 1 X, 3 Y”
Solver=minisatprover(jni) Bitwidth=1 MaxSeq=0 Symmetry=20
0 变量。 0 个主要变量。 1 条款。 15 毫秒。
没有找到实例。谓词可能不一致。 1 毫秒。
所以我猜这个问题已成为 AlloyStar 开发人员的错误报告!
【问题讨论】:
-
奇怪。即使取消注释该行,我也可以生成实例。
-
@dejvuth 这很有趣!我实际上正在使用 AlloyStar,所以这可能是我的问题的原因。我会进一步探讨......
-
我可以确认,它在 Alloy 4.2 上运行良好。
标签: alloy