、それは例えば、ソートされたリストのための誘導型を定義することが可能です。:Idrisは関数定義の展開をサポートしていますか?依存型で
data IsSorted : {a: Type} -> (ltRel: (a -> a -> Type)) -> List a -> Type where
IsSortedZero : IsSorted {a=a} ltRel Nil
IsSortedOne : (x: a) -> IsSorted ltRel [x]
IsSortedMany : (x: a) -> (y: a) -> .IsSorted rel (y::ys) -> .(rel x y) -> IsSorted rel (x::y::ys)
これは、その後、ソートされたリストについて推論するために使用することができます。
コックでは、1にも機能Fixpoint is_sorted: {A: Type} (l: List A) : bool
を書き、その後、is_sorted
の定義するunfold
ことで、物事を証明するためにis_sorted someList = true
のようなタイプを使用することができます。この後者のアプローチはIdrisで可能ですか、それとも前のアプローチだけをサポートしていますか?
さらに、私自身の理解のために、後者の場合は「反映による証明」の例であり、前者の方が後者の方が好ましいと思われる状況はありますか?
[これは何ですか?](https:// stackoverflow.com/questions/33270639/so-whats-the-point) –