簡體   English   中英

如何在Alloy中指定Int

[英]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中有這樣的東西嗎,或者只是在這些看似虛假的函數的后台使用了普通整數。(通過后一種說法,我認為函數體是虛假的,這可能部分回答了我的第一個問題!)

  1. this/plus只是“調用”在同一文件中定義的plus函數( integer.als ); 另一方面, fun/add調用內置的add函數,該函數是Alloy實現的一部分,不能定義為庫。 內置的add函數實現以二進制補碼表示的兩個整數的二進制加法,這在Alloy語言級別無法實現。

  2. 在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM