缩小Z3中量词的范围
有一种缩小Z3中量词的范围,z3,Z3,有一种distribute for all策略可用于在连词上分布通用量词。我对通用量词和存在量词的更一般的程序感兴趣,这将尽可能缩小量词的范围。 例如,我想要公式 (exists((x Int))(and(=z(*2 x))(Z3代码库中的分支mcsat有一个新策略称为miniscope。它做你想要的。我们可以使用mcsat来构建mcsat分支。我们只需用mcsat替换不稳定的 下面是一些使用这种策略的示例 (declare-const z Int) (declare-const x Int)
distribute for all
策略可用于在连词上分布通用量词。我对通用量词和存在量词的更一般的程序感兴趣,这将尽可能缩小量词的范围。
例如,我想要公式
(exists((x Int))(and(=z(*2 x))(Z3代码库中的分支mcsat
有一个新策略称为miniscope
。它做你想要的。我们可以使用mcsat
来构建mcsat
分支。我们只需用mcsat
替换不稳定的
下面是一些使用这种策略的示例
(declare-const z Int)
(declare-const x Int)
(declare-const y Int)
(assert (exists ((x Int)) (and (= z (* 2 x)) (<= z y))))
(apply miniscope)
以及生产量
(goals
(goal
(<= z y)
(exists ((x!1 Int)) (= z (* 2 x!1)))
:precision precise :depth 3)
)
(goals
(goal
(forall ((x2 Real))
(or (q2 x2 x2)
(and (forall ((x1 Int)) (q1 x1 x2))
(exists ((y Real)) (q1 (to_int y) x2)))))
:precision precise :depth 3)
)
编辑
mcsat
分支包含正在进行的工作,这些工作最终将合并到master
分支中。但是,合并可能不会在下一个正式版本(v4.3.2)中发生。当我们发布新版本时,我们将不稳定的和contrib
分支合并到master
分支中
mcsat
分支实质上是在添加新功能。它与不稳定
和contrib
分支不兼容
我们鼓励高级用户(熟悉git)使用非官方版本和替代分支。当然,在报告bug/问题时,应该使用与提交相关的git哈希,而不是版本号
结束编辑谢谢。“迷你镜”策略是专门针对分支机构的吗?我的意思是,你认为可以“整合”吗它使用了主分支的源代码,但付出的努力相对较少?我只是不知道mcsat分支与主分支有什么不同,所以我不知道切换到该分支也会产生什么影响。您是否计划最终在主分支中添加该策略?我用有关mcsat
分支机构。
(goals
(goal
(forall ((x2 Real))
(or (q2 x2 x2)
(and (forall ((x1 Int)) (q1 x1 x2))
(exists ((y Real)) (q1 (to_int y) x2)))))
:precision precise :depth 3)
)