Z3命令行超时

Z3命令行超时,z3,Z3,在命令行上使用带“-T”开关的Z3时,是否有方法将超时设置为小于1秒 我知道您可以使用API将超时设置为小于此值,但出于各种愚蠢的原因,我一直在循环中将包含SMT-LIBv2脚本的文本文件传递给Z3(请不要生气),认为它也可以工作。我刚刚注意到,这种方法似乎在超时时创建了1秒的下限。如果我使用Z3检查数千个短文件,这会大大降低速度 如果事情就是这样,我能理解,而且我承认,当Z3已经有了一个非常好的API时,我所做的是不明智的。有两种选择: 您可以使用“软超时”。它们的可靠性不如timeout/T

在命令行上使用带“-T”开关的Z3时,是否有方法将超时设置为小于1秒

我知道您可以使用API将超时设置为小于此值,但出于各种愚蠢的原因,我一直在循环中将包含SMT-LIBv2脚本的文本文件传递给Z3(请不要生气),认为它也可以工作。我刚刚注意到,这种方法似乎在超时时创建了1秒的下限。如果我使用Z3检查数千个短文件,这会大大降低速度

如果事情就是这样,我能理解,而且我承认,当Z3已经有了一个非常好的API时,我所做的是不明智的。

有两种选择:

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

  • 您可以从编程API加载SMT-LIB2文件。来自文件的断言存储在一个连接中。然后可以调用解算器(再次从API调用),并对解算器对象使用“软超时”选项。没有理由使用选项2,除非您需要加快管道速度或使用比软超时功能更多的功能,因为它已经合理地公开用于SMT-LIB级别