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
を文書化する任意の情報を見つけるように見えることはできません変数/関数名として除外するo
の他の使用法はありますか?すべてのケースのエラーメッセージは「内部構文エラーterm用語の解析に失敗しました」です。これは内部的な構文に関連しているように見えること以外はあまり役に立ちません(3番目と最後のケースのエラーメッセージはまた、定義/ fun行ではなく、引用符の内部にo
を使用しています)。
これは意味があります。 'value'と 'value 'は同じ結果を実際に生成し、 'o'をctrl-clickする有効な用語では' Fun.comp'の定義に行きます。 –
JAB
私はメーリングリストでこの問題を提起しました。しかし、コンセンサスは、「o」表記を削除したいと思っています。しかし、関連する「O」と「OO」関係表記。彼らは非ASCII記法を持たず、ASCII記法をどのようなものに置き換えることができるのかは明らかではない。 –
私は、∘がそれらのパラメータの型制限を課す方法のために、「o」と「o」の両方にオーバーロードされるのを防ぐいくつかの制限/あいまいさがあると推測しています。 (別の識別子として 'OO'を使うことは、' o'や 'O'を使うよりも、もっと奇妙なケースのように思えます。) – JAB