我正在伊莎贝尔(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])"
它确实排序,但是我发现我的代码真的很难证明。您能否提供有关如何完成代码的提示,以便可以证明?代码不需要高效。
请不要发布正式版本,因为那是我项目的一部分。