IdrisとAgdaの他の違いの1つは、Idrisの命題均等性は異種であり、Agdaは均質であるということです。すなわち
、イドリスに平等の推定上の定義は次のようになります
data (=) : {a, b : Type} -> a -> b -> Type where
refl : x = x
Agdaで、それはAgdaのdefintion中のLがのように、無視することができる
data _≡_ {l} {A : Set l} (x : A) : A → Set a where
refl : x ≡ x
でありますエドウィンは彼の答えで言及している宇宙の多形性と関係があります。
重要な違いは、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
と連結:thusly定義されたベクトルと呼ばれる長さ、インデックス付きのリストを考えると
(++) : 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
であるためです。これは異質の平等を持つ完璧に合理的な声明です。
あなたはcoq aswelを見たいと思うかもしれません。構文はhaskellから100万マイル離れているわけではなく、使いやすいタイプのクラスもあります:) –
記録のために:Agdaには最近モナドと応用記法もあります。 – gallais