簡體   English   中英

為什么這個 Key 動態邏輯問題得到證明,肯定將 2147483647 的 java int 增加 1 應該是 -2147483648?

[英]Why does this KeY dynamic logic problem get prooved, surely incrementing a java int of 2147483647 by 1 should be -2147483648?

以下是 Key Dynamic Logic 問題文件 (.key) 的條目。 當我使用 Key theorem proover 運行時,該文件得到了證明。 為什么這個 Key 動態邏輯問題得到證明,肯定將 2147483647 的 java int 增加 1 應該是 -2147483648?

\programVariables {
        int i;
}

\problem {
        {i:=Integer.MAX_VALUE}
           \<{
               i++;
             }\> i=2147483648
}

Key 允許 integer 溢出的更多選項。 它們可以通過 Options-> Taclet Options -> intRules 訪問(或者可能在其他版本中類似的東西)。

一個選項,在我的例子中是默認選項,忽略溢出並證明了問題,另外兩個警告溢出或行為與 java 完全相同,但沒有證明問題。 我在 2.6.3 版本中嘗試過此操作(否則它可能仍然是您的版本中的錯誤,或者並非總是觸發,但這似乎不太可能)。

解決方案是同時調整 Taclet 選項和證明搜索策略。

選項 -> Taclet 選項 -> intRules -> intRules:javaSemantics

證明搜索策略(選項卡)-> 算術處理-> Model 搜索或 DefOps

我覺得默認配置應該完全反映Java語義作為整點對Java做驗證。 我知道在某些特定情況下,偏離實際的 Java 語義會很有用,但這不應該是默認情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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