Une autre différence entre Idris et Agda est que l'égalité propositionnelle d'Idris est hétérogène, tandis que celle d'Agda est homogène.
En d'autres termes, la définition supposée de l'égalité dans Idris serait:
data (=) : {a, b : Type} -> a -> b -> Type where
refl : x = x
tout en Agda, il est
data _≡_ {l} {A : Set l} (x : A) : A → Set a where
refl : x ≡ x
L dans la défintion Agda peut être ignoré, comme a à voir avec le polymorphisme de l'univers qu'Edwin mentionne dans sa réponse. La différence importante est que le type d'égalité dans Agda prend deux éléments de A comme arguments, tandis que dans Idris il peut prendre deux valeurs avec potentiellement différents types. En d'autres termes, dans Idris, on peut affirmer que deux choses de types différents sont égales (même si cela finit par être une revendication indémontrable), tandis que dans Agda, l'affirmation même est un non-sens.
Ceci a des conséquences importantes et étendues pour la théorie des types, en particulier en ce qui concerne la faisabilité de travailler avec la théorie des types d'homotopie. Pour cela, l'égalité hétérogène ne fonctionnera tout simplement pas car elle nécessite un axiome incompatible avec HoTT. D'un autre côté, il est possible d'énoncer des théorèmes utiles d'égalité hétérogène qui ne peuvent être énoncés directement avec une égalité homogène.
L'exemple le plus simple est peut-être l'associativité de la concaténation vectorielle. Compte tenu des listes indexées longueur appelés vecteurs définis ainsi:
data Vect : Nat -> Type -> Type where
Nil : Vect 0 a
(::) : a -> Vect n a -> Vect (S n) a
et concaténation avec le type suivant:
(++) : Vect n a -> Vect m a -> Vect (n + m) a
que nous pourrions vouloir prouver que:
concatAssoc : (xs : Vect n a) -> (ys : Vect m a) -> (zs : Vect o a) ->
xs ++ (ys ++ zs) = (xs ++ ys) ++ zs
Cette déclaration est un non-sens sous égalité homogène, car le côté gauche de l'égalité a le type Vect (n + (m + o)) a
et le côté droit a le type Vect ((n + m) + o) a
. C'est une déclaration parfaitement sensée avec une égalité hétérogène.
Vous pouvez jeter un oeil à coq aswel, la syntaxe n'est pas un million de miles de haskell et il a facile à utiliser les classes de type :) –
Pour l'enregistrement: Agda a également des notations monadique et applicative de nos jours. – gallais