作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
上下文:我对使用z3的有限Java程序验证进行了研究。我想获得关于线性化问题的优化模型。一种标准方法是逐步搜索模型,直到找到不满意的情况为止。但是性能似乎是一个问题,并且通过引入JNI破坏了代码的可移植性,JNI将z3 c / c ++ api集成到我的工具中。
现在,我想在java方法的所有输入上添加约束。我使用数量数组(我使用数组理论对堆进行建模)。但是,z3总是在可满足的问题上立即返回“未知”。似乎无法生成模型。我注意到z3中有一个选项INST_GEN,然后我试图理解它。我将以下公式提供给z3。
(set-option :INST_GEN true)
(define-sort S () (_ BitVec 2))
(declare-fun s () S)
(assert (= s (_ bv0 2)))
(define-sort A () (Array S S))
(push) ;; 1st case
(assert (forall ((a A)) (= (select a s) s)))
(check-sat)
(get-model)
(pop)
(push) ;; 2nd case
(declare-fun a () A)
(assert (forall ((t S)) (= (select a t) t)))
(check-sat)
(get-model)
(pop)
(push) ;; 3rd case
(check-sat)
(get-model)
(pop)
sat
(model (define-fun s () (_ BitVec 2) #b00) )
最佳答案
首先,选项INST_GEN
是实验的一部分。它不应该暴露给外部用户。此选项未经过严格测试。它将在将来的版本中隐藏。对于那个很抱歉。
其次,一般而言,Z3将无法解决可量化的问题,这些问题可以对阵列进行量化。以下tutorial(“量词”部分)描述了Z3完整的许多片段。
最后,Z3具有许多不同的引擎/求解器。但是,其中只有一个支持增量求解。每当使用push
/ pop
命令时,Z3都会自动切换到此增量求解器。
如果我们删除push
和pop
命令,则Z3可以显示第二个问题是可以满足的。
这是修改后的示例的链接:http://rise4fun.com/Z3/apcQ。
关于optimization - z3中的INST_GEN是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11462788/
我是一名优秀的程序员,十分优秀!