pull_nested_quantifiers选项是否适用于Z3中的简化?

时间:2012-03-06 16:22:01

标签: z3 quantifiers

我想将公式中的所有嵌套量词拉到最外层。我希望以下命令在Z3中工作,但它们不能:

(set-option :pull-nested-quantifiers true)
(simplify (exists ((x Int)) (and (>= x 0) 
                            (forall ((y Int)) (and (>= y 1) (> x y))))))

:pull-nested-quantifiers的目的是什么?如何使用SMT-LIB或Z3 API拉取嵌套量词?

1 个答案:

答案 0 :(得分:1)

在Z3 3.x中,simplify命令仅适用于通用本地简化步骤。 “拉嵌式量词”是一个预处理步骤。它将在未来版本中作为策略/策略提供。 Z3 3.2在SMT 2.0前端已经有许多内置策略/策略。下一个版本将有更多的策略。它们也将在API中提供。如果您需要为某个项目使用此功能,请发送电子邮件给我,我将为您制作非官方(测试版)版本。

最后,我们有这个预处理步骤,因为如果通用量词没有嵌套(通用)量词,基于模型的量词实例化MBQI模块的工作要好得多。你的例子没问题,因为Z3将消除存在性并用新常量替换x