递归While程序的摘要分析
1. 递归程序的抽象表示
在处理递归的While程序时,我们需要一套抽象的表示方法。假设存在一个任意但固定的程序P,它具有以下结构:
- 模块结构 :程序P由一组模块 ${M_0, \cdots, M_m}$ 组成。每个模块 $M_j$ 有其对应的位置集合 $Loc_j$,并且有两个特殊位置:入口位置 $entry_j$ 和出口位置 $exit_j$。
- 命令和调用 :
- 模块中的每个命令是一个三元组 $(\ell_1, c, \ell_2)$,其中 $\ell_1$ 和 $\ell_2$ 是模块的位置(执行前后的位置),$c$ 是转换约束,它是关于带撇和不带撇程序变量的公式。
- 每个模块调用是一个三元组 $(\ell_1, k, \ell_2)$,其中 $\ell_1$ 是调用位置,$\ell_2$ 是返回位置,$k$ 是被调用模块的索引($k \in {0, \cdots, m}$)。
- 变量和状态 :
- 程序变量集合为 $Var$,通常在无界数据域上取值,$Var’$ 包含程序变量的带撇版本。
- 辅助变量程序计数器 $pc$,其取值范围是所有模块位置的有限集合 $Loc$($Loc = Loc_0 \cup \cdots \cup Loc_m$)。
- 程序估值(状态)$s$ 是对程序变量和程序计数器的赋值,即 $s$ 是从 $Var \cup {pc}$ 到数据域并集的映射,所有程序估值的集合记为 $\Sigma$。
- 配置 :配
递归While程序的摘要分析与验证
超级会员免费看
订阅专栏 解锁全文

28

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



