如何动态设置Int的大小?

时间:2018-04-01 11:58:02

标签: alloy

下面的模型表示二进制搜索算法模型的一部分。

二进制搜索算法的关键步骤之一是计算lowhigh之间的中间值。通过将low添加到high然后除以2来计算。

因此,我的模型的字段low类型为Inthigh类型为Intmid类型为Int

运行模型时,Int的默认大小是4位有符号整数,其值范围介于-8和+7之间。如果low的值为6且high的值为6,则6 + 6 = 12,这太大而且总和溢出到-4。除以2得到-2而mid有一个负值......哎哟!

我想断言mid总是积极的。但是,如上所述,如果Int未设置为足够大的大小,则可能为负。有没有办法动态设置Int的大小?

我希望我的断言说出这样的话:

for some size of Int
    mid_is_low_plus_high_div_2 =>
        Test.mid >= 0

有没有办法表达出来?

one sig Test {
    low: Int,
    high: Int,
    mid: Int
} {
    low in {i: Int | i >= 0 }
    high in {i: Int | i >= 0 }
}

pred mid_is_low_plus_high_div_2 {
   Test.mid = div[plus[Test.low, Test.high], 2]
}

assert mid_is_always_positive {
    mid_is_low_plus_high_div_2 =>
        Test.mid >= 0
}
check mid_is_always_positive

0 个答案:

没有答案