带SMTlib2输入的z3

带SMTlib2输入的z3,z3,Z3,我刚刚将z3从4.1升级到4.3.1,似乎smtlib2的输入发生了变化: 现在,pop语句不会删除函数/常量声明 以下是SMTlib2输入,它可以与z3 4.1(和其他SMT解算器…)一起正常工作,但返回时与z3 4.3.1一起出现错误:(错误“第19行第25列:无效声明,常量“bs_2”(具有给定签名)已声明) 删除最后一个bs_2声明对Z34.3.1很有效,但对Z34.1无效。 我是否使用了push/pop错误?在Z3 4.3.1中,我们试图放宽一些SMT-LIB 2.0限制,以使Z3更易

我刚刚将z3从4.1升级到4.3.1,似乎smtlib2的输入发生了变化: 现在,pop语句不会删除函数/常量声明

以下是SMTlib2输入,它可以与z3 4.1(和其他SMT解算器…)一起正常工作,但返回时与z3 4.3.1一起出现错误:(错误“第19行第25列:无效声明,常量“bs_2”(具有给定签名)已声明)

删除最后一个bs_2声明对Z34.3.1很有效,但对Z34.1无效。
我是否使用了push/pop错误?

在Z3 4.3.1中,我们试图放宽一些SMT-LIB 2.0限制,以使Z3更易于使用。例如,我们现在可以编写
(+x2)
,而不是
(+x2.0)
,当
x
Real
时。声明是全局的,而不是像Z34.1中那样定义范围。其动机是允许用户更简洁地编码问题。我们可以使用以下选项来启用Z34.1中的作用域声明

(set-option :global-decls false)
也就是说,我理解对于习惯于其他SMT解算器的用户,或者阅读描述SMT-LIB标准的手册的用户来说,这种更改非常混乱,而且违反直觉。因此,我们将把默认设置改回
(设置选项:global decls false)

(set-option :global-decls false)