在玩Isabelle(版本2016-1)时,我遇到了以下奇怪的情况:我不能在各种(大多数/全部?)上下文中使用字母o
作为变量或函数名称。尽管为英语字母表中的大多数(全部?)其他字母工作,以下示例都会失败:
value o (* quoted version doesn't work either *)
definition invert :: ‹bool ⇒ bool› where
‹invert o = (¬ o)›
definition o :: ‹bool ⇒ bool› where
‹o a = (¬ a)›
fun default_int :: ‹int option ⇒ int› where
‹default_int None = 0› |
‹default_int o = the o›
fun default_int :: ‹int option ⇒ int› where
‹default_int None = 0› |
‹default_int (Some o) = o›
fun o :: ‹int option ⇒ int› where
‹o None = 0› |
‹o (Some i) = i›
我似乎无法找到任何记录o
是保留名称的信息,因此这是一个错误还是o
的其他一些用法将其排除在变量/函数名称之外?所有情况的错误消息是"内部语法错误⌂无法解析术语"除了注意到错误似乎与内部语法相关(第三个和第三个错误消息)之外,这不是很有帮助。最后一个案例使用引号内的o
而不是定义/有趣的行显示在行上。
答案 0 :(得分:3)
o
是函数组合运算符∘
的ASCII表示法。您可以看到o
被解释为语法,因为它以一种深绿色的颜色打印,而其他标识符是蓝色,黑色,绿色或橙色(取决于它们是什么)。您可以使用其他预定义语法获得相同的内容,例如O
,OO
,powr
,has_derivative
等。
您可以使用命令
禁用它no_notation Fun.comp (infixl "o" 55)
但是,你应该只为实验做这件事;在生产使用中,禁用这种全局预定义符号将被视为不好。
我认为,这些天来,这些旧的ASCII符号大多是不必要的,如果是o
,实际上是有害的(例如它如何让你困惑)。我建议在Isabelle邮件列表中删除这个特定的符号。