Idris와 Agda의 다른 점 중 하나는 Idris의 명제 평등이 이질적이며 Agda가 동종이라는 것입니다.즉
, 이드리스 평등의 추정 정의는 다음과 같습니다
data (=) : {a, b : Type} -> a -> b -> Type where
refl : x = x
AGDA에, 그것은
data _≡_ {l} {A : Set l} (x : A) : A → Set a where
refl : x ≡ x
AGDA의 (고화질)의 리터 동안
그것으로 무시 될 수있다 Edwin이 그의 대답에서 언급 한 우주 다형성과 관련이있다.
중요한 차이점은 Agda의 평등 유형은 인수로 A의 두 요소를 취하는 반면 Idris에서는 다른 유형의 두 값을 취할 수 있다는 것입니다.
다른 말로하면, Idris에서 다른 유형의 두 가지 항목이 동등하다고 주장 할 수 있지만 Agda에서는 매우 성명서가 난센스입니다.
이것은 호모 토피 유형 이론으로 작업 할 수있는 가능성과 관련하여 유형 이론에 중요하고 광범위한 영향을 미칩니다. 이를 위해 HoTT와 일치하지 않는 공리가 필요하기 때문에 이기종 평등이 제대로 작동하지 않습니다. 반면에, 균질 평등으로 간단히 기술 할 수없는 이질적 평등을 가진 유용한 정리를 기술하는 것이 가능하다.
아마도 가장 쉬운 예는 벡터 연결의 연관성입니다. 벡터라는 감안할 때 길이 색인 목록 thusly 히 정의 :
(++) : Vect n a -> Vect m a -> Vect (n + m) a
은 우리가 그것을 입증 할 수 있습니다 : 다음과 같은 유형
data Vect : Nat -> Type -> Type where
Nil : Vect 0 a
(::) : a -> Vect n a -> Vect (S n) 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로부터 백만 마일 떨어져 있지 않으며 유형 클래스를 사용하기 쉽습니다. :) –
기록 용 : Agda는 요즘 모나드 및 적용 표기법을 가지고 있습니다. – gallais