我正在与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;
}
但是另一方面,令人惊讶的是,我无法证明以下等效程序的正确性
/*@ ensures ((\result == a) || (\result == b));
@ ensures ((\result >= a) && (\result >= b));
*/
public int max(int a, int b) {
return (a <= b) ? b : a;
}
有人知道我是否想念东西吗?
答案 0 :(得分:2)
感谢签出KeY。
所陈述的示例立即在我的PC上使用KeY 2.6.3进行自动验证。 KeY具有验证引擎所依赖的许多设置。也许其中一些设置会使KeY失败。
您应从“证明搜索策略”面板中按“选择预定义”按钮,然后 再试一次。这样就可以了。
您还可以考虑删除家中的目录“ .key” 目录以完全重置KeY的设置。也许一些设置 阻止工具成功。
希望这会有所帮助!