构建数据结构的演算体系
1. 引言
软件验证的核心问题之一是证明描述软件正确性属性的逻辑公式的有效性。在解决这一问题时,一些系统(如 [dMB08])采用了针对软件中常见数据类型(如数字、集合、数组、代数数据类型)的决策程序,这些程序通过深入理解数据类型的结构,减少了不必要的搜索过程。其中,Presburger 算术(PA)的无量词片段就是一个典型的决策程序示例。
对于现代软件验证而言,数据结构的重要性不亚于数值约束。集合是表现良好的数据结构之一,集合的布尔代数 [Sko19] 是基本的可判定示例,此外还包括代数数据类型 [Opp78, BST07] 和数组 [SBDL01, BM07, dMB09]。关于命令式数据结构的推理可以通过图上解释的公式来描述,一阶逻辑的可判定片段为这种推理提供了良好的起点 [BGG97]。
本文将介绍一些用于数据结构推理的最新决策程序,涵盖具有基数界限的集合和多重集、带有抽象函数的代数数据类型,以及树和图上的表达逻辑组合。这些结果展示了不同数据结构逻辑与数值约束之间丰富的联系,图 1 展示了其中一些联系,这些组合超越了 Nelson - Oppen [NO79] 的不相交组合框架。
当考虑两个逻辑 A 和 B 时,我们通常会构建一个组合逻辑 c(A, B),它包含 A 和 B,并具有额外的运算符,使组合逻辑更实用(例如从 A 到 B 的抽象函数,或数据结构的数值度量)。在这种情况下,将组合逻辑 c(A, B) 简化为其中一个逻辑(如 B)是一种有效的方法。在特定条件下,如果考虑另一个组合 c′(A′, B),我们可以得到三个逻辑组合 c′′(A, A′, B) 的可判定性。当 B 是命题逻辑时,这种思想已被用于组合仅共享相等性的逻
超级会员免费看
订阅专栏 解锁全文
803

被折叠的 条评论
为什么被折叠?



