Enums Z3中枚举类型的量词消除

Enums Z3中枚举类型的量词消除,enums,z3,quantifiers,Enums,Z3,Quantifiers,我正在为枚举类型的公式试验量词消除策略。 我想知道是否有任何方法可以通过调整解算器来提高性能。 在简要浏览了源代码之后,我得出结论,似乎有不同的量词消除策略(例如qe_lite.cpp),但它们并没有作为qe策略的参数公开。 在我的例子中,公式有一个简单的命题结构,有时量化变量甚至不出现在公式中,但这个过程可以调用数千次。所以我想,我的问题如下: Z3是否有某种缓存来消除量词(应用程序模式?),这样可以更快地处理一组相似或相同的公式 我可以指导Z3使用不同的方法消除有限域公式中的量词吗,这样我就

我正在为枚举类型的公式试验量词消除策略。 我想知道是否有任何方法可以通过调整解算器来提高性能。 在简要浏览了源代码之后,我得出结论,似乎有不同的量词消除策略(例如qe_lite.cpp),但它们并没有作为qe策略的参数公开。 在我的例子中,公式有一个简单的命题结构,有时量化变量甚至不出现在公式中,但这个过程可以调用数千次。所以我想,我的问题如下:

  • Z3是否有某种缓存来消除量词(应用程序模式?),这样可以更快地处理一组相似或相同的公式
  • 我可以指导Z3使用不同的方法消除有限域公式中的量词吗,这样我就可以知道哪种方法更适合我了
  • 了解Z3中通常使用哪种方法来消除有限域类型上公式的量词是很有意思的。它是通过替换+简化来实现的,还是使用了一些更复杂的技术
  • 多谢各位

  • “qe lite”是与“qe”不同的策略
  • 没有公式的相似性检测。相同的公式使用散列(唯一表示),量词消去遍历一次
  • 您可以尝试“qe”或“qe lite”。“qe lite”真的很轻。它主要消除了平等。它的意思是作为一个粗糙(更快,不完整)的例行程序,在适当的时候消除量化变量
  • 有限域的功能非常简单:Z3执行位向量和布尔运算,本质上是一个ALL-SAT来查找可以使用的值。对于作为代数数据类型给出的枚举类型,Z3只进行一个案例拆分(然后进行可满足性检查以进行删减)。 来自有限域的值
  • “qe lite”是与“qe”不同的策略
  • 没有公式的相似性检测。相同的公式使用散列(唯一表示),量词消去遍历一次
  • 您可以尝试“qe”或“qe lite”。“qe lite”真的很轻。它主要消除了平等。它的意思是作为一个粗糙(更快,不完整)的例行程序,在适当的时候消除量化变量
  • 有限域的功能非常简单:Z3执行位向量和布尔运算,本质上是一个ALL-SAT来查找可以使用的值。对于作为代数数据类型给出的枚举类型,Z3只进行一个案例拆分(然后进行可满足性检查以进行删减)。 来自有限域的值

  • 谢谢你的回复。在使用相同的上下文(通过C++ API)时,默认情况下是否启用哈希?如果没有,我应该如何启用它?另外,回复的最后一句似乎还没有完成,是不是太多了,还是你想补充点什么?谢谢你的回复。在使用相同的上下文(通过C++ API)时,默认情况下是否启用哈希?如果没有,我应该如何启用它?另外,回复的最后一句似乎还没有完成,这是过度的还是你想添加其他内容?