귀납적 유형의 선언 순서가 중요합니까?


9

귀납적 유형의 선언 순서가 중요한지 궁금합니다.

예를 들어 Coq에서는 다음 Nat중 하나를 정의 할 수 있습니다 .

Inductive Nat :=
  | O : Nat
  | S : Nat -> Nat.

또는

Inductive Nat :=
  | S : Nat -> Nat
  | O : Nat.

이것은 아마도 자동으로 생성 된 제거기에서 매개 변수의 순서를 바꿀 것입니다. 그러나 큰 문제는 아닙니다.

내가 궁금한 것은 다음과 같은 선언을 작성할 수 있는지입니다.

Inductive typewhereordermatters :=
  | cons1 : type1
  | cons2 : type2.

type2따라 종속 유형은 어디에 cons1있습니까? (이 경우 선언을 다른 순서로 쓰면 아직 존재하지 않는 type2것을 참조하기 때문에 의미 cons1가 없습니다.)

답변:


10
  1. 순서는 중요하지 않습니다. 나는 그런 경우를 생각할 수 없다. Andrej Bauer 가 주석에서 지적한 것처럼 순서를 변경하면 결과는 원래의 정형 적으로 동형 입니다.

  2. 한 사례는 다른 사례에 의존 할 수 없습니다. 합계의 요소는 선택을 나타내므로 선택이 선택되지 않은 선택에 따라 달라지는 것은 의미가 없습니다.


2
첫 번째 요점에 대해 더 구체적 일 수 있습니다. 순서는 중요하지 않습니다. 순서를 변경하면 결과는 원본과 정식 동형입니다.
Andrej Bauer

2
@ 데이브 : 감사합니다! 나는이 현상이 일어날 것으로 보이는 높은 유도 형 (고도의 실험 이론) 때문에이 질문을하고 있었고, 이것이 정규 유도 형에서도 가능하다는 것을 알고 싶었습니다.
기 illa 브루니

1
@Guillaume : 링크로 어떤 현상을 가리키고 있는지 잘 모르겠습니다. 데이터 유형 정의의 다른 생성자 절은 상위 데이터 유형인지 여부에 상관없이 서로 의존 할 수 없습니다. 아마도 종속 레코드 (링크에서 사용 되며 AgdaCoq에서 사용 가능 )를 생각하고 있습니까?
Noam Zeilberger

1
@Noam : 상위 유도 유형의 예 circle에서 loop생성자 의 유형은 생성자에 따라 다릅니다 base.
기 illa 브루 네리

2
@Guillaume : 나는 지금보고있다 (그들은 실험적인 문법을 소개하고있다).
Noam Zeilberger

6

주문 방식이 중요합니까? 아니.

그러나 명령 이 교정 보조의 기능과 완전히 관련이 없습니까? 다시 요 Matita에서 COQ 매우 유사한 증거 조수, 생성자가 유도 정의에 기록되는 순서는 않는 유형 일치 식을 확인 특별히 때, 유형 검사에 대한 문제.

Matita는 먼저 일치하는 본문에서 모든 생성자가 일치하는지 확인해야합니다. 생성자가 선언 된 순서대로 생성자를 순환하여이를 수행합니다. 그런 다음 일치 표현식이 올바른지 확인하십시오.이 표현식은 역순으로 발생하며 마지막으로 선언 된 생성자의 경우를 먼저 확인합니다. 그런 다음이 유형이 수행되어 다른 사례를 확인하는 데 사용됩니다.

큰 일치 표현식을 작성할 때 종종 나타납니다. 쉬운 사례를 먼저 작성하고 어려운 사례를 와일드 카드로 남겨두고 정기적으로 작성한 내용을 입력하여 의미가 있는지 확인하십시오. 때때로 Matita는 불완전한 일치 표현식의 유형을 유추 할 수 없지만 귀납적 유형에 정의 된 마지막 생성자에 대해 사례를 작성하면 매우 행복합니다.

확실하지는 않지만 Coq가 비슷한 작업을 수행한다고 가정합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.