QF_AUFBV实例有一个令人难以置信的困难假设

时间:2015-05-07 03:25:51

标签: z3 z3py

从Z3py转储的smt2代码为here。如果向下滚动到底部,您会看到有一个假设,如果注释掉,会立即解决问题。

我有几个问题:

  • 我选择了正确的理论QF_AUFBV吗?
  • 为什么假设使实例变得如此困难?
  • 有关如何进行调试的任何线索?

我已经解决了类似的情况并且它们非常快。

当我从Z3py用verbose = 10解决这个问题时,我在解决时会看到这样的输出:

(smt.restarting :propagations 35577 :decisions 13935 :conflicts 277 :restart 110 :restart-outer 110 :agility 0.0356467)
(smt.restarting :propagations 40109 :decisions 15040 :conflicts 388 :restart 100 :restart-outer 121 :agility 0.0452989)
(smt.restarting :propagations 43945 :decisions 15901 :conflicts 489 :restart 110 :restart-outer 121 :agility 0.0671191)

不确定这是否有帮助。感谢。

1 个答案:

答案 0 :(得分:2)

输入中的微小变化通常会对Z3运行时产生巨大影响,特别是如果它们是析取的(就像你的假设一样)。似乎在这个问题上,SMT核心求解器只是难以搜索解决方案,在尝试了数千个分支( m(5) / \ m(5-1) + m(5-3) / \ | m(4-1) + m(4-3) | / \ | | m(3-1) + m(3-3) | | | | | | 1 + 0 + 0 + 1 2 )后,它决定放弃并从头开始(:decisions 13935)。

理论选择很好。如果您不需要UF,可以将其设置为QF_ABV,但默认情况下Z3将使用相同的策略/参数。

我不确定我看到哪里有“调试”的错误,但我想“调试”你的意思是“让它变得更快”?