约束求解器
程序输入生成问题可被转换为约束可满足性问题的求解过程。
约束可满足性问题可以定义为一个三元组 < V , D , C > <V,D,C> <V,D,C>,其中:
- V V V表示变量;
- D D D表示变量可取值的域;
- C C C表示变量之间的关系,即约束条件。
约束可满足性问题就是:判断在域 D D D中,是否存在一组变量 V V V能够满足约束条件 C C C。
SAT
布尔可满足问题(SAT)是约束可满足性问题的一种较为简单的情况。
SAT
中:
- 域 D D D为布尔值 0 , 1 {0,1} 0,1
- 约束 C C C为命题逻辑公式,即布尔表达式。
- 布尔表达式由变量、与操作、或操作、非操作组成,如:
( x 1 ∧ y 1 ) ∨ ( x 2 ∧ y 2 ) ∨ ( x 3 ∧ y 3 ) ∨ ( x 4 ∧ y 4 ) ∨ ( x 5 ∧ y 5 ) \left(x_{1} \wedge y_{1}\right) \vee\left(x_{2} \wedge y_{2}\right) \vee\left(x_{3} \wedge y_{3}\right) \vee\left(x_{4} \wedge y_{4}\right) \vee\left(x_{5} \wedge y_{5}\right) (x1∧y1)∨(x2∧y2)∨(x3∧y3)∨(x4∧y4)∨(x5∧y5)
当存在一组变量使得布尔表达式的值为True
时,称为布尔表达式被满足。
SAT
就是查找是否存在一组变量使得某个布尔表达式可满足。
SMT
在计算机程序中,路径约束条件所包含的变量不仅仅是变量,表达式也并不是布尔表达式。因此常常使用SAT的扩展问题一一可满足性模理论(SMT)
。
SMT在SAT的基础上发展而来,支持整形、实数、数据结构等多种“理论”。特别年研究人员组织的推动了求解器标准化,使得程序分析领域广泛运用求解器来进行约束求解。
经过发展,目前活跃并成熟的SMT求解器包括CVC4、STP、Z3、Yices等。这些约束求解器被程序分析工具广泛使用。