[英]How Int is specified in Alloy
我查看了Alloy中的Int實現(即util目錄中的integer.als
文件),並提出了以下我無法理解的表達式(除了許多其他表達式):
有趣的添加[n1,n2:Int]:Int {this / plus [n1,n2]}
fun加[n1,n2:Int]:Int {n1 fun / add n2}
我有兩個問題:
1)這些功能的主體是什么意思? (似乎一個叫另一個!任何人都可以解釋一下這個工具是怎么添加的!!)
2)合金中的有限整數(即Int)是否有公理定義?
我正在查看是否有任何公理集將Int定義為自然數的有限子集,即0 = <Int <= Max。 在Alloy中有這樣的東西嗎,或者只是在這些看似虛假的函數的后台使用了普通整數。(通過后一種說法,我認為函數體是虛假的,這可能部分回答了我的第一個問題!)
this/plus
只是“調用”在同一文件中定義的plus
函數( integer.als
); 另一方面, fun/add
調用內置的add
函數,該函數是Alloy實現的一部分,不能定義為庫。 內置的add
函數實現以二進制補碼表示的兩個整數的二進制加法,這在Alloy語言級別無法實現。
在Alloy中沒有公理的整數定義。 Alloy明確枚舉位寬內的所有整數,並將它們添加到Alloy宇宙中(以及所有其他原子)
要找到最大整數,應搜索位寬。 在run語句中指定Int范圍時,請指定位寬。 例如,如果您指定
run{} for 3 Int
您將獲得大至3且小至-4的整數。 對於正數,一般規則是(2 ^ x-1)-1,對於負數是(2 ^ x-1),其中X是Int的范圍。
我猜util / integer中的庫是處理Alloy中棘手的Int語義的助手
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.