我正在尝试在 Lean 中创建合并排序定义,并创建了以下代码:
def mergesort (a: ℕ): list ℕ → list ℕ
| [] := []
| [a] := [a]
| (x::xs) := merge (mergesort (fhalf xs)) (mergesort (sndhalf xs))
使用合并定义
def merge : list ℕ → list ℕ → list ℕ
| xs [] := xs
| [] ys := ys
| (x :: xs) (y :: ys) := if x < y then x :: (merge xs ( y :: ys))
else y :: (merge (x :: xs) ys)
和 fhalf / sndhalf 定义:
def fhalf {α: Type} (xs: list α): list α :=
list.take (list.length xs/2) xs
def sndhalf {α: Type} (xs: list α): list α :=
list.drop (list.length xs/2) xs
但是,我收到以下错误消息:
未能证明递归应用正在减少,有根据的关系
@has_well_founded.r (list ℕ) (@has_well_founded_of_has_sizeof (list ℕ) (@list.has_sizeof ℕ nat.has_sizeof))
可能的解决方案:
在定义的末尾使用
using_well_founded
关键字来指定合成有根据的关系和减少证明的策略。默认的递减策略使用“假设”策略,因此可以使用“有”表达式提供提示(也称为本地证明)。嵌套异常包含递减策略的失败状态。
谁能帮我证明归并排序正在减少?