Coqがこれを受け入れないのはなぜですか?
Notation "[ d1 , .. , d2 ]" := (addition (multiply ( .. d1 .. ) ten) d2).
Coqがこれを受け入れないのはなぜですか?
Notation "[ d1 , .. , d2 ]" := (addition (multiply ( .. d1 .. ) ten) d2).
再帰表記は、かなり厳格な規則に従う必要があります。繰り返すパターンは2回表示する必要があります(これにより、Coqは何を繰り返すかを認識します)。1回d2
は穴の周りを使用し、もう1回は終了式d1
の周りを使用します。穴の周りを使用して、パターンを1回だけ使用しました。(リストの表記法のように)いくつかの周りに別の反復が必要です。d2
zero
nil
Notation "[ d1 , .. , d2 ]" :=
(addition (multiply .. (addition (multiply zero ten) d1) .. ten) d2).
ゼロを導入したくない場合は、角かっこ内に少なくとも2桁(上記の1桁ではなく)を必要とし、それを終了式として使用できます。これは、ペアの表記法に似ています(でInit/Notations.v
、マニュアルにも記載されています)。[d0]
これを優先度の低い表記で補完することもできますが、これはd0
あまり意味がありません。
Notation "[ d0 , d1 , .. , d2 ]" :=
(addition (multiply .. (addition (multiply d0 ten) d1) .. ten) d2).