Еще одно различие между Идрисом и Агдой состоит в том, что пропозициональное равенство Идриса неоднородно, в то время как Агда однородно.
Другими словами, предполагаемое определение равенства в Идрисе будет:
data (=) : {a, b : Type} -> a -> b -> Type where
refl : x = x
в то время как в Агде, это
data _≡_ {l} {A : Set l} (x : A) : A → Set a where
refl : x ≡ x
Л в определении Агды можно игнорировать, так как он имеет отношение к полиморфизму вселенной, который Эдвин упоминает в своем ответе.
Важным отличием является то, что тип равенства в Agda принимает два элемента A в качестве аргументов, в то время как в Idris он может принимать два значения с потенциально разными типами.
Другими словами, в Идрисе можно утверждать, что две вещи с разными типами равны (даже если это оказывается недоказуемым утверждением), тогда как в Агде само утверждение является бессмысленным.
Это имеет важные и широкие последствия для теории типов, особенно в отношении возможности работы с теорией гомотопических типов. Для этого гетерогенное равенство просто не будет работать, потому что оно требует аксиомы, которая не согласуется с HoTT. С другой стороны, можно сформулировать полезные теоремы с неоднородным равенством, которые не могут быть прямо сформулированы с однородным равенством.
Возможно, самый простой пример - ассоциативность конкатенации векторов. Заданные списки с индексами длины называются векторами, определенными следующим образом:
data Vect : Nat -> Type -> Type where
Nil : Vect 0 a
(::) : a -> Vect n a -> Vect (S n) a
и конкатенация со следующим типом:
(++) : Vect n a -> Vect m a -> Vect (n + m) a
мы можем доказать, что:
concatAssoc : (xs : Vect n a) -> (ys : Vect m a) -> (zs : Vect o a) ->
xs ++ (ys ++ zs) = (xs ++ ys) ++ zs
Это утверждение бессмысленно при однородном равенстве, потому что левая часть равенства имеет тип, Vect (n + (m + o)) a
а правая часть имеет тип Vect ((n + m) + o) a
. Это совершенно разумное утверждение с неоднородным равенством.