“大小变化分析追踪“下一次调用的某个参数不大于或小于这次的哪个参数”。它使用自然数不能无限严格下降,但不要求下降总发生在同一个参数位置。[1]”
形式陈述
二元关系
等价地,每个非空子集
设转移系统的状态集合为
这样的无限执行。若存在映射
则
自然数上的
直觉
循环不变量说明执行“始终没有走错”,排名函数说明执行“不能永远走下去”。前者约束状态所在区域,后者给每一步分配不可无限减少的预算。
只证明变量非负不够;还要证明每一步严格下降。只证明偶尔下降也不够,除非能排除两次下降之间的无限停滞。终止性是对所有允许执行的量化,存在一条结束路径不能证明非确定程序必终止。
例子与边界
欧几里得算法在整数状态
取排名
二分查找可取候选区间长度 l = mid 可能保持长度不变,因而部分正确性论证无法补上终止义务。
随机过程几乎必然终止,不等于每条样本路径都终止;期望终止时间有限又是更强的定量条件。并发系统的公平性也会影响活性:某线程一直不被调度造成的无限执行,可能在公平语义下被排除、在无公平假设下被允许。
推论与应用
非终止可表示为无限下降序列 x0 ≻ x1 ≻ x2 ≻⋯;良基性排除这种序列,因此给排名函数或良基关系就能把每一步严格下降转成终止证明。
完全正确性等于部分正确性加终止性。循环、递归和重写系统可分别用变体、结构递归与简化序证明终止。强归纳是自然数良基归纳的常见实例;序数排名则能处理嵌套阶段和更复杂的下降模式。
自动终止分析尝试合成线性、词典序或分段排名函数;失败只表示该模板没有找到证书,不自动说明程序发散。停机问题排除了适用于所有程序的完备自动判定器。
自然数多重集序把一份大任务替换为任意有限份更小任务,返回取消公共出现的下降证书;任务数与大小总和都可能增长。大小变化分析则合成跨调用的弱/严格参数关系,检查全部幂等图能否接出严格自环。后者分析失败时,应区分摘要遗漏真实下降与确有可执行无限循环。
良拟序用于验证搜索的终止时,除下降链之外还排除无限反链,从而让向上闭摘要的增长过程稳定。它保证的是搜索摘要最终不再变新,不一定是被验证系统的每条运行都停止。
随机程序还需区分几乎必然终止与有限期望时间。排序上鞅把逐步下降改成统一条件期望下降,在非负性和可积性等条件下给出终止及时间界;任意非负上鞅本身并不是终止证书。
参考资料
- Nachum Dershowitz and Zohar Manna, “Proving Termination with Multiset Orderings,” Communications of the ACM 22(8), 1979.
- Amir Pnueli, “The Temporal Logic of Programs,” FOCS, 1977.
- Jean-Pierre Jouannaud and Albert Rubio, “The Higher-Order Recursive Path Ordering,” LICS, 1999.