证明尾递归函数(计算整数的幂)

时间:2014-10-11 16:34:48

标签: ocaml tail-recursion proof

这是一个我想要证明其核心性的功能(用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).

我知道我需要证明两件事 - 函数终止,并返回假定输入的正确结果。问题是我没有看到很多这样的证据,我唯一知道的是我需要使用归纳法。我应该如何处理这样的问题?

1 个答案:

答案 0 :(得分:1)

证明基本情况。然后证明,对于a+1k+1,该陈述是正确的,假设它适用于ak