2
전 (coinductive) 유형을 시험해 보았고 자연수와 벡터 (유형에서 크기가 같은 목록)의 동시 유도 버전을 정의하기로 결정했습니다. 나는 그들과 같은 그래서 무한한 수의 정의 :Coq on Coq, type mismatch
CoInductive conat : Set :=
| cozero : conat
| cosuc : conat -> conat.
CoInductive covec (A : Set) : conat -> Set :=
| conil : covec A cozero
| cocons : forall (n : conat), A -> covec A n -> covec A (cosuc n).
CoFixpoint infnum : conat := cosuc infnum.
이 모든 것은 내가 다음과 같은 유형의 불일치를 준 무한 covector
CoFixpoint ones : covec nat infnum := cocons 1 ones.
에 대한 준 정의를 제외하고 일을
Error:
In environment
ones : covec nat infnum
The term "cocons 1 ones" has type "covec nat (cosuc infnum)" while it is expected to have type
"covec nat infnum".
나는 컴파일러가 정의에 따라 infnum = cosuc infnum이 정의를 받아 들일 것이라고 생각했다. 컴파일러가이 표현식이 동일하다는 것을 어떻게 이해할 수 있습니까?