我刚刚将 z3 从 4.1 升级到 4.3.1,似乎 smtlib2 输入发生了变化:现在,pop 语句不会删除函数/常量声明。
这是与 z3 4.1(和其他 SMT 求解器...)一起正常工作的 SMTlib2 输入,但在 z3 4.3.1 中返回错误:(错误“第 19 行第 25 列:无效声明,常量 'bs_2'(其中给定签名)已经声明“)
(set-option :produce-models true)
(set-option :produce-unsat-cores true)
(set-option :interactive-mode true)
(set-option :print-success false)
(push 1)
(declare-fun bs_1 () Bool)
(push 1)
(declare-fun bs_2 () Bool)
(assert (and bs_1 (not bs_2)))
(check-sat)
(pop 1)
(push 1)
(declare-fun bs_2 () Bool)
(assert (and bs_1 (not bs_2)))
(check-sat)
(pop 1)
(pop 1)
(exit)
删除最后一个 bs_2 声明适用于 z3 4.3.1,但不适用于 z3 4.1。我使用推送/弹出错误吗?