循环不变量
(重定向自迴圈不變式)
在计算机科学中,循环不变式(loop invariant,或循环不变量、循环不变条件,也有译作循环不变性),是一组在循环体内、每次迭代均保持为真的性质(表达式),通常被用来证明程式或伪码的正确性(有时但较少情况下用以证明算法的正确性)。简单说来,“循环不变式”是指在循环开始和循环中,每一次迭代时为真的性质。这意味着,一个正确的循环体,在循环结束时“循环不变式”和“循环终止条件”必须同时成立。
由于循环和递归的相通,证明带有不变式的循环的部分正确性和证明通过归纳的递归程序的正确性极其相似。
循环不变代码外提(Loop-invariant code motion)是將循环內部不受循環影響的語句或表達式移到循環體之外,和此條目提到的循环不变式無關係。
霍尔逻辑
在弗洛伊德-霍尔逻辑,[1][2]While循环的部分正确性會由下列的规则所确定:
意思是:
- while 循环不可以使得 为假 - 如果在给定条件 下循环体 body 不會使不变量 从真变成假,则 在循环之前一样为真,在循环之后也會為真。
- 只要 為真時 必會循環。若其於循環之後中止,則 當為假。
参见
参考文献
- ^ R. W. Floyd. "Assigning meanings to programs." Proceedings of the American Mathematical Society Symposia on Applied Mathematics. Vol. 19, pp. 19–31. 1967. (存档副本 (PDF). 2008-12-09 [2009-11-10]. (原始内容 (PDF)存档于2008-12-09).)
- ^ C. A. R. Hoare. "An axiomatic basis for computer programming (页面存档备份,存于互联网档案馆)". Communications of the ACM, 12(10):576–585, October 1969. doi:10.1145/363235.363259