我在 Coq 中玩耍,试图创建一个排序列表。我只想要一个接受列表[1,2,3,2,4]
并返回类似内容的函数Sorted [1,2,3,4]
- 即取出坏部分,但实际上并未对整个列表进行排序。
我想我会先定义一个lesseq
type的函数(m n : nat) -> option (m <= n)
,然后我可以很容易地对其进行模式匹配。也许这是个坏主意。
我现在遇到的问题的症结在于(片段,底部的整个功能)
Fixpoint lesseq (m n : nat) : option (m <= n) :=
match m with
| 0 => match n with
| 0 => Some (le_n 0)
...
不是类型检查;它说它期待一个option (m <= n)
,但它Some (le_n 0)
有 type option (0 <= 0)
。我不明白,因为在这种情况下显然两者m
和n
都是零,但我不知道如何告诉 Coq。
整个功能是:
Fixpoint lesseq (m n : nat) : option (m <= n) :=
match m with
| 0 => match n with
| 0 => Some (le_n 0)
| S n_ => None
end
| S m_ => match n with
| 0 => None
| S _ => match lesseq m_ n with
| Some x=> le_S m n x
| None => None
end
end
end.
也许我正在超越自己,只需要在解决这个问题之前继续阅读。