【发布时间】:2015-09-18 17:45:32
【问题描述】:
这感觉像是一个愚蠢的问题,但我很难过。我正在尝试使用 Frama-C Sodium 和 Why3 0.86.1(均通过 OPAM 安装)来证明一些简单的属性。考虑这个程序(toy.c):
int main(void) {
char *hello = "hello world!";
/*@ assert \valid_read(hello+(0..11)); */
return 0;
}
我想使用 Frama-C GUI 和 Why3 来证明这个断言。所以我运行frama-c-gui toy.c,选择“Why3 (ide)”作为证明者,然后在主函数上运行“Prove function annotations by WP”。 (或者:我导航到“WP 目标”选项卡并从那里运行 Why3 IDE。)出现 Why3,我调用我选择的证明者将所有内容变为绿色,保存会话并退出 Why3,然后在 Frama 中什么也没有发生-C GUI:该属性仍标记为橙色/“尝试验证但无法决定”。
我如何告诉 Frama-C 实际使用Why3 生成的证明? 证明本身肯定存在:如果我再次打开 Why3,一切仍然是绿色,因此会话已正确保存.此外,Frama-C 知道发生了一些事情:当 Why3 IDE 打开时,WP 目标选项卡中会出现一个小齿轮符号,当我关闭 Why3 时它会消失。
(我意识到 Alt-Ergo 可以在不涉及 Why3 的情况下证明这个特殊属性,但我确实需要 Why3 来解决更难的问题。)
【问题讨论】: