coq:左递归符号必须具有显式级别
coq: A left-recursive notation must have an explicit level
我看到 "evaluates to" 的 Coq 符号定义如下:
Notation "e '||' n" := (aevalR e n) : type_scope.
我正在尝试将符号 '||'
更改为其他符号,因为 ||
通常用于逻辑 or
。但是,我总是得到一个错误
A left-recursive notation must have an explicit level
例如,当我将 '||'
更改为:
时会发生这种情况
'\|/'
、'\||/'
、'|_|'
、'|.|'
、'|v|'
或 '|_'
.
这里||
有什么特别之处吗?以及我应该如何修复它以使这些其他符号起作用(如果可能)?
如果我是对的,如果你重载一个符号,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.
我看到 "evaluates to" 的 Coq 符号定义如下:
Notation "e '||' n" := (aevalR e n) : type_scope.
我正在尝试将符号 '||'
更改为其他符号,因为 ||
通常用于逻辑 or
。但是,我总是得到一个错误
A left-recursive notation must have an explicit level
例如,当我将 '||'
更改为:
'\|/'
、'\||/'
、'|_|'
、'|.|'
、'|v|'
或 '|_'
.
这里||
有什么特别之处吗?以及我应该如何修复它以使这些其他符号起作用(如果可能)?
如果我是对的,如果你重载一个符号,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.