Lec 4状态机、不变量与终止性
Lec 4 状态机、不变量与终止性
资料依据:课程视频与 transcript · Lecture notes
TL;DR
- 状态机由状态集、初始状态与转移关系组成,可达性问题询问是否存在一条从初始状态到目标状态的转移序列。
- 不变量在初始状态成立,且每次合法转移都保持它;因此任何不满足不变量的状态都不可达。
- 证明过程终止时,可构造一个值域下有界且每步严格下降的导出量(势函数),排除无限转移链。
一、引例:8 拼图问题
初始状态:
1 2 3
4 5 6
8 7 *
目标状态:
1 2 3
4 5 6
7 8 *
问题: 仅通过将相邻方块滑入空格,能否从初始到达目标?
答案: 不能。我们将用不变量原理证明这一点。
二、状态机 (State Machine)
定义
状态机(state machine):
-
状态集合(states)
-
初始状态(initial state)
-
状态转移规则(transitions) :::
-
确定性(deterministic):每个状态至多一种转移。
-
非确定性(non-deterministic):某些状态有多种可能转移。
执行(execution):从初始状态出发,按转移规则生成的状态序列。
什么是可达性(reachable)若存在某条执行路径能到达状态 s,则称 s 是可达的
8 拼图的状态机模型:
- 状态:棋盘的所有排列(共 种)
- 初始状态:
- 转移:将一个方块滑入空格
三、可达性与不变量
有一种用于证明“状态不可达性”的强大技巧,称为“不变量原理(Invariant Principle)”。它本质上是数学归纳法在状态机上的一种应用。从抽象角度看,这个思想非常简单。
定义
保持谓词(preserved predicate)是一个定义在状态上的谓词 P(⋅), 满足在某个状态 s 中若 P(s) 为真, 且 s -> t 是一次合法转移, 则 P(t)也为真
定义
不变量(invariant):对所有可达状态均为真的性质
定理
不变量原理(invariant)
若 对初始状态为真,且 是保持谓词,则 是不变量。
Proof. 设 :执行序列 中 对所有 成立。用归纳法:
- Base case: 由假设成立。
- Inductive step: 满足 ,故 成立;由保持性, 也成立。
Corollary 推论
** 若 P 是不变量且 P(s) 为假,则 s 不可达
证明:假设状态 s 是可达的,那么根据不变式定义, P(s) 必须为真。 但我们已知 P(s) 为假,矛盾,因此 s 不可达
四、8 拼图的不可解性证明
4.1 计数逆序对
Definition. 序列 中,逆序对是满足 且 的下标对 。逆序对的数目称为逆序对数目(number of inversions)。
例如:
- 序列 1 2 3 4:没有逆序对
- 序列 1 3 2 4:有 1 个逆序对(2,3)
- 序列 4 1 3 2:有 4 个逆序对
现在考虑 8-puzzle 的棋盘配置。我们可以把棋盘映射为一个 1 到 8 的数字序列, 将棋盘排列删去 * 后得到序列。 那么现在问题是:
当我们在滑动拼图时,这个序列中的逆序对数量会发生什么变化?
- 水平移动:不改变序列,逆序对数目不变。
- 垂直移动:
*跳过同行的两格,序列中某三个相邻元素 循环移位为 。该操作恰好改变两对下标的逆序状态,逆序对数目变化量为偶数()。
关键结论: 任何合法移动不改变逆序对数目的奇偶性。
4.2 应用不变量
定义谓词 :状态 对应序列的逆序对数目为奇数。
- 是保持谓词(上述分析)。
- 初始状态 的逆序对数目为 1(奇数),故 为真。
- 由不变量原理, 是不变量:所有可达状态的逆序对数目均为奇数。
目标状态 的逆序对数目为 0(偶数), 为假,故目标状态不可达。
五、终止性
到目前为止,我们已经看到如何使用状态机和不变式来讨论“可达性”。
状态机的另一个重要性质是:终止性(termination)。
定义
状态机的终态(final state)是指没有任何可进行的转移的状态。
定义
状态机是终止(terminates)的,是指不存在无限长的执行序列,即无论如何选择转移,最终必然到达终态。
直观来说,这意味着:
如果你不断运行这个状态机,无论每一步如何选择转移,最终都会到达一个终态。
5.1 导出变量法 / 势函数法
定义
导出变量法(derived variable)又称势函数法(potential function) 是将状态映射到实数的函数 f
-
严格递减(strictly decreasing):每次转移 均有 。
-
弱递减(weakly decreasing):每次转移 。
定理
若存在取值为自然数的严格递减 导出变量,则状态机是终止的
Proof idea. 若不终止则存在无限执行,对应自然数的无限严格递减序列,矛盾,因为自然数中不存在无限严格递减序列。
5.2 应用:简单排序算法的终止性
算法(Simple Sort): 对序列 ,反复找相邻逆序对 ()并交换,直到不存在逆序对为止。
状态机模型:
- 状态:输入序列的所有排列(permutations)
- 初始状态:给定的序列
- 转移:根据算法描述的相邻交换
- 终态:完全有序的序列
Claim. 所有终态均已排好序。(习题:用归纳法证明)。终态恰好是:
对所有 i,都满足
定理
Simple Sort 必然终止
Proof. 取势函数 当前序列的逆序对数目(自然数值)。
每次交换一对相邻逆序对 ,该对从逆序变为顺序,逆序对数目恰好减少 1(其余对不受影响)。故 严格递减,由定理知算法终止。
额外结论: 算法步数恰好等于初始序列的逆序对数目,至多为 。
7. 关键术语速查
| 英文 | 中文 |
|---|---|
| State machine | 状态机 |
| Deterministic / Non-deterministic | 确定性 / 非确定性 |
| Execution | 执行(序列) |
| Reachable state | 可达状态 |
| Preserved predicate | 保持谓词 |
| Invariant | 不变量 |
| Invariant Principle | 不变量原理 |
| Inversion | 逆序对 |
| Final state | 终态 |
| Termination | 终止性 |
| Derived variable / Potential function | 导出变量 / 势函数 |
| Strictly / Weakly decreasing | 严格 / 弱递减 |
我的理解
我的理解
安全性和终止性需要两种不同证据:不变量说明“坏事永远不发生”,导出量说明“进程不会永远转圈”。程序验证中常必须同时提供两者。