Z3命令行超时

时间:2014-08-22 17:49:48

标签: z3

在命令行上使用带有“-T”开关的Z3时,有没有办法将超时设置为小于一秒?

我知道您可以将超时设置为小于使用API​​的超时,但由于各种愚蠢的原因,我一直将包含SMT-LIBv2脚本的文本文件传递给Z3循环(请不要生气),认为它也会起作用。我只是注意到这种方法似乎在超时时创建了一秒的下限。如果我使用Z3来检查数以千计的短文件,这会使事情变慢。

我理解这是否只是事物的方式,并且我接受当我已经有一个非常好的Z3 API时,我正在做的事情是不明智的。

1 个答案:

答案 0 :(得分:2)

有两种选择:

  1. 您可以使用“软超时”。它们不如timeout / T可靠,因为仅定期检查软超时到期。然而,选项“smt.soft_timeout = 10”将设置超时10ms(而不是10s)。您可以使用(set-option:smt.soft_timeout 10)从命令行和SMT-LIB2文件中设置这些选项。使用策略/解算器的教程进一步说明了如何使用更高级的功能(策略),您还可以使用文本界面中的选项(如超时)来控制这些高级功能。

  2. 您可以从编程API加载SMT-LIB2文件。文件中的断言存储在一个连词中。然后,您可以调用求解器(再次从API)并使用解算器对象的“软超时​​”选项。没有理由使用选项2,除非您需要加速管道或使用超过软超时功能的东西,因为它已经合理地暴露于SMT-LIB级别。