[isabelle-dev] Remaining uses of Proof General?

Andreas Lochbihler andreas.lochbihler at inf.ethz.ch
Fri May 2 16:35:10 CEST 2014

On 02/05/14 16:16, Makarius wrote:
> On Tue, 29 Apr 2014, Andreas Lochbihler wrote:
>>>  text ‹
>>>     @{term ‹A \un B›}
>>>  Here the \un works as expected -- the cartouche remains intact
>>>  independently of its
>>>  content, as long as the funny parentheses are nested properly.
>> But this correct nesting is exactly the problem. When I type \un while writing the
>> above, the closing parenthesis are not there yet. The prover sees something like
>> text {* @{term "A \un
>> lemma foo: "..." by ...
> But why? In the ancient times, input was always sequential, as depth-first traversal of
> the intended tree structure.  In less ancient times, some people proposed rigid structural
> editors to make it impossible to escape from nested boxes (still seen today in TeXmacs),
> although that is a bit awkward.  In the past 10 years or so, the standard IDE approach has
> arrived somewhere in the middle: the user is free to type intermediate non-sense, but the
> editor makes it easy to get it right by default.
I have used such templating mechanism with Eclipse and finally disabled them, because they 
caused me more work than what they saved. I usually prefer to enter both delimiters 
separately and to just see the matching parenthesis highlighted.

The reason is that I often add the delimiters only later. For example, when I write a 
single-identifier term, I use

text {* @{term my_constant} *}

and some time later, I figure out that I have to add something, e.g., a type constraint. 
Hence, I produce the following sequence of edits (the # denotes the position of the cursor)

text {* @{term #my_constant} *}
text {* @{term "#my_constant} *}
text {* @{term "my_constant#} *}
text {* @{term "my_constant :: my_type#} *}
text {* @{term "my_constant :: my_type"#} *}

With the template mechanisms that I have seen so far, I get the following sequence:

text {* @{term #my_constant} *}
text {* @{term "#"my_constant} *}
text {* @{term "#my_constant} *}
text {* @{term "my_constant#} *}
text {* @{term "my_constant :: my_type#} *}
text {* @{term "my_constant :: my_type"#"} *}
text {* @{term "my_constant :: my_type"#} *}


More information about the isabelle-dev mailing list