Alloy で整数を使う際のビット幅の件
結論としては、
・ デフォルトではビット幅が 3 ( -4 〜 3 ) になっている(デフォルトのスコープが Int にも適用される)
・ 指定のビット幅の範囲を超える整数についての式は結果が不定(?)
・ 特にエラー、警告は出ない。
ということのようである。
※Alloy Analyzer 4.2 での話。
ビット幅の件はp132参照。
なお、明示的に Int シグネチャを指定せず、濃度制約等で整数を定数として使用してもアウトらしい。
sig B {}
sig A {
rel : set B
}
このモデルで、
pred show {
#rel > 8
}
run show
とやると、デフォルトのスコープが3なので、Aが3個、Bが3個で rel が9個になるインスタンスのみが真になるはずだが、解析の結果そうでないものが大量に引っかかる。
pred show {
#rel > 8
}
run show for 3 but 5 Int
とやると、A 3, B3, rel 9 のインスタンスのみが引っかかる。