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

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



                 //实例化为不平衡的二叉搜索树dost bst 的插入函数
                                ′
                                             ′
                                    ′
                 fun dost bst _insert :: “ a ⇒ a dost bst ⇒ a dost bst ” where
                   “dost bst _insert x <>= szNode Leaf x Leaf”|
                   “dost bst _insert x < _,l,a,r >= (case cmp x a o f
                         LT ⇒ szNode (dost bst _insert x l) a r|
                         GT ⇒ szNode l a (dost bst _insert x r)|
                         EQ ⇒ szNode l a r)”

                    (2) 自动化验证
                    对于其结构正确性的验证, 则需借助第             3.3.2  节的拆分方案. 树  dost bst  的不变式  invar bst  满足  inv ST  和  inv size , 不
                 具有附加性质     inv prop . 因此, 先分别基于  inv ST  和   inv size  进行验证, 再验证函数  dost bst _insert  的结构正确性. 对于拆分
                 后得到的细化引理, 本文的自动化验证框架可以适用, 提升整体的自动化验证水平, 如图                          19  所示.

                 inv size  对应的细化引理
                           归纳法
                         auto 方法
                                            list_ins 验证引理集      函数定义

                  inv ST  对应的细化引理
                           归纳法                              list_ins 验证引理集
                         auto 方法                                           函数定义
                          try 命令
                         直接得出

                 插入函数 dost bst _insert
                  的结构正确性定理


                                         函数定义        inv ST  细化引理   inv size  细化引理

                                          图 19 函数  dost bst _insert 的结构正确性验证过程

                 4.2   实例化为平衡的二叉搜索树
                    红黑树是最为常用的平衡二叉搜索树, 广泛应用于操作系统内核、数据库索引和任务调度等领域. 例如, 在
                 Linux  内核中, 可使用动态顺序统计红黑树来管理进程调度、内存区域和虚拟内存页表等数据结构, 优化数据的
                 存储和检索效率. 红黑树最早由          Bayer [21] 提出, Guibas 等人  [22] 引入了红/黑的颜色约定. 红黑树具有附加的颜色性
                 质, 在调整操作中, 需要对颜色性质进行调整. 基于第               2.1  节中动态顺序统计树类结构的函数式定义, 将            dost syn  实
                 例化为  dost rbt , 并将  extra_prop  实例化为附加的红/黑颜色信息  tcolor, 其结构可定义为:

                                            type_synonym a dost rbt = “( a×tcolor) dost”.
                                                                ′
                                                       ′
                    红黑树具有以下性质:
                    (1) 每个节点是红色或黑色, 故引入附加信息            tcolor 来表示;
                    (2) 根节点是黑色, 即    dost rbt _color t = Black;
                    (3) 所有的叶子节点     (<>) 都是黑色, 即  dost rbt _color Leaf = Black, 这是默认的;
                    (4) 每个红色节点的两个子节点都是黑色, 即从每个叶子节点到根节点的所有路径中, 不能出现两个连续的红
                 色节点, 用  inv color  来表示这一性质;
   119   120   121   122   123   124   125   126   127   128   129