[英]Loop Iterative Program Correctness Example - Loop Invariants and Program Termination
我需要幫助證明迭代程序的正確性:
def term_ex_2(x,y):
''' Pre: x and y are natural numbers '''
a = x
b = y
while a >= 0 or b >= 0:
if a > 0:
a -= 1
else:
b -= 1
return x * y
我知道我需要以某種方式找到一個循環不變量並通過對循環的歸納來證明它。 問題是這里的 if/else 語句讓我不知道如何想出一個。
我還必須證明程序在那之后是否終止。
我對分步過程是什么有一個大致的了解,但我不知道從作業中從哪里開始這個例子。
任何建議將被認真考慮。
請注意,在外部while
循環的每次迭代中, a
或b
減 1。
由於x
和y
被假定為自然數,因此它們最初都> 0
。
循環不變式: a >= 0
(可能還有其他可能性!)
此外,程序不會終止,這從上面的循環不變式中很明顯,因為它強制while
循環始終評估為true
。
證明草圖:只要a > 0
,循環就會不斷遞減a
直到達到0
。 然后else
條件開始執行,它繼續永遠遞減b
因為a == 0
使while
循環一次又一次地迭代。
將循環不變量本身放在循環終止條件中的經典用法,使循環無限循環!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.