带有计数器的求和函数正确性的证明

时间:2019-05-14 12:32:07

标签: isabelle proof-of-correctness

给出以下求和函数:

function sum :: "nat ⇒ nat ⇒ nat" where
"sum i N = (if i > N then 0 else i + sum (Suc i) N)"
by pat_completeness auto
termination sum
apply (relation "measure (λ(i,N). N + 1 - i)")
apply auto
done

停止条件基于N和i。我通常在列表上执行归纳,所以我真的不知道如何证明此功能。

能否请您提供下一个证明的解决方案和解释?

  

引理sum_general [simp]:“ c≤n⟹2 *和c n +(c-1)* c = n *(n   +1)

1 个答案:

答案 0 :(得分:4)

当您想证明由function命令定义的递归定义函数的内容以及递归超出原始递归的地方时,最好的方法通常是使用归纳规则{{1 }}命令为您提供

function

这使您可以访问归纳假设“ 1.IH”。我还已经添加了您需要的区分大小写。

请注意,lemma "i ≤ N ⟹ N * Suc N = 2 * sum i N + i * (i - 1)" proof (induction i N rule: sum.induct) case (1 i N) show ?case proof (cases "i = N") case True thus ?thesis sorry next case False thus ?thesis sorry qed 包将functionsum)的定义方程式注册为sum.simps规则。这不是一个好主意,因为它可以使简化循环成为​​可能,因为方程不受保护。通常,我会从简化集中删除等式,并添加受保护的版本来避免这种情况:

simp