【发布时间】:2012-06-08 13:18:05
【问题描述】:
给定一个使用 Z3 的实数编码的问题,Z3 /smt2 /st 产生的哪些统计数据可能有助于判断实数引擎是否“有问题/做了很多工作”?
在我的例子中,我有两个基本等效的问题编码,都使用实数。然而,编码的“小”差异在运行时产生了很大的差异,即编码 A 需要 2:30 分钟,编码 B 需要 13 分钟。 Z3 统计显示conflicts 和quant-instantiations 大部分是等价的,但其他不是,例如grobner、pivots 和nonlinear-horner。
这两种不同的统计数据以gist 的形式提供。
编辑(针对 Leo 的评论):
两个版本生成的 SMT2 编码约为 30k 行,并且使用实数的断言遍布整个代码。主要区别在于编码 B 使用了从0.0 到1.0 范围内的大量未指定的实类型常量,这些常量受到不等式的限制,例如0.0 < r1 < 1.0 或 0.0 < r3 < 0.75 - r1 - r2,而在编码中,许多这些未指定的常量已被同一范围内的固定实数值替换,例如 0.1 或 0.75 - 0.01。两种编码都使用非线性实数算术,例如r1 * (1.0 - r2).
两种编码中的一些随机示例可用作gist。如上所述,所有出现的变量都是未指定的实数。
PS:是否为固定实数值引入别名,例如,
(define-sort $Perms () Real)
(declare-const $Perms.$Full $Perms)
(declare-const $Perms.$None $Perms)
(assert (= $Perms.Zero 0.0))
(assert (= $Perms.Write 1.0))
造成严重的性能损失?
【问题讨论】:
-
是否可以发布编码A和B?
标签: performance encoding statistics z3 real-datatype