Page 128 - 《软件学报》2025年第8期
P. 128

左正康 等: 动态顺序统计树类结构的函数式建模及其自动化验证                                                  3551



                                                    表 1 验证方法的对比

                             是否为            适用动态集合操作                适用顺序统计操作             适用搜索树操作
                   验证方法
                            自动化验证     最大值     最小值    前继   后继    树的大小      选择    求秩     查找    插入     删除
                  交互式  [9−16]  ○        ●      ●      ●    ●       ●       ●      ●     ●      ●     ●
                   文献[5]       ●        ○      ○      ○    ○       ○       ○      ○     ●      ●     ●
                    本文         ●        ●      ●      ●    ●       ●       ●      ●     ●      ●     ●



                   select 函数的正确性验证                      select 函数的正确性验证
                   需 前                                  不需要额外构造前置引理
                   额 置
                   外 引
                   构 理
                   造
                   rank 函数的正确性验证
                                                        rank 函数的正确性验证
                   需 前                                  不需要额外构造前置引理
                   额 置
                   外 引
                   构 理
                   造

                             (a) 交互式验证方法                               (b) 本文自动化验证框架
                                    图 22 交互式验证方法与本文自动化验证框架的验证过程对比

                    表  2  给出了两种方法的前置引理数和验证代码行数的对比. 具体而言, 对于函数                      select 和函数  rank 的正确性
                 验证, 交互式验证方法分别需要构造           10  条、15  条前置引理, 对应    58  行、81  行验证代码. 而使用本文的自动化验
                 证框架, 无需构造前置引理, 验证代码行数均精简至               4  行.

                                             表 2 前置引理数和验证代码行数的对比

                                        验证方法                   交互式验证方法         本文自动化验证框架
                                                前置引理条数              10                0
                           select函数的正确性验证
                                                验证代码行数              58                4
                                                前置引理条数              15                0
                            rank函数的正确性验证
                                                验证代码行数              81                4

                                                    dost rbt  中实现, 交互式验证方法需重新构造前置引理, 且由于红黑树
                    当应用场景发生改变时, 如改为在红黑树
                 dost rbt  结构的复杂程度远大于不平衡的二叉搜索树          dost bst , 因此前置引理的构造将更为复杂且繁琐. 而本文所提的
                 自动化验证框架具备良好的通用性, 依旧可以处理. 如图                 23  所示, 对于红黑树   dost rbt  中  select 和  rank 函数的验证,
                 本文的自动化验证框架同样不需要构造前置引理, 得到自动验证, 代码行数也仅为                         4  行.


                   select 函数的正确性验证  0 条前置引理, 4 行验证代码          select 函数的正确性验证  0 条前置引理, 4 行验证代码



                   rank 函数的正确性验证  0 条前置引理, 4 行验证代码            rank 函数的正确性验证  0 条前置引理, 4 行验证代码



                             (a) 不平衡的二叉搜索树 dost bst                           (b) 红黑树 dost rbt
                                                图 23 自动化验证框架的通用性
   123   124   125   126   127   128   129   130   131   132   133