给出以下求和函数:
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)
答案 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
包将function
(sum
)的定义方程式注册为sum.simps
规则。这不是一个好主意,因为它可以使简化循环成为可能,因为方程不受保护。通常,我会从简化集中删除等式,并添加受保护的版本来避免这种情况:
simp