我正在使用TRACE=true
和PROOF=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)。