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

coq:左递归表示法必须具有显式级别,coq,notation,Coq,Notation,我已经看到“评估为”的Coq符号定义如下: Notation "e '||' n" := (aevalR e n) : type_scope. 我试图将符号“| |”更改为其他符号,因为|经常用于逻辑或。然而,我总是会出错 A left-recursive notation must have an explicit level 例如,当我将“| |”更改为: “\\\\/”,“\\\\\\\\\\/”,“\\\\\\\\\\”,“\\\\.\\\\\\\\\\\\\\”,或“\\\\\\

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

Notation "e '||' n" := (aevalR e n) : type_scope.
我试图将符号
“| |”
更改为其他符号,因为
|
经常用于逻辑
。然而,我总是会出错

 A left-recursive notation must have an explicit level
例如,当我将
“| |”
更改为:

“\\\\/”
“\\\\\\\\\\/”
“\\\\\\\\\\”
“\\\\.\\\\\\\\\\\\\\”
,或
“\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\


这里的
|
有什么特别之处吗?如果可能的话,我应该如何修复它以使这些其他符号工作呢?

如果我是对的,如果你重载了一个符号,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.