摘要:带有递归数据结构, 如列表(list) 和二叉树(tree) 等数据类型的程序, 在计算机领域被广泛使用. 程序验证问题通常将程序转换为可满足性模理论(satisfiability modulo theories, SMT)公式进行求解. 递归数据结构通常会转换为代数数据类型(algebraic data type, ADT)和整数等混合理论的一阶逻辑公式. 另外, 为表示递归数据结构的性质, 程序中通常需要包含递归函数, 递归函数在SMT中则需要通过包含量词和未解释函数的断言来表示. 关注带有ADT和递归函数这两类递归定义SMT公式的求解方法. 从SMT求解器、自动定理证明器和约束霍恩子句(constrained Horn clause, CHC)求解器这3方面对现有技术进行梳理和介绍. 同时, 对主流的求解工具进行统一实验对比, 探究现有求解工具和技术在各类问题上的优势和缺陷, 尝试寻找潜在的优化方向, 为研究者提供有价值的分析和参考.