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

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



                   //函数dost23_size 中额外补充的  Node3  节点情况
                 dost 23 _size < n,_,_,_,_,_ >= n

                   //计算Node3节点对应树的大小值
                   definition “size3 l m r ≡ dost 23 _size l+dost 23 _size m+dost 23 _size r +2”
                 //函数inv size 中额外补充的Node3节点情况

                   inv size < n,l,_,m,_,r >= (inv size l∧inv size m∧inv size r ∧(size3 l m r = n))
                    2−3  树的所有叶子节点都在同一层, 即其同一层非叶子节点的高度是一致的. 函数                          dost 23 _height  可以计算
                 2−3  树的高度. 由此, 可定义    2−3  树的高度不变式    inv height  确保  2−3  树高度一致性. 基于第  2.3  节的不变式, 可定义
                 2−3  树的不变式   invar 23 , 其不仅要满足  inv ST  和  inv size , 还需满足高度不变式  inv height . 具体定义如下.
                 //2−3树dost 23 的高度 不变式对应的    Node3  节点情况

                           ′
                   fun inv height :: “ a dost 23 ⇒ bool” where
                   “inv height Node3_l_m_r = (inv height l & inv height m & inv height r &
                 dost 23 _height l = dost 23 _height m & dost 23 _height m = dost 23 _height r)”

                   //2−3树dost 23 的不变式
                   definition “invar 23 t ≡ inv ST t ∧ inv size t ∧ inv height t”
                    基于第   2  节的函数式建模框架和第        3  节的自动化验证框架, 可对       2−3  树的函数进行函数式建模并自动化验
                 证, 具体实现思路与第      4.1  节和第  4.2  节类似, 此处略.
                    本节旨在通过区域       (locale) 全面展示  2−3  树动态集合操作    (如前继和后继等), 顺序统计操作          (如选择和求秩
                 等) 和搜索树操作     (查找、插入和删除) 的正确性验证结果. 区域是一种程序模块化和参数化的复用机制, 能有效
                 表达函数式程序结构之间复杂的依赖关系               [17] . 通过区域声明, 前文定义了动态顺序统计树类结构通用的局部参数
                 (第  3.2  节图  4) 和逻辑规约  (第  3.3  节图  10). 其中, 局部参数对应要实现的  10  种函数操作, 逻辑规约对应待证明的
                 正确性定理    (包括功能正确性和结构正确性定理). 通过区域解释将局部参数实例化为                        2−3  树的相关函数操作, 然
                 后对其逻辑规约进行验证. 在验证了           10  种函数操作的正确性定理之后, 逻辑规约的验证可以通过                  try 命令直接得
                 出. 图  21  展示了  2−3  树  10  种函数操作的正确性验证结果, 进一步检验了本文第           2、3  节所提函数式建模和自动化
                 验证框架的有效性.



                    局部参数的实例化









                     逻辑规约的验证                                                             try 命令直接得出








                                          图 21 2−3  树  10  种函数操作的正确性验证结果
   121   122   123   124   125   126   127   128   129   130   131