Frama-c 无法从 Allan Blanchard 的教程中证明 verify.c

问题描述

我正在尝试从 Allan Blanchard 的 tutorial 中学习 frama-c,但在按照教程中的建议验证安装时遇到了问题。作者提供了一个带有 Acsl 注释的 C file,所有这些都应该 frama-c 能够证明。但是,当我运行命令 (JavascriptExecutor js = (JavascriptExecutor) driver; scroll = driver.findElement(By.className("isgrP")) js.executeScript("arguments[0].scrolBy(0,arguments[0].scrollHeight)",scroll); ) 时,我得到以下信息:

Frama-C GUI screenshot

我通过 opam(2.0.4 版)在 ocaml-base-compiler.4.11.1 交换机上安装了 frama-c(22.0 版)。当我安装它时,我遇到了Why3 无法检测到 Alt-Ergo 的问题,我最终手动编辑了 ~/why3.config。我在这里提到它,尽管我不确定它是否与上述问题有关。

解决方法

从我根据截图判断,这似乎确实有很大关系。值得注意的是,每当您在证明者后面看到 Failed 时,这表明出现问题:证明者根本无法证明某事,宁愿将其表示为 Unknown

在您的情况下,我倾向于认为问题来自于您使用的版本 Alt-Ergo 2.4.0 相当新(实际上比最新的 Why3 版本更新),并且Why3 尚不支持。如 Frama-C 的 reference configuration 中所述,已知完全支持 Alt-Ergo 2.2.0,因此您可能希望 opam pin add alt-ergo 2.2.0 使用该版本。之后,不要忘记让Why3重新检测证明者why3 config --detect-provers。如果此步骤有问题,请随时针对此特定主题提出新问题(尽管我怀疑该问题与 Alt-Ergo 2.4.0 相关)。