最近的discussion集合符号激发了我去问一个问题(Tej?)是否有一个聪明的想法让Coq接受Hoare三元组的标准符号-像这样:
Notation "{ P } c { Q }" :=
(hoare_triple P c Q)
(at level 0, P at level 99, c at level 99, Q at level 99)
: Hoare_scope.
Coq的错误是“错误:一种符号必须至少包含一个符号。”鉴于
这个事实,我不明白Notation "{ x }" := (x) (at level 0, x at level 99).
起作用。
有什么建议吗?
答案 0 :(得分:2)
我建议在其他地方使用另一个符号使之可解析。我已经看到Adam Chlipala例如使用Notation "{{ P }} c {{ Q }}"
。您也可以将{ P } c { Q }
定义为仅打印符号,尽管我认为这样做没什么用,并且可能会使新用户感到困惑。
弯括号很特殊;它们的一些特殊方式是documented in the manual(向下滚动至第三音符),但是我承认,除了“这里有巨龙,请雨果·赫伯林问”之外,我并没有真正理解该音符。
我可以机械地告诉您为什么“ {x}”有效时出现错误:
remove_curly_brackets
函数,花括号不算作符号这是在metasyntax.ml中检查的,我是通过查找错误消息的抛出方式找到的。您还可以使用Print Grammar constr
确认Coq语法是什么(这也是您弄清所有事物实际上是什么级别的方法。)