首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Why3无法通过cygwin在windows上运行验证程序。

Why3无法通过cygwin在windows上运行验证程序。
EN

Stack Overflow用户
提问于 2015-04-15 22:07:01
回答 1查看 492关注 0票数 2

在Windows环境下,我试图通过cvc4通过Why3使用Frama-c wp插件的Why3验证器。我的系统上安装了frama-cwhy3。Why3被正确地配置为包括cvc4作为验证程序:

代码语言:javascript
复制
$ why3 --list-provers
Known provers:
Alt-Ergo (0.95.2)
CVC4 (1.4)

我使用frama-c Wp插件生成与我的why3文件(C源文件具有ACSL规范)对应的.why格式(.why)文件,并使用以下命令:

代码语言:javascript
复制
frama-c -wp -wp-print -wp-proof-trace -wp-out C:/Users/user/temp -wp-prover cvc4 swap.c

上面的命令在swap_Why3_ide.why目录中生成一个文件C:/Users/user/temp/typed

当我试图用以swap_Why3_ide.why为证明器的why3来证明生成的cvc4文件中的理论时,它失败了,但有以下错误:

代码语言:javascript
复制
$ why3 prove -P cvc4 -L C:/cygwin/usr/local/share/frama-c/wp/why3 temp/typed/swap_Why3_ide.why

temp/typed/swap_Why3_ide.why VCswap_post WP : HighFailure (0.02s)
Prover exit status: exited with status 1

Prover output:
/usr/local/lib/why3/why3-cpulimit: Error: failed when launching <"/cygdrive/c/cvc4-1.4-win32-opt.exe" "--lang=smt2" "/tmp/why_29ba75_swap_Why3_ide-T-WP.smt2">
Fatal: CreateProcess failed with error 0: The operation completed successfully.

我在linux环境中执行了相同的步骤,why3能够执行prover:

代码语言:javascript
复制
why3 prove -P cvc4 -L /usr/local/share/frama-c/wp/why3/ temp/typed/swap_Why3_ide.why
temp/typed/swap_Why3_ide.why VCswap_post WP : Valid (0.05s) 

有人能建议如何在windows上执行Why3吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-19 21:13:23

似乎没有人在Windows上使用why3。但是无论如何,对于将来尝试在windows上使用Why3的人来说,下面是我在.why文件中运行一个理论证明的步骤:

1)在Windows上,即使安装了验证程序,执行why3 config --detect也不会添加验证程序。因此,在执行why3 config --detect --add-prover cvc4 path_to_executable_in_Windows_format时,确保可执行文件的路径为windows格式(例如C:\provers\cvc4-1.4Win32-opt.exe)

如果路径不采用windows格式,则引发下列错误:

代码语言:javascript
复制
/usr/local/lib/why3/why3-cpulimit: Error: failed when launching <"/cygdrive/c/cvc4-1.4-win32-opt.exe" "--lang=smt2" "/tmp/why_29ba75_swap_Why3_ide-T-WP.smt2">
Fatal: CreateProcess failed with error 0: The operation completed successfully.

2)正确设置验证程序的路径后,尝试按以下方式执行why3:

代码语言:javascript
复制
why3 prove -P cvc4 -L C:/cygwin/usr/local/share/frama-c/wp/why3 C:/temp/typed/swap_Why3_ide.why

这将引发以下错误:

代码语言:javascript
复制
C:/temp/typed/swap_Why3_ide.why VCswap_post WP : HighFailure (0.03s)
Prover exit status: exited with status 1
Prover output:
(error "Couldn't open file: /tmp/why_727ef8_swap_Why3_ide-T-WP.smt2")
why3cpulimit cpu time: 0.015625s wall time: 0.015625s

发生此错误是因为why3在cygwin目录(/tmp)中生成*.smt2文件,并且当在这些文件上调用验证程序时,未提供这些文件的完整路径,并且验证程序抱怨它是Couldn't open file /tmp/XX.smt2的。

要解决这个问题,我必须执行update命令才能在.why3.conf中运行prover,如下所示:

代码语言:javascript
复制
[prover]
command = "%l/why3-cpulimit %t %m -s C:/provers/cvc4-1.4-win32-opt.exe --lang=smt2 C:/cygwin%f
driver = "/usr/local/share/why3/drivers/cvc4.drv"
editor = ""
in_place = false
interactive = false
name = "CVC4"
shortcut = "cvc4"
version = "1.4"

请注意,我将文件格式从%f更改为C:/cygwin%f,这是指向/tmp目录的windows路径。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29661773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档