2
私はコインシデンスタイプを試していましたし、自然数とベクトル(型のサイズがリスト)のコインシデンスバージョンを定義することに決めました。私は彼らとように無限の数に定義:Coq on Coinduction、タイプミスマッチ
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なのであるから。これらの式が同じであることをコンパイラに理解させるにはどうすればよいですか?