z3 PROOF = true选项命名空间&量化变量

时间:2018-01-31 13:24:33

标签: z3

我正在使用TRACE=truePROOF=true选项生成日志。

如果没有PROOF=true选项,那么从未声明的标识符将用于量词触发器的模式术语中的量化变量。例如,对于量词∀x. {f(x)} f(x) = x,我会得到类似于的日志:

[mk-app] #3 f #2
[mk-app] #4 pattern #3
[mk-app] #5 = #3 #2
[mk-quant] #6 quantifier_name #4 #5

日志中[mk-app]没有#2行。了解日志的工作方式是否正确?

启用PROOF=true选项后,应表示量化变量的标识符用于证明步骤。对于与上面相同的量词,我可能得到如下日志:

[mk-app] #1 true
[mk-app] #2 asserted #1
[mk-app] #3 f #2
[mk-app] #4 pattern #3
[mk-app] #5 = #3 #2
[mk-quant] #6 quantifier_name #4 #5

我的第一个猜测是,证明步骤和常规术语的标识符应该位于不同的命名空间中,以便在上面的日志中的“术语命名空间”中仍然未定义#2

然而,这种解释确实没有解决我在启用PROOF=true选项时看到的另一种问题,其中我获得与以前相同的量词的类似于以下内容的日志:

[mk-app] #1 some_term
[mk-app] #2 iff #1 #1
[mk-app] #3 refl #2
[mk-app] #4 f #2
[mk-app] #5 pattern #4
[mk-app] #6 = #4 #2
[mk-quant] #7 quantifier_name #5 #6

即。量化变量是#2,这是一个常规术语。

如何确定哪个术语应该是此类日志中的量化变量?我上传了smt file以及我用z3版本4.6.1(64位)生成的相应log file。我描述的第一个问题发生在l上的量词。 50个日志文件,其中量化变量为#40(1.32),第二个问题发生在l上的量词。 63日志文件和量化变量#58(l.52)。

0 个答案:

没有答案