簡體   English   中英

循環迭代程序正確性示例 - 循環不變量和程序終止

[英]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循環的每次迭代中, ab減 1。

由於xy被假定為自然數,因此它們最初都> 0

循環不變式: a >= 0 (可能還有其他可能性!)

此外,程序不會終止,這從上面的循環不變式中很明顯,因為它強制while循環始終評估為true

證明草圖:只要a > 0 ,循環就會不斷遞減a直到達到0 然后else條件開始執行,它繼續永遠遞減b因為a == 0使while循環一次又一次地迭代。

循環不變量本身放在循環終止條件中的經典用法,使循環無限循環

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM