私はCoqで遊んでいて、ソートされたリストを作成しようとしています。リスト[1,2,3,2,4]を取得して、次のような関数を返す関数が必要Sorted [1,2,3,4]でした。つまり、不良部分を削除しますが、実際にはリスト全体を並べ替えることはありません。
lesseqタイプの関数を定義することから始めようと思ったのですが(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)タイプは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.
おそらく私は自分より進んでいて、これに取り組む前に読み続ける必要があります。