一、SAT
1、SAT 问题
Boolean Satisfiability Problem 布尔可满足性问题,简称 SAT 问题,是确定给定命题的逻辑公式是否为 TRUE,并且进一步确定使得公式为 TRUE 的一组model。
2、SAT Solver
解决 SAT 问题的程序或工具就叫做 SAT Solver。
此处使用到的 Z3 Theorem Solver/Prover 就是一款 SAT Solver。
二、Z3的安装与使用
1、Z3在Windows平台上的安装
推荐使用Z3的Python绑定,因此在安装Z3之前需要保证自己电脑上已经安装了Python 3及以上的标准。
首先下载Z3的最新版本:https://github.com/Z3Prover/bin/tree/master/releases
此处也提供一个Z3的安装包:
下载之后,解压到自己合适的目录下,进行环境变量的配置。
右击“我的电脑”-高级系统设置-环境变量-系统变量栏
- 在Path变量后添加:z3的安装目录\bin,我的是 D:\Program Files\z3-4.8.7-x64-win\bin
- 新增变量PYTHONPATH,并将其值设置为:z3的安装目录\bin\python,我的是 D:\Program Files\z3-4.8.7-x64-win\bin\python
2、Warm-up Test
打开python的编辑框,输入如下的代码,看结果是否与预期相符。
(1)测试代码1
获取简单逻辑命题:P /\ Q 的可满足性的解决方案。
测试代码如下:z3_test.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Author : exiahan@exiahan.com
# @Time : 2020/03/26
# @File : z3_test.py
import z3
# Find Solution Set That Can Make Logical Expression P/\Q be True
P, Q = z3.Bools('P Q')
F = z3.And(P, Q)
solver = z3.Solver()
solver.add(F)
print(solver.check())
print(solver.model())
执行结果如下:
此时,表明z3安装成功。
(2)测试代码2
测试代码如下:
from z3 import *
x = Real('x')
y = Real('y')
s = Solver()
s.add(x + y > 5, x > 1, y > 1)
print(s.check())
print(s.model())
测试结果如下: