Z3中枚举类型的量化消除

时间:2013-04-18 10:28:02

标签: enums z3 quantifiers

我正在尝试使用枚举类型公式的量词消除策略。 我想知道是否有任何方法可以通过某种方式调整求解器来提高性能。 在简要介绍一下源代码后,我得出结论,似乎有不同的量词消除策略(例如qe_lite.cpp),但它们并未作为qe策略的参数公开。 在我的情况下,公式具有简单的命题结构,有时量化变量甚至不会出现在公式中,但程序可以被称为数千次。所以我想,我的问题如下:

  1. Z3是否有某种缓存用于消除量词(应用模式?),这样可以更快地处理一堆相似或相同的公式?
  2. 我是否可以指导Z3在有限域公式上使用不同的方法来消除量词,所以我可以看到哪一种方法更适合我?
  3. 知道在Z3中通常使用哪种方法来消除有限域类型上的公式的量词会很有趣。它只是通过替换+简化来执行,还是使用了一些更精细的技术?
  4. 谢谢。

1 个答案:

答案 0 :(得分:1)

  1. “qe-lite”是与“qe”不同的策略。
  2. 没有公式的相似性检测。相同的公式是哈希模式(唯一表示),量词消除遍历此一次。
  3. 您可以尝试“qe”或“qe-lite”。 “qe-lite”非常轻巧。它主要消除了平等。它意味着在适当时消除量化变量的原始(更快,不完整)程序。
  4. 有限域的设施非常简单:Z3执行位向量,而布尔运算本质上是一个ALL-SAT,用于查找可以使用的值。对于作为代数数据类型给出的枚举类型,Z3只进行一个案例分割(然后进行修剪的可满足性检查)。 来自有限域的值