麻烦在Coq写我的自然数字符号

时间:2012-07-30 01:21:33

标签: coq

为什么Coq不接受这个?

Notation "[ d1 , .. , d2 ]" := (addition (multiply ( .. d1 .. ) ten) d2).

1 个答案:

答案 0 :(得分:2)

Recursive notations需要遵守相当严格的规则。要重复的模式必须出现两次(这就是Coq知道要重复的内容):在洞周围使用d2,在终止表达式周围使用d1。您只使用了一次,在洞周围使用d2。您需要围绕某些zero进行另一次迭代(如列表表示法中的nil)。

Notation "[ d1 , .. , d2 ]" :=
  (addition (multiply .. (addition (multiply zero ten) d1) .. ten) d2).

如果您不想引入零,则可以在括号内至少需要两位数(而不是上面的一位),并将其用作终止表达式。这就像对的符号(在Init/Notations.v中,也在手册中提供)。您可以使用优先级较低的[d0]表示法来补充这一点,但因为这只是d0,所以没有多大意义。

Notation "[ d0 , d1 , .. , d2 ]" :=
  (addition (multiply .. (addition (multiply d0 ten) d1) .. ten) d2).