如何在Alloy中指定Int

时间:2015-04-10 04:58:12

标签: alloy

我查看了Alloy中的 Int 实现(即util目录中的integer.als文件),我想出了以下表达式(除了许多其他表达式),我无法理解:

  

fun add [n1,n2:Int]:Int {this / plus [n1,n2]}

     

有趣加[n1,n2:Int]:Int {n1 fun / add n2}

我有两个问题:

1)这些功能的主体是什么意思? (似乎有人打电话给另一个人!任何人都可以解释一下这个工具如何添加!?)

2)合金中的有限整数(即Int)是否有任何公理定义?

我正在寻找是否有任何一组公理将 Int 定义为自然数的有限子集,即0 =< Int< =最大在Alloy中有这样的东西,或者它只是在这些看似假的函数的引擎下使用常见的整数。(在后一种说法中,我假设函数体是假的,这可能部分回答我的第一个问题!)

2 个答案:

答案 0 :(得分:4)

  1. this/plus只是“调用”同一文件(plus)中定义的integer.als函数;另一方面,fun/add调用内置的add函数,该函数是Alloy实现的一部分,不能定义为库。内置的add函数实现了以二进制补码表示的两个整数的二进制加法,这不能在Alloy语言级别完成。

  2. 合金中没有整数的公理定义。 Alloy显式枚举位宽内的所有整数,并将它们添加到Alloy Universe(以及所有其他原子)

答案 1 :(得分:0)

要查找max int,您应该搜索位宽。在run语句中指定Int作用域时,指定位宽。例如,如果指定

run{} for 3 Int

你会得到大到3和小到-4的整数。 一般规则是(2 ^ x-1)-1表示正数,(2 ^ x-1)表示负数,其中X是Int的范围。

我想util / integer中的lib是帮助处理Alloy中棘手的Int语义的辅助工具