Agda와 Idris의 차이점


165

나는 의존적으로 유형이 지정된 프로그래밍에 뛰어 들기 시작했고 Agda와 Idris 언어가 Haskell에 가장 가깝다는 것을 알았습니다.

내 질문은 : 그들 사이의 주요 차이점은 무엇입니까? 타입 시스템이 둘 다 똑같이 비싸습니까? 종합적인 비교와 혜택에 대한 토론을 갖는 것이 좋을 것입니다.

나는 몇 가지를 발견 할 수 있었다 :

  • Idris의 유형 클래스는 La Haskell이며 Agda는 인스턴스 인수와 함께
  • 이드리스에는 수도원 및 응용 표기법이 포함됩니다
  • 둘 다 일종의 리 바인딩 가능한 구문을 가지고있는 것처럼 보이지만 실제로는 같은지 확실하지 않습니다.

편집 :이 질문의 Reddit 페이지에 더 많은 답변이 있습니다 : http://www.reddit.com/r/dependent_types/comments/q8n2q/agda_vs_idris/


1
coq aswel을보고 싶을 수도있다. 문법은 haskell에서 백만 마일 떨어져 있지 않으며 타입 클래스를 사용하기 쉽다. :)

4
기록을 위해 : Agda는 또한 현재 수도원 및 응용 표기법을 가지고 있습니다.
gallais

답변:


190

Idris를 구현했기 때문에 아마 약간 편향되어 있으므로이 답변에 가장 적합한 사람이 아닐 수도 있습니다! FAQ ( http://docs.idris-lang.org/en/latest/faq/faq.html) 에는 이에 대한 언급이 있지만 그 내용을 조금 더 확장 할 수 있습니다.

Idris는 처음부터 정리 증명보다 범용 프로그래밍을 지원하도록 설계되었으며 유형 클래스, 표기법, 관용구 괄호, 목록 이해, 과부하 등과 같은 고급 기능을 갖추고 있습니다. Idris는 전술 기반의 이볼 레이터를 기반으로하기 때문에 전술 기반의 대화 형 정리 증명 자 (Coq와 비슷하지만 아직은 아니지만 고급은 아님)에 대한 인터페이스가 있지만 Idris는 대화 형 증명보다 높은 수준의 프로그래밍을 제공합니다.

Idris가 잘 지원하는 또 다른 목표는 임베디드 DSL 구현입니다. Haskell을 사용하면 do 표기법으로 먼 길을 갈 수 있고 Idris로도 할 수 있지만 필요한 경우 응용 프로그램 및 변수 바인딩과 같은 다른 구문을 리 바인드 할 수도 있습니다. 자세한 내용은 자습서에서 확인 하거나이 백서에서 자세한 내용을 확인하십시오. http://eb.host.cs.st-andrews.ac.uk/drafts/dsl-idris.pdf

또 다른 차이점은 컴파일입니다. Agda는 주로 Haskell, C를 통한 Idris를 통해 진행됩니다. C를 통해 Idris와 동일한 백엔드를 사용하는 Agda의 실험적인 백엔드가 있습니다. Idris의 주요 목표는 항상 효율적인 코드를 생성하는 것입니다. 현재 수행하는 것보다 훨씬 더 많은 작업을 수행 할 수 있지만 현재 작업 중입니다.

Agda와 Idris의 유형 시스템은 많은 중요한 측면에서 매우 유사합니다. 가장 큰 차이점은 우주를 다루는 것입니다. Agda에는 우주 다형성이 있고 Idris에는 누적 성Set : Set 이 있습니다 (이 제한이 너무 강하고 증거가 부적절하다고 생각하지 않으면 둘 다 가질 수 있습니다).


49
"... 대답하기 가장 좋은 사람이 아니라"는 무엇을 의미합니까? 당신은 Idris를 친밀하게 알고 있기 때문에 당신은 대답하기 가장 좋은 사람들 중 하나입니다. 이제 우리는 NAD도 회신해야하며 전체 그림이 있습니다. :) 답장을 보내 주셔서 감사합니다.
Alex R

9
누적에 대해 더 읽을 수있는 곳이 있습니까? 전에는 들어 본 적이 없습니다 ...
serras

13
아담 Chlipala의 책은 아마 최고의 장소입니다 :
에드윈 브래디

8
HoTT 서적의 첫 번째 장은 간결하게도이 책을 상당히 명확하게 설명합니다.
David Christiansen

50

Idris와 Agda의 또 다른 차이점은 Idris의 명제 평등은 이질적이며 Agda는 동 질적이라는 것입니다.

다시 말해, Idris에서 평등에 대한 추정의 정의는 다음과 같습니다.

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

Edda가 대답에서 언급 한 우주 다형성과 관련이 있기 때문에 Agda 정의의 l은 무시할 수 있습니다.

중요한 차이점은 Agda의 등식 유형은 A의 두 가지 요소를 인수로 사용하지만 Idris에서는 잠재적으로 다른 유형으로 두 개의 값을 사용할 수 있다는 것 입니다.

다시 말해, Idris에서 다른 유형을 가진 두 가지가 동일하다고 주장 할 수 있지만 (아직 증명할 수없는 주장이더라도) 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입니다. 이질적인 평등을 가진 완벽하게 합리적인 진술입니다.


26
Agda의 기본 이론보다 Agda 표준 라이브러리에 대해 더 많은 의견을 제시하는 것처럼 보이지만 표준 라이브러리에도 동종 및 이종 동등성이 모두 포함되어 있습니다 ( cse.chalmers.se/~nad/listings/lib/… ). 사람들은 가능한 한 전자를 더 자주 사용하는 경향이 있습니다. 후자는 유형이 같고 값에 대해 하나라는 문장과 같습니다. 유형 평등이 이상한 (HoTT) 세계에서 heteq는 더 이상한 진술입니다.
신비한 Dan

6
나는 그 진술이 균질 한 평등 하에서 어떻게 말도 안되는지 이해하지 못합니다. 내가 잘못 해요,하지 않는 한 (n + (m + o))하고 ((n + m) + o)있습니다 judgmentally의 연관성에 의해 동일 +(유도 원리에서 파생). 따라서 평등의 각 측면은 동일한 유형을 갖습니다. 평등 유형의 차이는 중요하지만 이것이 어떻게 그 예인지는 알 수 없습니다.

5
@Abhishek은 판단 평등이 정의 평등과 같지 않습니까? 나는 당신이 (n + (m + o))와 ((n + m) + o)가 명 제적으로 동일하지만 정의 적으로 / 판 단적으로 동일하지 않다고 말하는 것을 의미한다고 생각합니다.
Tom Crockett

3
권리. 판단 평등이라고 말했을 때 저는 제안 평등을 의미했습니다. 죄송합니다. 올바른 주석은 다음과 같습니다. (n + (m + o)) 및 ((n + m) + o)는 명제 상 동일하지만 정의 적으로 동일하지 않습니다. a : A가있는 경우 a : B는 A와 B가 정의 적으로 동일한 유형 인 경우에만 보유합니다. 유형 검사의 결정 가능성을 위해서는 정의 평등을 결정할 수 있어야합니다. 확장형 이론에서 정의 평등은 제안 평등과 일치하므로 유형 검사를 결정할 수 없습니다. Coq에서 정의 평등에는 계산, 알파 평등, 정의 적 전개 만 포함됩니다.
Abhishek Anand
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.