중첩 된 긍정 성과 반례 뒤에 숨겨진 직감
Coq 매뉴얼에 명시된 유도 유형에 대한 중첩 된 양성 조건을 살펴보고 있습니다 . 우선 중첩 된 긍정 성 조건과 그 결과에 대한 다른 참조가 있습니까 (Coq에 반드시 필요한 것은 아니지만 일반적으로 종속 유형 이론에 있음)? 나는 Dybjer의 Inductive Families 및 Coquand 및 Paulin의 Inductively Defined Types 와 같은 오래된 논문을 찾았 지만, 이들은 엄격한 양성 조건 만 언급하고 pCuIC 1 및 A Comprehensible Guide to CIC 와 같은 최신 논문에서도 중첩 양성을 언급하지 않습니다.
이제 중첩 된 긍정 성이 필요한 이유를 직관적으로 이해하려고합니다. 본질적으로 중첩 긍정 성은 일부 유도 유형에 대해 생성자 C를 정의 할 때$D$, 인수의 유형이 $C$ 다음과 같다 $I ~ \vec{p} ~ \vec{t}$, 다음 $D$ 엄격하게 긍정적으로 나타날 수 있습니다. $\vec{p}$, 그리고 $I \neq D$. 나는$D$ 부정적인 위치에 $\vec{p}$ 기본적으로 $(D \to \bot) \to \bot$, 및 허용 $D$다른 긍정적 인 위치에서는 본질적으로 이중 부정 제거 (및 명령형 Prop과 일부 불일치 항목)를 허용합니다. 내가 이해하지 못하는 것은 다음과 같습니다.
왜 안돼 $D$ 엄격하게 긍정적으로 나타나다 $\vec{p}$ 만약 $I = D$(생성자 인수 또는 반환 유형으로)? 예를 들어 생성자의 경우$C$ 유도 형 $D ~ (A: \textrm{Type}): \textrm{Type}$ (와 $A$ 유일한 매개 변수), 왜 $C: D ~ (D ~ A) \to D ~ A$ 허용되지 않습니까?
편집 : 이것은 Agda 2.6.1.2에서 허용 될뿐만 아니라, $C: D ~ (D ~ A \to \bot) \to D ~ A$ 나에게는 의심스러운 것 같습니다.
왜 $D$그렇지 않으면 매개 변수에 엄격하게 긍정적으로 나타납니다. $\vec{p}$, 그러나 인덱스에는 없음 $\vec{t}$?
예를 들어 (아주 어리석은) 생성자를 고려하십시오. $C: (D =_{\textrm{Type}} D) \to D$ 유도 형의 경우 $D: \textrm{Type}$, 어디 $=$ 일반적인 평등 유형입니다.편집 : 이것은 관련되지 않은 우주 수준의 이유로 Agda에서 유형 검사를하지 않는 것으로 밝혀 졌으므로 대신 Agda가 긍정적 인 이유로 거부하는 다음을 고려하십시오.
data Box : (A : Set) → Set where box : (A : Set) → Box A data D : Set where C : Box D → D
이것은 되는 경우 AGDA에서 허용
A
하는 대신 매개 변수 중첩 양성 규칙에서 예상대로.
특히 중첩 된 양성 조건 (특히 내가 나열한이 두 가지)을 위반하면 불일치 및 증거가 발생하는 예를 찾는 데 관심이 있습니다. $\bot$, 개인적으로 단조롭다는 주장보다 이해하기 쉬울 것입니다.
답변
다음은 거짓을 증명하기 위해 색인의 긍정 성을 이용하는 예입니다.
module Whatever where
open import Level using (Level)
open import Relation.Binary.PropositionalEquality
open import Data.Empty
variable
ℓ : Level
A B : Set ℓ
data _≅_ (A : Set ℓ) : Set ℓ → Set ℓ where
trefl : A ≅ A
Subst : (P : Set ℓ → Set ℓ) → A ≅ B → P A → P B
Subst P trefl PA = PA
data U : Set where
d : U
El : U → Set
data D : Set
El d = D
{-# NO_POSITIVITY_CHECK #-}
data D where
neg : ∀(c : U) → El c ≅ D → (El c → ⊥) → D
¬D : D → ⊥
¬D v@(neg c eq f) = Subst (λ D → D → ⊥) eq f v
spin : ⊥
spin = ¬D (neg d trefl ¬D)
기술적으로 그것은 또한 유도-재귀가 작은 우주를 만들 수 있다는 사실과 그 유형 평등이 우주에 적용되는 일반적인 평등보다 작을 수 있다는 사실을 사용합니다. 그러나 그것들은 제 지식에 실제로 문제가되지 않습니다 (Coq은 어쨌든 암시 적 평등을 가지고 있습니다. 믿다). 동시 정의도 제거 될 수 있지만 적어도 간단하지는 않습니다.
편집 : 나는 당신의 첫 번째 글 머리 기호에 대해 물었습니다. 그 자체로 중첩 된 중첩 유형에는 본질적으로 특별한 것이 없다는 점이 나에게 지적되었습니다. 이 문서 에서는 중첩 된 유형을 동일한 크기의 인덱싱 된 유형으로 비원시 변환을 사용하는 방법을 보여줍니다. 그렇게 할 때 중첩이 엄격하게 양수인 한 엄격하게 양수 인덱싱 된 유형에 번역을 적용하는 것은 어렵지 않습니다.
또는 예를 들어 제가 보여 드린 예제 번역은 중첩 된 $ℕ$ 자체 중첩 대신 매개 변수 :
data D' (A : Set) (n : ℕ) : Set where
c : D' A (suc n) → D' A n
t : (case n of λ where
zero → A
(suc m) → D' A m
) → D' A n
내가 추가 된 경우 t
생성자를 뭔가가 실제로 사용할 수 있도록하기 위해 A
, 그리고 D A
동등하기위한 것입니다 D' A 0
. 이것을 작성하는 또 다른 방법은 다음과 같습니다.
data D' (A : Set) : ℕ → Set where
c : D' A (suc n) → D' A n
t : D' A n → D' A (suc n)
t' : A → D' A zero
기본적으로 $ℕ$ 얼마나 많은 중첩을 펼쳐야하는지 추적하는 트리입니다.
여기서 2 번 포인트에 부분적으로 대답하겠습니다. 당신은 유도 유형이 다른 유도의 인덱스에서도 엄격하게 긍정적으로 나타날 수, 경우 당신은 impredicative 소유했다 , 당신은 유형 평등 형식을 통해 불일치를 도출 할 수 않습니다 댄 코멘트에 명시된 바와 같이, 부정적인 발생합니다. 다음은 유도 유형이 공리로 표시된 Coq의 예입니다.
Inductive Equal (A: Prop) : Prop -> Prop :=
| refl : Equal A A.
(** These axioms correspond to the following inductive definition:
* Inductive D : Prop :=
* | C : forall (E: Prop) (p: Equal D E), (E -> False) -> D. *)
Axiom D : Prop.
Axiom introD: forall (E: Prop) (p: Equal D E), (E -> False) -> D.
Axiom matchD: forall (E: Prop) (p: Equal D E), D -> (E -> False).
Definition DnotD (d: D): (D -> False) := matchD D (refl D) d.
Definition notD (d: D): False := (DnotD d) d.
Definition isD: D := introD D (refl D) notD.
Definition bottom: False := notD isD.
나는 당신이 우주 다형성 트릭 등에 의지하지 않고 술어 우주만을 가질 때 똑같이 할 수 있을지 모르겠습니다.