왜 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.