在与Isabelle(版本2016-1)一起玩时,我遇到了以下奇怪的情况:我不能使用字母o
作为变量或函数名称(大部分/全部?)上下文。下面的例子都失败,尽管大部分工作(全部?)英文字母表的其他字母:使用`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
是一个保留名称,因此,这是一个bug或者是有一些o
的其他用法排除它作为变量/函数名称?所有情况下的错误消息是“内部语法错误→解析语句失败”,除了注意到错误似乎与内部语法相关(第三个和最后一个错误消息出现在行中使用o
而不是定义/有趣行)。
那么这是有道理的。 'value'和'value '确实产生了相同的结果,并且使用有效的术语ctrl-单击'o'确实到达了“Fun.comp”的定义。 –
JAB
fyi我在邮件列表中提出了这个问题,似乎共识似乎是我们想要删除'o'符号 - 然而,这个问题由于关系构成的相关“O”和“OO”符号而复杂一点。它们没有非ASCII表示法,并且不清楚可以用什么替代ASCII表示法。 –
我猜测有些限制/歧义可以防止由于它们对参数施加类型限制而导致over被重载为“o”和“O”? (尽管使用'OO'作为另一个标识符似乎比使用'o'或'O'更加不可靠的情况。) – JAB