Otra diferencia entre Idris y Agda es que la igualdad proposicional de Idris es heterogénea, mientras que la de Agda es homogénea.
En otras palabras, la definición putativa de igualdad en Idris sería:
data (=) : {a, b : Type} -> a -> b -> Type where
refl : x = x
mientras que en Agda, es
data _≡_ {l} {A : Set l} (x : A) : A → Set a where
refl : x ≡ x
El l en la definición de Agda puede ignorarse, ya que tiene que ver con el polimorfismo del universo que Edwin menciona en su respuesta.
La diferencia importante es que el tipo de igualdad en Agda toma dos elementos de A como argumentos, mientras que en Idris puede tomar dos valores con tipos potencialmente diferentes .
En otras palabras, en Idris se puede afirmar que dos cosas con diferentes tipos son iguales (incluso si termina siendo una afirmación no demostrable), mientras que en Agda, la afirmación misma no tiene sentido.
Esto tiene consecuencias importantes y de gran alcance para la teoría de tipos, especialmente con respecto a la viabilidad de trabajar con la teoría de tipos de homotopía. Para esto, la igualdad heterogénea simplemente no funcionará porque requiere un axioma que es inconsistente con HoTT. Por otro lado, es posible establecer teoremas útiles con igualdad heterogénea que no se pueden establecer directamente con igualdad homogénea.
Quizás el ejemplo más fácil es la asociatividad de la concatenación de vectores. Dadas listas indexadas por longitud llamadas vectores definidos de esta manera:
data Vect : Nat -> Type -> Type where
Nil : Vect 0 a
(::) : a -> Vect n a -> Vect (S n) a
y concatenación con el siguiente tipo:
(++) : Vect n a -> Vect m a -> Vect (n + m) a
podríamos querer probar que:
concatAssoc : (xs : Vect n a) -> (ys : Vect m a) -> (zs : Vect o a) ->
xs ++ (ys ++ zs) = (xs ++ ys) ++ zs
Esta afirmación no tiene sentido bajo igualdad homogénea, porque el lado izquierdo de la igualdad tiene tipo Vect (n + (m + o)) a
y el lado derecho tiene tipo Vect ((n + m) + o) a
. Es una declaración perfectamente sensata con igualdad heterogénea.