2014-10-11 34 views
0

這裏有一個功能我要證明其corectness(寫在OCaml的):證明尾遞歸函數(計算整數的權力)

let rec pow ak a k = if k=0 then ak 
else if (k mod 2)=1 then pow (ak*a) (a*a) (k/2) 
else pow ak (a*a) (k/2);; 

其規格:

For integers ak, a>0, k>=0 pow returns ak*(a^k). 

我知道我需要證明2件事 - 函數終止,並返回假設輸入的正確結果。問題是我沒有看到這樣的證據,我唯一知道的是我需要使用歸納。我應該如何處理這樣的問題?

回答

1

證明基礎案例。然後證明對於a+1k+1,該聲明是假設它適用於ak

+0

換句話說,遞歸與歸納證明完全相同。 – 2014-10-11 16:45:20

+0

如何一次使用兩個變量的歸納? – qiubit 2014-10-11 16:57:17

+0

就像在一個變量上一樣,沒什麼特別的 – ivg 2014-10-11 17:10:01