Un'altra differenza tra Idris e Agda è che l'uguaglianza proposizionale di Idris è eterogenea, mentre quella di Agda è omogenea.
In altre parole, la definizione putativa di uguaglianza in Idris sarebbe:
data (=) : {a, b : Type} -> a -> b -> Type where
refl : x = x
mentre ad Agda lo è
data _≡_ {l} {A : Set l} (x : A) : A → Set a where
refl : x ≡ x
La l nella definizione di Agda può essere ignorata, poiché ha a che fare con il polimorfismo dell'universo che Edwin menziona nella sua risposta.
La differenza importante è che il tipo di uguaglianza in Agda accetta due elementi di A come argomenti, mentre in Idris può assumere due valori con tipi potenzialmente diversi .
In altre parole, in Idris si può affermare che due cose con tipi diversi sono uguali (anche se finisce per essere un'affermazione non dimostrabile), mentre in Agda l'affermazione stessa è assurda.
Ciò ha conseguenze importanti e di vasta portata per la teoria dei tipi, in particolare per quanto riguarda la fattibilità di lavorare con la teoria dei tipi di omotopia. Per questo, l'uguaglianza eterogenea non funzionerà perché richiede un assioma incompatibile con HoTT. D'altra parte, è possibile affermare teoremi utili con uguaglianza eterogenea che non può essere dichiarata in modo diretto con uguaglianza omogenea.
Forse l'esempio più semplice è l'associatività della concatenazione vettoriale. Date le liste indicizzate per lunghezza chiamate vettori così definiti:
data Vect : Nat -> Type -> Type where
Nil : Vect 0 a
(::) : a -> Vect n a -> Vect (S n) a
e concatenazione con il seguente tipo:
(++) : Vect n a -> Vect m a -> Vect (n + m) a
potremmo voler dimostrare che:
concatAssoc : (xs : Vect n a) -> (ys : Vect m a) -> (zs : Vect o a) ->
xs ++ (ys ++ zs) = (xs ++ ys) ++ zs
Questa affermazione è senza senso sotto l'uguaglianza omogenea, perché il lato sinistro dell'uguaglianza ha tipo Vect (n + (m + o)) a
e il lato destro ha tipo Vect ((n + m) + o) a
. È un'affermazione perfettamente sensata con l'uguaglianza eterogenea.