Я бы порекомендовал использовать другой символ где-нибудь, чтобы сделать это разбираемым Я видел, как Адам Чипала использовал Notation "{{ P }} c {{ Q }}"
, например. Вы также можете определить { P } c { Q }
как нотацию только для печати, хотя я думаю, что это менее полезно и потенциально запутывает новых пользователей.
фигурные скобки являются специальными; * Некоторые из этих особенностей задокументированы в руководстве (прокрутите вниз до третьей заметки), но, признаюсь, я не совсем понимаю эту заметку за пределами того, что "здесь будут драконы, спросите Хьюго Гербелина".
Я могу сказать вам механически, почему вы получаете сообщение об ошибке, в то время как "{x}" работает:
- фигурные скобки не считаются символами из-за специальной
remove_curly_brackets
функции
- если нотация уже есть в таблице синтаксического анализа, нет необходимости включать новые символы
Это проверено в metasyntax.ml , который я нашел, посмотрев, как выдается сообщение об ошибке. Вы также можете подтвердить, что использует грамматика Coq Print Grammar constr
(это также, как вы выясняете, на каком уровне все на самом деле).