如何从命令行调用why3来访问带有替代品的证明者?

时间:2017-06-08 14:50:21

标签: why3

我的配置文件包含不同证明器的备用条目。当我执行why3证明该证明者时,那么why3的输出是一条消息,告知我的配置文件中有多个证明者,其中包含给定名称,这些证明者的列表。

/home/xyz> why3 prove --prover Z3 afile.why
More than one prover in /home/xyz/.why3.conf correspond to "Z3":
Z3 (4.4.1), Z3 (4.4.1 noBV)

如果有可能的话,我想知道如何在该证明的特定替代品上调用why3。

1 个答案:

答案 0 :(得分:0)

最后我偷看了Why3的源代码以获得答案。它可以在why3 / src / driver / whyconf.mli和why3 / src / driver / whyconf.ml中找到。

解决方案是在Why3的配置文件中使用证明者条目的版本和替代字段。例如,如果此文件包含Z3的以下两个条目:

[prover]
alternative = "noBV"
command = "%l/why3-cpulimit %t %m -s z3 -smt2 sat.random_seed=42 nlsat.randomize=false smt.random_seed=42 %f"
command_steps = "%l/why3-cpulimit %U %m -s z3 -smt2 sat.random_seed=42 nlsat.randomize=false smt.random_seed=42 memory_max_alloc_count=%S %f"
driver = "/home/ddeharbe/.opam/system/share/why3/drivers/z3_432.drv"
editor = ""
in_place = false
interactive = false
name = "Z3"
version = "4.4.1"

[prover]
command = "%l/why3-cpulimit %t %m -s z3 -smt2 sat.random_seed=42 nlsat.randomize=false smt.random_seed=42 %f"
command_steps = "%l/why3-cpulimit %U %m -s z3 -smt2 sat.random_seed=42 nlsat.randomize=false smt.random_seed=42 memory_max_alloc_count=%S %f"
driver = "/home/ddeharbe/.opam/system/share/why3/drivers/z3_440.drv"
editor = ""
in_place = false
interactive = false
name = "Z3"
shortcut = "z3"
version = "4.4.1"

条目之间的“替代”字段不同。因此,要调用第一个条目,命令为:

why3 prove afile.why --prover Z3,4.4.1, 

要调用第二个条目,命令为:

why3 prove afile.why --prover Z3,4.4.1,noBV