Idris と Agda のもう 1 つの違いは、Idris の命題等価性が異種混合であるのに対し、Agda の命題等価性は同種であることです。
言い換えれば、イドリスにおける平等の推定上の定義は次のようになります。
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 定義の l は、Edwin が回答で言及しているユニバース ポリモーフィズムに関係しているため、無視できます。
重要な違いは、Agda の等値型は A の 2 つの要素を引数として取るのに対し、Idris では潜在的に異なる型を持つ 2 つの値を取ることができることです。
言い換えれば、Idris では、タイプの異なる 2 つのものが等しいと主張できますが (証明できない主張になってしまう場合でも)、Agda では、ステートメント自体がナンセンスです。
これは、特にホモトピー型理論での作業の実現可能性に関して、型理論にとって重要かつ広範な結果をもたらします。この場合、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
等式の左側には type がVect (n + (m + o)) a
あり、右側には typeがあるため、このステートメントは同種の等式の下ではナンセンスVect ((n + m) + o) a
です。これは、異質な平等を伴う完全に賢明な声明です。