Page 31 - 《软件学报》2026年第2期
P. 31

510                                                        软件学报  2026  年第  37  卷第  2  期


                 行表示, 通常是如下方式        (涉及的例子和细节详见第         1.5  节): 在  SMTLIB  标准格式中, 使用  declare-fun  声明函数
                 名, 然后用带有全称量词和未解释函数             (uninterpreted function, UF) 的公理断言来表示函数体. 从   2016  年开始,
                 SMTLIB  支持通过 define-fun-rec 的关键字直接定义递归函数, 主流        SMT  求解器比如    Z3  和  cvc5  在识别到输入带
                 有  define-fun-rec 的函数定义时, 会采取一些特定求解策略. 验证目标被取反作为一条                assert 语句, SMT  求解器求
                 解返回不可满足, 则认为验证目标得证. 两种方式在语义上可以认为是等价的.
                    通用的一阶逻辑公式求解框架: 现有的一阶逻辑公式自动求解工具在求解带有背景理论的一阶逻辑公式时,
                 通常是将可满足性判定算法和特定背景理论的求解技术相结合, 主要的一阶逻辑公式可满足性判定框架如下.
                    1) 影响力最大, 使用最广泛的是        SMT  求解器, 一般基于     DPLL (Davis-Putnam-Logemann-Loveland) 判定算法,
                 用于求解带背景理论的主流算法是             DPLL(T) 算法. 该算法求解原理是先不考虑背景理论, 将             SMT  公式视作   SAT
                 公式进行求解, 可满足时需再结合背景理论求解器验证解的相容性.
                    除  SMT  求解器外, 自动定理证明工具和         CHC  求解器同样可以进行一阶逻辑公式的求解, 现在主流的定理证
                 明工具通常可以直接读入         SMTLIB  格式的  SMT  公式作为输入, 而    CHC  求解器则需要先将      SMT  公式转换成    CHC
                 形式再进行输入. 本文将不局限于           SMT  求解器, 还会介绍基于自动定理证明器和            CHC  求解器来处理带递归函数
                 SMT  问题的方法和工具.
                    2) 自动定理证明器一般基于         superposition  推理系统, 通过  saturation-based proof search  的证明框架来推导目
                 标公式的可满足性. 对带有背景理论的一阶逻辑公式进行推理, 一般是将背景理论公理作为推理规则加入推理系
                 统中. 用于推理带量词和背景理论的主流框架是               AVATAR  框架. 它结合了    SAT/SMT  求解器来提升在可满足性证
                 明框架中进行公式推理的能力.
                    3) CHC  求解器的求解原理可以视作求解          CHC  公式所表达的迁移系统是否满足安全性质. 通常使用基于软件
                 模型检测的方法, 结合谓词抽象、插值等技术来生成归纳不变式, 从而证明安全性质. CHC                           求解器中一般也会集
                 成通用   SMT  求解器, 并基于   SMT  求解器来提供对背景理论的支持, 不同的求解器则可能针对特定的背景理论问
                 题实现专门的优化算法.
                    对递归定义问题的求解方法: 对于递归定义的处理, 递归数据结构和递归函数分别涉及对                            ADT  理论和带有全
                 称量词的未解释函数理论的求解. 在本文中我们将从                 SMT  求解器、自动定理证明器和         CHC  求解器这   3  方面对这
                 些特定背景理论的主流求解算法进行介绍.
                    1) 递归数据结构求解: 程序中的递归数据结构在逻辑公式层次一般用                     ADT  理论公式进行表示.
                    SMT  求解器处理    ADT  理论公式的主流方法是基于          DPLL( T ) 算法. 该算法将  SAT  的  DPLL  算法与  ADT  背
                                                                 [2]
                 景理论的判定算法相结合. ADT         理论的判定算法最早由         Oppen 提出, 其主要原理是将       ADT  结构进行展开, 对展
                 开的项构造同余闭包和等价关系来完成可满足性的判定. Barrett 等人                 [3] 在这一判定算法基础上引入一些启发式策
                 略, 对计算效率进行了优化, 目前已经成为            SMT  求解器中实现     ADT  理论求解器的主流方法. Reynolds 等人      [4,5] 在
                 上述方法上进一步扩展, 提出         codatatype 和共享选择子  (shared selector) 理论, 提升  ADT  理论的表达能力和求解效
                 率. 上述基于   DPLL(T) 的判定算法被称为      lazy  方法, 作为主流  SMT  求解器如   Z3  和  cvc5  等用于进行  ADT  理论公
                 式的主要方法. 此外有研究考虑先将           ADT  结构消去再进行求解       eager 方法  [6,7] , 主要原理是将带有  ADT  的一阶逻
                 辑公式归约到等价的未解释函数和线性算术理论公式, 该方法实现在                      SMT  求解器  Princess 中  [6] .
                    自动定理证明器求解        ADT  理论公式, 将基于    ADT  的构造子、选择子、子项等结构定义理论公理, 基于理论
                                                                    [8]
                 公理扩展推理系统的推理规则. 近年来比较经典的工作是                   Cruanes  和  Kovács 等人  [9] 对  superposition 推理系统进
                 行扩展, 使其支持     ADT  理论和归纳推理的工作, 分别实现在自动定理证明工具                 Zipperposition [10]  和  Vampire [11] 中.
                    CHC  求解器求解    ADT  理论公式时, 需要将     CHC  求解框架和背景理论判定器结合, 其中背景理论判定器往往
                 依赖  CHC  求解器中集成的     SMT  求解器. 为了提高求解效率, 有些       CHC  求解器中实现了专门针对        ADT  理论问题的
                 优化算法. De Angelis 等人  [12,13] 提出一种转换算法, 可以将   CHC  公式中的   ADT  类型和对应的    CHC  公式转换成由
                 其他基础类型, 如整数和未解释谓词表示的公式, 并保持可满足性, 该方法实现在                       VeriMAP  求解系统中. Kostyukov
                 等人  [14] 通过将公式中的符号都转换为未解释函数, 然后将             CHC  求解中需要推理不变式的问题归约为在             tree auto-
   26   27   28   29   30   31   32   33   34   35   36