简介
z3是巨硬开发的开源线性约束求解器
数据类型
- Int
- Real
- BitVec
- 文档
使用一般步骤
定义数据类型
1
2a = Int('a') # 定义一个数学上的整数整数
x = [BitVec('x%d'%i,32) for i in 6] # 定义6个32位整数型位向量,就是C/C++中的int添加约束
1
2
3
4s = Solver()
s.add(x[0]+x[1]<10)
s.add(x[0]==2)
s.add(x[0]+x[3]==5)求解
1
2
3
4
5res = []
if s.check()==sat: #如果约束满足
m = s.model() # 满足的模型
for i in m:
res.append(i.as_long()) # 转化为长整型上述情况只能找到一种满足情况的解,可能存在溢出
参考资料
[1] z3一把梭
[2] [vscode自动补全功能]
附件
全部代码(这个例子溢出,所以不相等)
1 | from z3 import * |