在 Coq 中向全局范围添加符号
Add notation to a scope globally in Coq
我在全局定义某些符号时遇到问题。我正在尝试在模块内的范围内定义一些符号,我希望它在其他模块中可用,但我无法做到这一点。
例如,如果我写
Declare Scope scope0.
Declare Scope scope1.
Declare Scope scope2.
Module A.
Notation ". A" := (list A) (at level 100) : scope0.
#[global]
Notation ". A" := (list A) (at level 100) : scope1.
#[local]
Notation ". A" := (list A) (at level 100) : scope2.
Print Scope scope0.
Print Scope scope1.
Print Scope scope2.
End A.
Module B.
Print Scope scope0.
Print Scope scope1.
Print Scope scope2.
End B.
然后前三个Print Scope
表示符号在作用域中存在,但在后三个中它又消失了,我无法使用它。
当我阅读 documentation of Notation
时,我的印象是它不应该是模块本地的。
我找到了答案,即我应该在关闭模块后导入它。也就是说,用
Declare Scope scope0.
Module A.
Notation ". A" := (list A) (at level 100) : scope0.
End A.
Import A.
Module B.
Print Scope scope0.
End B
该表示法在模块 B 中也可用,Print Scope
语句列出了它。
我通过阅读 the Import
command 找到它,其中说:
Some features defined in modules are activated only when a module is imported. This is for instance the case of notations (see Notations).
并给出了模块在关闭后立即导入的示例。
可能还有其他方法,但这是我找到的方法。
原则上,模块中定义的内容在模块外不可用,除非您 Require
/Import
模块使其在范围内可用。
本地和全局之间的区别(除非我弄错了)更多地与导入模块时在模块外部确实可用的内容有关。
对于符号,您必须导入模块才能使用它们。所以你需要
Import A.
在您的模块中 B
。
我在全局定义某些符号时遇到问题。我正在尝试在模块内的范围内定义一些符号,我希望它在其他模块中可用,但我无法做到这一点。
例如,如果我写
Declare Scope scope0.
Declare Scope scope1.
Declare Scope scope2.
Module A.
Notation ". A" := (list A) (at level 100) : scope0.
#[global]
Notation ". A" := (list A) (at level 100) : scope1.
#[local]
Notation ". A" := (list A) (at level 100) : scope2.
Print Scope scope0.
Print Scope scope1.
Print Scope scope2.
End A.
Module B.
Print Scope scope0.
Print Scope scope1.
Print Scope scope2.
End B.
然后前三个Print Scope
表示符号在作用域中存在,但在后三个中它又消失了,我无法使用它。
当我阅读 documentation of Notation
时,我的印象是它不应该是模块本地的。
我找到了答案,即我应该在关闭模块后导入它。也就是说,用
Declare Scope scope0.
Module A.
Notation ". A" := (list A) (at level 100) : scope0.
End A.
Import A.
Module B.
Print Scope scope0.
End B
该表示法在模块 B 中也可用,Print Scope
语句列出了它。
我通过阅读 the Import
command 找到它,其中说:
Some features defined in modules are activated only when a module is imported. This is for instance the case of notations (see Notations).
并给出了模块在关闭后立即导入的示例。
可能还有其他方法,但这是我找到的方法。
原则上,模块中定义的内容在模块外不可用,除非您 Require
/Import
模块使其在范围内可用。
本地和全局之间的区别(除非我弄错了)更多地与导入模块时在模块外部确实可用的内容有关。
对于符号,您必须导入模块才能使用它们。所以你需要
Import A.
在您的模块中 B
。