On Tue, 2 Jul 2013, Lars Noschinski wrote:

What do you mean by "getting out of sync" in contrast to "starting/ending with control symbols"?

There are just control symbols that do not control regular symbols: any sequence of more than one controls, or some control at the end of the identifier with whatever follows after it (e.g. blank or quote).

In Isabelle/jEdit there is an auxiliary notion of "controllable" symbols, to make a visual sub/superscript only in the "known-good" situations. This is why the odd joke about identifiers of 1/2/3 control symbols is visually not as bad as in Proof General.


 * There is just one \<^sub> and \<^sup> control symbol to that effect;
 \<^isub> and \<^isup> remain within the infinite collection of
 Isabelle symbols without any special meaning.

I.e., in the notation below they are not are LETTERs anymore and the then-current IDEs will stop rendering them as sub-/superscripts?

I do not understand the LETTER aspect in this question. The front-ends interpret certain control symbols independently of these token syntax considerations: \<^sub>1 is rendered accordingly, wherever it occurs.

After collapsing \<^sub> and \<^isub> to just \<^sub>, Isabelle/jEdit could retain the Unicode arrow of \<^isub> without the subscripting effect, to make a decent lagacy view. (It could also add some "bad" markup on top of that to remind the user of old things being changed.)


 * Superscript is for explicit notation, e.g. "x\<^sup>2" for some
 operator "_\<^sup>2" applied to term x.

Graph_Theory/Digraph from the AFP defines a constant reachable
with syntax

 ("_ \<rightarrow>\<^isup>*\<index> _" [100,100] 40)

(this should probably by "infix" instead). Is this going to stay
valid (with \<^isup> replaced by \<^sup>)? It does not quite fit the scheme you described above.

That example is just about notation. Mixfix delimiters may use arbitary symbols. One merely needs to watch out for conflicts emerging with the built-in syntax of identifiers (and other tokens).

The above looks fine to me. It would merely come out as \<rightarrow>\<^sup>*\<index>. The \<index> part then uses \<^bsub>..\<^esub> as usual. (Many years ago there would have been a conflict with \<^sub>DIGIT for the index slot, but that has disappeared some years ago.)


 * Subscript may get used within identifiers, e.g. "x\<^sub>2" for a
 variable of that name.

This proposal excludes superscripts from occurring in identifiers. Does this mean that there was no legitimate use of \<isup> at all?

Empirically, there was never substantial use of \<^isup> apart from extreme boundary cases. In such cases it is often possible to use explicit mixfix notation, as I have occasionally done for Lebesgue integral as notation.

Presently, the only use of \<^isup> in the repository is in src/Doc/Tutorial, warning the user that \<^isup> superscript is not to be confused with \<^sup> notation.


This empirical asymmetry of \<^sup> for notation vs. \<^sub> for identifiers is practically important. Otherwise the collapse would not be possible.

I could dig up some changesets that introduce \<^sub> in identifiers, later noticing a clash and making the copy \<^isub>, then realizing that this admits \<^isup> in identifiers without a clash with existing \<^sup> practice for notation.


 Instead of making \<^sub> a "letter" as was done in Isabelle2003, the
 syntax is changed like this:

 LETTER = A .. Z a .. Z \<alpha> ... \<A> ... \<a> ... etc.
 DIGIT = 0 .. 9
 LETDIG = LETTER | DIGIT | _ | '
 SUBSCRIPT = \<^sub>

 IDENTIFIER = LETTER ( SUBSCRIPT? LETDIG )*

[ I always assumed the "_" was also excluded from occurring at the end
  of a (parsed) identifier? ]

That is a different fine point: the lexical syntax admits trailing "_", but identifiers with that are rejected later on (as "internal" ones). Attempting to clarify that syntax turned out as infeasible so far, which is one of the reasons why I have abandoned more ambitious structuring of identifiers with "_" as formal separator.


        Makarius

_______________________________________________
isabelle-dev mailing list
isabelle-...@in.tum.de
https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev

Reply via email to