标签: key-formal-verification

Key 难以处理三元运算符

我正在与 KeY ( https://www.key-project.org )一起玩一个教学项目。

一方面,我很高兴 KeY 轻松证明了以下带 jml 注释的 Java 代码的正确性

/*@ ensures ((\result == a) || (\result == b));                                                                        
  @ ensures ((\result >= a) && (\result >= b));                                                                        
*/
public int max(int a, int b) {
    if(a <= b)
            return b;
    else
            return a;
}
Run Code Online (Sandbox Code Playgroud)

但另一方面,令人惊讶的是,我无法证明以下等效程序的正确性

/*@ ensures ((\result == a) || (\result == b));                                                                        
  @ ensures ((\result >= a) && (\result >= b));                                                                        
*/
public int max(int a, int b) {
    return (a <= b) ? b …
Run Code Online (Sandbox Code Playgroud)

key-formal-verification

5
推荐指数
1
解决办法
70
查看次数

Key验证工具的亮点在哪里?

有哪些代码示例展示了KeY的实力?

细节

有这么多形式方法工具可用,我想知道 KeY 在哪里比它的竞争对手更好,以及如何?一些可读的代码示例对于比较和理解会很有帮助。

更新

在 Key 网站上搜索,我找到了书中的代码示例——那里有合适的代码示例吗?

此外,我找到了一篇关于 KeY 在 Java 8 的 mergeCollapse in TimSort 中发现的错误的论文。TimSort 中展示了 KeY 实力的最小代码是什么?然而,我不明白为什么模型检查应该找不到错误——一个包含 64 个元素的位数组不应该太大而无法处理。其他演绎验证工具是否也能找到错误?

是否存在具有合适代码示例的既定验证竞赛?

verification formal-verification formal-methods key-formal-verification

4
推荐指数
1
解决办法
252
查看次数