Alloy 中如何指定 Int

How Int is specified in Alloy

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

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

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

我有两个问题:

1) 这些函数的主体是什么意思? (好像一个叫另一个!谁能解释一下这个工具是怎么添加的!?)

2) Alloy中的有限整数(即Int)是否有公理化定义?

我想看看是否有任何一组公理将 Int 定义为自然数的有限子集,即 0 =< Int <= Max。 Alloy 中是否有这样的东西,或者它只是在这些看似伪造的函数的幕后使用普通整数。(根据后一种说法,我假设函数体是伪造的,这可能部分回答了我的第一个问题! )

要找到最大整数,您应该搜索位宽。当您在 运行 语句中指定 Int 范围时,您指定了位宽。例如,如果您指定

run{} for 3 Int

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

我猜 util/integer 中的库是处理 Alloy

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

  2. Alloy 中没有整数的公理定义。 Alloy 显式枚举位宽内的所有整数并将它们添加到 Alloy 宇宙(连同所有其他原子)