即使在簡單的示例中,我也無法使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版本),我得到
執行 「運行運行$ 1整整1 X,3 Y」
求解= minisatprover(JNI)位寬= 1 MaxSeq = 0對稱= 20
69變異。 12個主要變量。 167條款。 923ms。
發現實例。謂詞是一致的。 21ms。
但是當我取消對#r = 2
,我得到
執行 「運行運行$ 1整整1 X,3 Y」
求解= minisatprover(JNI)位寬= 1 MaxSeq = 0對稱= 20
0變量。 0個主要變量。 1條款。爲15ms。
找不到實例。謂詞可能不一致。 1毫秒。
所以我想這個問題已經成爲AlloyStar開發者的錯誤報告!
奇怪。即使取消註釋,我也可以生成實例。 – dejvuth
@dejvuth這很有趣!我實際上使用AlloyStar,所以這可能是我的問題的原因。我會進一步探究...... –
我可以證實,它在Alloy 4.2上工作得很好。 – k4rtik