coq:左递归表示法必须具有显式级别

时间:2015-11-26 01:35:18

标签: coq notation

我已经看到“评估为”的Coq符号定义如下:

Notation "e '||' n" := (aevalR e n) : type_scope.

我正在尝试将符号'||'更改为其他内容,因为||通常用于逻辑or。但是,我总是收到错误

 A left-recursive notation must have an explicit level

例如,当我将'||'更改为:

时会发生这种情况

'\|/''\||/''|_|''|.|''|v|''|_'

这里有||的特别之处吗?我应该如何修复它以使这些其他符号起作用(如果可能的话)?

1 个答案:

答案 0 :(得分:5)

如果我是对的,如果你重写符号,Coq使用第一个定义的属性。符号_ '||' _已经有一个级别,因此Coq使用此级别进行定义。

但是对于新符号,Coq不能这样做,你必须指定级别:

Notation "e '|.|' n" := (aevalR e n) (at level 50) : type_scope.

对于已定义的符号,这甚至比我上面写的更强。您无法重新定义表示法的级别。试试例如:

Notation "e '||' n" := (aevalR e n) (at level 20) : type_scope.