我试图在精益中创建mergesort定义,并创建了以下代码:
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)
和half / 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在定义的末尾使用关键字来指定用于综合良好关系和减少证明的策略。
默认的递减策略使用“假设”策略,因此可以使用“ have”表达式提供提示(aka局部证明)。嵌套异常包含递减策略的失败状态。
谁能帮助我证明mergesort正在减少?