当前位置:   article > 正文

Z3求解器学习(一)_z3无法求解的约束

z3无法求解的约束

引言


安装成功后在命令行输入z3 -h可以查看帮助学习如何使用,下面用几个简单的例子熟悉Z3求解器的基本命令(这里我们例子都使用z3 -in的输入形式从标准输入读取表达式):

例子1:首先写一个简单的可满足条件的例子

  1. (declare-const a Int)
  2. (assert (> a 10))
  3. (check-sat)
  4. (get-model)

declare-const申明一个给定类型的常量(Int型的a);

assert将一个公式添加到Z3内部堆栈中(a > 10);

check-sat判断堆栈中的公式是否满足。若满足,为返回sat,并且可以通过get-model命令给出一个使得所有公式为真的解释模型;若不满足,则返回unsat。

运行结果为:

sat
(model
  (define-fun a () Int
    11)
)

表示找到一个满足公式的解释a为11。具体格式为:

(define-fun a () Int [val])

表示模型中的a值为[val]。

例子2:一个约束不满足的例子

  1. (declare-const a Int)
  2. (assert (> a 10))
  3. (assert (< a 10))
  4. (check-sat)

运行结果为:

unsat

例子3:一个约束无法求解的例子

  1. (declare-const a Int)
  2. (assert (> (* a a) 3))
  3. (declare-const b Real)
  4. (declare-const c Real)
  5. (assert (= (+ (* b b b) (* b c)) (* a 1000000)))
  6. (check-sat)

 

unknow

因为对于非线性的实数运算的代价是非常大的,返回的结果可能是unknow或者loop。(疑问这个在官方给出的在线运行中结果为unknow,但是在我装的z3中给出了sat的结果)。

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/929692
推荐阅读
相关标签
  

闽ICP备14008679号