Z3Py教程(翻译)

原文:https://ericpony.github.io/z3py-tutorial/guide-examples.htm

练习:http://3xp10it.cc/auxilary/2017/11/14/z3-solver%E5%AD%A6%E4%B9%A0/

注:该翻译用于自嗨


Python中使用Z3 API

z3是Microsoft Research开发的高性能的定理证明工具。z3常常被用在许多应用中,如:软件/硬件的验证和测试,约束求解问题,混合系统分析,安全领域,生物学和几何问题。

本教程演示z3py的主要功能,即在python中使用z3 api,请务必跟着一起动手实验。

 

开始

我们来看一个简单的例子:

x = Int('x')
y = Int('y')
solve(x > 2, y < 10, x + 2*y == 7)

Int('x')函数创建了一个z3的整形变量名为x,solve函数求解了一个约束系统,这个例子使用了两个变量x和y,以及3个约束条件。z3py和python一样使用"="来进行赋值,使用<, <=, >, >=, ==, !=来进行比较。在以上例子中,表达式"x + 2*y == 7"是一个z3约束条件。

默认的,z3py显示公式或表达式时使用数学的标记法,通常用∧来表示逻辑符号与,用∨来表示逻辑符号或,等等。命令set_option(html_mode=True/False)可以用来设置表达式的格式,True使用数学标记法,而False使用z3py的标记法,这也是离线版的z3py默认的模式

x = Int('x')
y = Int('y')
print x**2 + y**2 >= 1
set_option(html_mode=False)
print x**2 + y**2 >= 1

z3提供了一些函数来遍历表达式内容

x = Int('x')
y = Int('y')
n = x + y >= 3
print "num args: ", n.num_args()
print "children: ", n.children()
print "1st child:", n.arg(0)
print "2nd child:", n.arg(1)
print "operator: ", n.decl()
print "op name:  ", n.decl().name() #返回str

z3提供所有基本的数学运算符。z3py使用与python相同的运算优先级。和python一样,**代表幂运算。z3可以求解非线性的多项式条件约束。

x = Real('x')
y = Real('y')
solve(x**2 + y**2 > 3, x**3 + y < 5)

过程Real('x')创建了一个实数变量x。z3py可以表示任意大的整数,有理数和无理数。一个无理数是整数系数多项式的根。在内部,z3py精确的表示这些数,无理数以十进制小数的方式来表示,这方便读取结果。

 

x = Real('x')
y = Real('y')
solve(x**2 + y**2 == 
  • 18
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值