0
海報問如何比較Alloy中的函數。在測試一個小例子(比較謂詞而不是函數)來回答這個問題時,我注意到了下面的行爲,這讓我很困惑。比較謂詞
只要檢查命令的邊界高於3且事實'f1'處於活動狀態,分析儀就不會找到反例。激活事實,分析儀按預期工作。爲什麼冗餘事實'f1'修改分析儀的操作,以及爲什麼在邊界高於3的情況下?
open util/ordering [V]
sig V {}
fact f1 {
# V > 0
}
pred p1 [x: V] {
x = last
}
pred p2 [x: V] {
x = first
}
assert a1 {
all x: V | p1[x] <=> p2[x]
}
check a1 for 3
似乎只要檢查邊界是4或更高,並且'f1'處於活動狀態,分析儀就會報告'0變量。 0個主要變量。 0條款。「
指定更高的Int範圍已解決該問題。感謝您的建議。 –
我會補充說,一旦您對簽名設置了排序,該簽名鍵入的原子數就一定是分析運行的範圍。您因此可以擺脫事實1。 –