Isabelle中递归定义的计数排序代码

时间:2019-05-14 16:26:59

标签: isabelle

我正在伊莎贝尔(Isabelle)正式进行计数排序。将找到here的Haskell代码用作参考。

我在Isabelle中得到了以下代码:

function counting_sort:: "nat ⇒ nat ⇒ nat list ⇒ nat list" where
"counting_sort min_value max_value xs = (
if min_value > max_value 
then [] 
else replicate ((count (mset xs) min_value)) min_value@counting_sort (Suc min_value) max_value  xs)"
by pat_completeness auto
termination 
apply (relation "measure (λ(min_value,max_value, xs). max_value + 1 - min_value)")
apply(simp)
apply (simp)
done

value "counting_sort 1 4 ([1,1,1,1,2,4,1,3,3])"

它确实排序,但是我发现我的代码真的很难证明。您能否提供有关如何完成代码的提示,以便可以证明?代码不需要高效。

请不要发布正式版本,因为那是我项目的一部分。

0 个答案:

没有答案