Coq中字符的单引号表示法?

时间:2014-09-30 03:33:05

标签: string character coq notation

在大多数编程语言中,'c'是一个字符,"c"是一个长度为1的字符串。但是Coq(根据其标准ascii和字符串库)使用"c"作为符号对于两者而言,这需要不断使用Open Scope来澄清哪一个被引用。你怎么能避免这种情况并用通常的方式用单引号指定字符?如果有一个只能部分覆盖标准库的解决方案,更改符号但回收其余部分,那就太好了。

2 个答案:

答案 0 :(得分:3)

Require Import Ascii.
Require Import String.
Check "a"%char.
Check "b"%string.

或者

Program Definition c (s:string) : ascii :=
match s with "" => " "%char | String a _ => a end.

Check (c"A").
Check ("A").

答案 1 :(得分:2)

我很自信没有聪明的方法可以做到这一点,但有一点令人讨厌:只需为每个角色声明一个符号。

Notation "''c''" := "c" : char_scope.
Notation "''a''" := "a" : char_scope.

Check 'a'.
Check 'c'.

编写用于自动生成这些声明的脚本不应该太难。但我不知道这对Coq的解析器是否有任何负面影响。