我想将公式中的所有嵌套量词拉到最外层。我希望以下命令在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拉取嵌套量词?
答案 0 :(得分:1)
在Z3 3.x中,simplify
命令仅适用于通用本地简化步骤。 “拉嵌式量词”是一个预处理步骤。它将在未来版本中作为策略/策略提供。 Z3 3.2在SMT 2.0前端已经有许多内置策略/策略。下一个版本将有更多的策略。它们也将在API中提供。如果您需要为某个项目使用此功能,请发送电子邮件给我,我将为您制作非官方(测试版)版本。
最后,我们有这个预处理步骤,因为如果通用量词没有嵌套(通用)量词,基于模型的量词实例化MBQI模块的工作要好得多。你的例子没问题,因为Z3将消除存在性并用新常量替换x
。