Z3 2.x具有符号声明未被弹出的特征(好吧,可能更确切地说是错误),例如Z3 2.x接受以下代码:
(push)
(declare-fun x () Int)
; Assumptions made in this scope will be popped correctly
(pop)
(assert (= x x))
Z3 3.x不再接受此代码(“未知常量”)。
有没有办法恢复旧的行为?或者另一种方式如何在范围内声明符号,使声明(只有声明,而不是假设)是全局的,即不弹出?
答案 0 :(得分:0)
是的,在Z3 2.x中,所有声明都是全球性的。我们在Z3 3.x中更改了此行为,因为SMT-LIB 2.0标准规定所有声明都应该作用域。
您可以使用选项:global-decls
恢复旧行为。
(set-option :global-decls true)
(push)
(declare-fun x () Int)
(pop)
(assert (= x x))