Z3求解器学习(一)

引言


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

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

(declare-const a Int)
(assert (> a 10))
(check-sat)
(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:一个约束不满足的例子

(declare-const a Int)
(assert (> a 10))
(assert (< a 10))
(check-sat)

运行结果为:

unsat

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

(declare-const a Int)
(assert (> (* a a) 3))
(declare-const b Real)
(declare-const c Real)
(assert (= (+ (* b b b) (* b c)) (* a 1000000)))  
(check-sat)

 

unknow

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

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值