我计划在 C 代码的符号执行方面进行一些实验,使用现成的 SMT 求解器,并想知道使用哪个求解器;例如,查看 SMT 竞赛的参赛者,仅采用开源系统,将其范围缩小到 Beaver、Boolector、CVC3、OpenSMT、Sateen、Sonolar、STP、Verit;这仍然是一个很长的清单。
试图进一步缩小范围,我注意到一些系统宣传处理位向量算术的能力,而其他系统只宣传处理一般整数算术的能力。原则上,前者对于 C 是正确的,其中变量是机器字,而不是无界整数。它在实践中有多大的不同?如果您尝试使用通用整数系统来完成此类工作,会发生什么情况?以下情况之一是否适用?
位向量系统的效率稍高一些,但您可以使用其中任何一个,没问题。
您可以使用稍作调整的通用整数系统。
一般整数系统适用于有符号整数(因为溢出的结果未定义),但会给出无符号的错误答案。
一般的整数系统对于机器字算术来说是不正确的,我可以将我的短名单减少到只有那些提供位向量算术的系统。
还有什么……?
我试图尽可能具体地提出一个问题,但如果有人可以提出任何其他标准来缩小列表范围,那就太好了!