Avec des types dépendants, il est possible de définir un type inductif pour les listes triées, .: par exempleEst-ce que Idris prend en charge les définitions de fonctions dépliantes?
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)
Cela peut ensuite être utilisé pour raisonner sur les listes triées.
En Coq, on pourrait aussi écrire une fonction Fixpoint is_sorted: {A: Type} (l: List A) : bool
, puis utiliser un type comme is_sorted someList = true
pour prouver des choses, par unfold
la définition de ing is_sorted
. Cette dernière approche est-elle possible dans Idris, ou soutient-elle seulement la première approche? En outre, pour ma propre compréhension: ce dernier cas est-il un exemple de «preuve par réflexion», et y a-t-il une situation dans laquelle cette dernière approche serait préférable à la première?
double possible de [donc: quel est le point] (https: // stackoverflow.com/questions/33270639/so-whats-the-point) –