如何在Coq中禁用我的自定义表示法?

时间:2015-05-18 03:20:28

标签: coq

我已经定义了一个符号来模拟命令式样式编程

Notation "a >> b" := (b a) (at level 50).

然而,之后,所有函数应用程序表达式都表示为'>>'样式。例如,在Coq Toplevel的证明模式中,我可以看到

bs' : nat >> list

实际上它应该是

bs' : list nat

为什么Coq积极地将所有函数应用程序样式表达式重写为我的自定义'>>'代表?如何将所有内容恢复正常,我的意思是我希望看到'a>> b'被解释为'b a'并且'list nat'将不被表示为'nat>>列表“?

谢谢!

2 个答案:

答案 0 :(得分:8)

默认情况下,Coq假定如果您定义表示法,则需要将其用于漂亮打印。如果您希望符号永远不会出现在漂亮的打印中,请将其声明为“仅解析”。

Notation "a >> b" := (b a) (at level 50, only parsing).

如果您希望有时显示a >> b,可以将其限制在范围内并将类型与此范围相关联;那么只有当结果类型是那种类型时才会应用表示法。

没有办法告诉Coq“只使用我在源代码中使用它的符号”,因为用符号写的术语与用其他任何方式编写的术语完全相同:符号最初使用的不是该术语的一部分。

答案 1 :(得分:7)

您可以使用定义。这样,只有标记为“followBy”的内容才会以这种方式显示。否则,机器无法知道何时使用空格而不是“>>”......

Definition followedBy {A B : Type} (a : A) (b : A -> B) := b a.

Notation "a >> b" := (followedBy a b) (at level 50).