我查看了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中有这样的东西,或者它只是在这些看似假的函数的引擎下使用常见的整数。(在后一种说法中,我假设函数体是假的,这可能部分回答我的第一个问题!)
答案 0 :(得分:4)
this/plus
只是“调用”同一文件(plus
)中定义的integer.als
函数;另一方面,fun/add
调用内置的add
函数,该函数是Alloy实现的一部分,不能定义为库。内置的add
函数实现了以二进制补码表示的两个整数的二进制加法,这不能在Alloy语言级别完成。
合金中没有整数的公理定义。 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语义的辅助工具