왜 Agda와 Coq는 엄격한 양성에 동의하지 않습니까?


24

나는 타입 이론들 사이에서 가장 잘 알려진 차이점들과 관련이없는 Agda와 Coq 사이의 혼란스러운 의견 차이를 우연히 발견했다 (예 : (im) predicativity, induction-recursion 등).

특히 다음 정의는 Agda에 의해 허용됩니다.

  data Ty : Set0 -> Set0 where
    c1 : Ty ℕ
    c2 : Ty (Ty ℕ)

반면에 동등한 Coq 정의는 거부된다. c2에서 그 자체의 지수로서 [Ty_]의 출현은 엄격한 양성을 위반하는 것으로 간주되기 때문이다.

  Inductive Ty : Set -> Set :=
    | c1 : Ty nat
    | c2 : Ty (Ty nat).

실제로,이 경우는 엄격한 양성을 위반하는 Coq'Art 섹션 14.1.2.1의 예제입니다.

  Inductive T : Set -> Set := c : (T (T nat)).

그러나 나는 유형 이론들 사이의 이러한 차이점에 대한 이유를 보지 못했습니다. 생성자 인수에서 유형의 음수 발생을 사용하여 False를 증명하는 고전적인 예는 나에게 분명하지만,이 색인 스타일에서 모순을 파생시킬 수있는 방법을 알 수는 없습니다 (엄격히 긍정적 인 생성자 인수에 관계없이).

Dybjer의 초기 Inductive Families 논문은 약간의 제한이있는 CID 논문에서 Paulin-Mohring의 솔루션에 대해 불쾌한 의견을 제시하며, 그 차이가 비현실 성과 관련이있을 수 있지만 더 자세히 설명하지는 않는다고 모호하게 암시합니다. Dybjer의 논문은 이것을 허용하는 것처럼 보이지만 Paulin-Mohring은 분명히 그것을 금지합니다.

분명히 나는이 의견 차이를 가장 먼저 알지 못하며, 어떤 사람들은이 정의가 두 시스템 ( https://lists.chalmers.se/pipermail/agda/2012/004249.html ) 에서 허용되어서는 안된다고 생각 하지만 왜 한 시스템에서는 들리지만 다른 시스템에서는 들리지 않는지 또는 의견의 차이에 대한 설명을 찾지 못했습니다.

그래서 몇 가지 질문이 있다고 가정합니다.

  1. 이것이 모노톤이지만 엄격하지 않은 유형의 예입니까? (Coq에서; 분명히 Agda는 그것을 엄격하게 긍정적으로 간주합니다)
  2. Coq가 거부하는 동안 Agda는 왜 이것을 허용합니까? 그것은 "엄격히 긍정적 인"해석에있어서의 특이한 차이 일 뿐이며, Coq와 Agda 사이에 미묘한 차이가있어 Agda에서 소리가 나고 Coq에서 소리가 나지 않거나, 특정한 이론적 선호에 의해 맛이 문제가됩니까?
  3. 위의 첫 번째 정의와 아래의 동등한 귀납적 재귀 정의 사이에 의미있는 차이가 있습니까?

귀납적 재귀 정의 :

  mutual
    data U : Set0 -> Set0 where
      c : (i : Fin 2) -> U (T i)
    T : Fin 2 -> Set0
    T zero = ℕ
    T (suc zero) = U ℕ

관련 문헌에 대한 정보를 알려 드리겠습니다.

미리 감사드립니다.


1
내가 아는 한, Coq는 구현하기 쉽고 실제로 충분히 유용하기 때문에 기본 이론이 허용하는 것보다 엄격합니다. 다르지만 관련 사례에 대한이 답변은 내가 이해하는 한입니다.
— Gilles 'SO- 악마 그만해'

1
이 정의는 Agda의 현재 개발 버전에서는 허용되지 않습니다.Ty is not strictly positive, because it occurs in an index of the target type of the constructor c2 in the definition of Ty.
— gallais

2
네, 맞아요, 다른 누군가가 어제 밤에 이것을 지적했습니다. 데비안의 2.3.0.1 패키지를 사용했지만 Cabal의 2.3.2.1은 직접 및 IR 정의를 거부합니다. 그것은 엄격한 인덱스에 관련이 없어 보이는 버그가 만든 양성 검사 다음과 같습니다 code.google.com/p/agda/issues/detail?id=690 가 명시 적 건전성 문제를 표시하지 않고 목록에 논의 된 이후, 난 여전히 해요 유형 자체가 소리인지 궁금합니다.
— 콜린 고든

답변:


10

이 문제는 두 가지 요소의 합류로 인해 혼란스러워 보입니다.

  1. 오래된 버전의 Agda (2.3.0.1)를 사용하고있었습니다. 2.3.2 이전에 Agda는 단순히 생성자 결과 인덱스의 엄격한 양성을 확인하지 않은 것으로 보입니다 (스레드의 다른 곳에서 링크 된 버그 참조).
  2. Dybjer의 Inductive Families 논문을 자세히 읽으면 생성자 결과의 색인을 입력 할 때 정의 된 유도 유형이 바인딩되지 않도록 의도 했을 수 있습니다 . 3.2.1 절은 귀납적 생성자를위한 체계를 제안하고 있으며, 분명히 체계의 각 부분의 바인딩 환경을 설명하는 언어를 잘못 읽었습니다.

이 면밀한 독서는 물론 Coq 및 (최근 버전의) Agda가 수행하는 검사와 일치하며, 자체 지수에서 T의 출현을 금지합니다.


4

자신의 의견에서 알 수 있듯이 차이의 가능한 이유는 즉석 성입니다. Coq는 역사적으로 불확실한 세트를 가지고 있습니다 (여전히 믿는 깃발로 가능합니다!)

Adam Chlipala의 책 인용하기 http://adam.chlipala.net/cpdt/html/Universes.html

Coq 도구는 명령 행 플래그 -impredicative-set을 지원합니다. 이는 Set impredicative를 만들어 Gallina를보다 근본적인 방식으로 수정합니다. forall T : Set, T와 같은 용어는 유형이 Set이며, Set의 귀납적 정의에는 모든 유형의 인수를 수량화하는 생성자가있을 수 있습니다. 일관성을 유지하려면 Prop에 대한 제한과 유사하게 제거 제한을 적용해야합니다.이 제한은 일부 생성자가 Type 유형에 대해 정량화하는 큰 유도 유형에만 적용됩니다. 이러한 경우,이 유도 유형의 값은 패턴 일치 만 가능하여 유형이 설정 또는 소품 인 결과 유형을 생성 할 수 있습니다. 결과 유형에 Prop 유형 만있을 수 있습니다. 이전 버전의 Coq에서는 기본적으로 Set이 비정형 적이었습니다. 최신 버전은 일부 고전적인 공리와 일치하지 않도록 Set을 예측합니다. 특히, 선택적인 공리로 Impredicative Set을 사용할 때주의해야합니다. 제외 된 중간 또는 술어 확장 성과 함께 불일치가 발생할 수 있습니다. Impredicative Set은 본질적으로 Impredicative 수학적 개념을 모델링하는 데 유용 할 수 있지만, 거의 모든 Coq 개발은 그것 없이는 잘 작동합니다.


위에서 찾은 버그 수정 소리에서 Agda는 단순히 생성자 결과에 대한 인덱스의 양성을 확인하지 않은 것처럼 들립니다. 실제로 모노 타입으로 제안 된 유형을 나타내는 것이 아니라 비현실 성과 관련이 없음을 나타냅니다.
— 콜린 고든

2
그렇습니다. -impredicative-set은 Coq.
— 콜린 고든
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.