为什么Coq不接受这个?
Notation "[ d1 , .. , d2 ]" := (addition (multiply ( .. d1 .. ) ten) d2).
答案 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).