Z3 定理证明器
Z3 是由微软研究中心开发的一个开源、高性能的定理证明器
在学术界和工业界,它更著名的身份是一个 SMT 求解器
SMT 求解器
要理解 Z3,得先理解什么是 SMT(Satisfiability Modulo Theories,可满足性模理论)
在计算机科学中,有一个著名的问题叫 SAT(布尔可满足性问题):给你一堆由 AND、OR、NOT 组成的布尔逻辑表达式,问你能不能找到一组真假值(True/False),让整个表达式的结果为 True?
SAT 只能处理布尔值(0 和 1)
如果我们要处理复杂的数学运算(比如 x + y > 10,或者数组、位运算),SAT 就傻眼了
于是有了 SMT。SMT 是 SAT 的升级版,它不仅懂布尔逻辑,还懂很多 “理论”:
线性算术:解
3x + 2y = 5位向量:解 C 语言里的低级位运算,如
(x << 3) ^ y数组与结构体:处理内存中的连续数据
而 Z3,就是目前世界上最顶尖、算得最快的 SMT 求解器之一
Z3 工作流程
你可以把 Z3 想象成一个只喝逻辑和数学公式的 “黑盒”。你把规则喂给它,它就会给你反馈
它的核心输出只有三种结果:
sat(Satisfiable):可满足。意味着方程有解!同时它会贴心地附带一个 Model(模型),里面写满了具体每一个未知数该等于多少unsat(Unsatisfiable):不可满足。意味着方程无unknown:算不出来。可能因为问题陷入了停机问题,或者复杂度超越了人类目前的算法极限
实战案例
为了明白它是怎么写代码的,我们不用复杂的逆向代码,就解一个初中方程组:
1 | x + y = 10 |
1 | from z3 import * |
