KeY努力处理三元运算符

时间:2018-12-04 02:48:48

标签: key-formal-verification

我正在与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;
}

有人知道我是否想念东西吗?

1 个答案:

答案 0 :(得分:2)

感谢签出KeY。

所陈述的示例立即在我的PC上使用KeY 2.6.3进行自动验证。 KeY具有验证引擎所依赖的许多设置。也许其中一些设置会使KeY失败。

您应从“证明搜索策略”面板中按“选择预定义”按钮,然后 再试一次。这样就可以了。

您还可以考虑删除家中的目录“ .key” 目录以完全重置KeY的设置。也许一些设置 阻止工具成功。

希望这会有所帮助!