Ein weiterer Unterschied zwischen Idris und Agda besteht darin, dass die Satzgleichheit von Idris heterogen ist, während die von Agda homogen ist.
Mit anderen Worten, die mutmaßliche Definition von Gleichheit in Idris wäre:
data (=) : {a, b : Type} -> a -> b -> Type where
refl : x = x
in Agda ist es
data _≡_ {l} {A : Set l} (x : A) : A → Set a where
refl : x ≡ x
Das l in der Agda-Definition kann ignoriert werden, da es mit dem Universumspolymorphismus zu tun hat, den Edwin in seiner Antwort erwähnt.
Der wichtige Unterschied besteht darin, dass der Gleichheitstyp in Agda zwei Elemente von A als Argumente verwendet, während er in Idris zwei Werte mit möglicherweise unterschiedlichen Typen annehmen kann .
Mit anderen Worten, in Idris kann man behaupten, dass zwei Dinge mit unterschiedlichen Typen gleich sind (auch wenn es sich um eine unbeweisbare Behauptung handelt), während in Agda die Aussage Unsinn ist.
Dies hat wichtige und weitreichende Konsequenzen für die Typentheorie, insbesondere hinsichtlich der Machbarkeit der Arbeit mit der Homotopietypentheorie. Aus diesem Grund funktioniert heterogene Gleichheit einfach nicht, da ein Axiom erforderlich ist, das nicht mit HoTT übereinstimmt. Andererseits ist es möglich, nützliche Theoreme mit heterogener Gleichheit zu formulieren, die mit homogener Gleichheit nicht einfach ausgedrückt werden können.
Das vielleicht einfachste Beispiel ist die Assoziativität der Vektorkettung. Gegebene längenindizierte Listen, sogenannte Vektoren, definiert wie folgt:
data Vect : Nat -> Type -> Type where
Nil : Vect 0 a
(::) : a -> Vect n a -> Vect (S n) a
und Verkettung mit dem folgenden Typ:
(++) : Vect n a -> Vect m a -> Vect (n + m) a
wir möchten vielleicht beweisen, dass:
concatAssoc : (xs : Vect n a) -> (ys : Vect m a) -> (zs : Vect o a) ->
xs ++ (ys ++ zs) = (xs ++ ys) ++ zs
Diese Aussage ist Unsinn unter homogener Gleichheit, weil die linke Seite der Gleichheit Typ Vect (n + (m + o)) a
und die rechte Seite Typ hat Vect ((n + m) + o) a
. Es ist eine absolut vernünftige Aussage mit heterogener Gleichheit.