禁用在线性算术证明中引入Skolem函数

时间:2014-09-29 12:09:42

标签: z3

给出以下SMT2脚本:

(set-option :produce-proofs true)
(set-logic AUFLIRA)
(declare-sort Complex$ 0)
(declare-fun r$ () Real)
(declare-fun s$ () Complex$)
(declare-fun re$ (Complex$) Real)
(declare-fun norm$ (Complex$) Real)
(assert (! (not (=> (and (forall ((?v0 Complex$)) (<= (ite (< (re$ ?v0) 0.0) (- (re$ ?v0)) (re$ ?v0)) (norm$ ?v0))) (<= (norm$ s$) r$)) (<= (ite (< (re$ s$) 0.0) (- (re$ s$)) (re$ s$)) (+ r$ 1.0)))) :named a0))
(check-sat)
(get-proof)

Z3(不稳定版本)生成包含Skolem函数“norm $ 0”的证明。此功能在重写步骤中引入:

(ALL v0. (if 0 <= Re v0 then Re v0 else - 1 * Re v0) <= cmod v0) =
((ALL v0. cmod v0 = (if 0 <= Re v0 then Re v0 else - 1 * Re v0) + norm_0 v0) & (ALL v0. 0 <= norm_0 v0))

命令行开关可以抑制此行为吗?也就是说,是否有一个选项,以便Z3产生没有这种Skolem功能的证明?原则上,这应该是可能的,因为Z3版本3.2发现了一个不需要Skolem函数的证明。

1 个答案:

答案 0 :(得分:0)

skolem常量由MBQI(基于模型的量词实例化)模块引入。这可能是&#34;新部分&#34;这会让你看到不同的行为。 MBQI比基于模式的量词实例化更强大。 但是,对于您的示例,基于模式的量词实例化策略有效。所以你可以试试这个。

换句话说,按如下方式运行Z3以抑制MBQI:

z3 skolem-example.smt2 smt.mbqi = false auto-config = false