[isabelle-dev] Fwd: [isabelle] Problem with frule_tac substitution

Tobias Nipkow nipkow at in.tum.de
Wed Feb 9 18:16:53 CET 2011

I can see the technical reason for having to rename sometimes (almost
never, as you write), but disagree with renaming by default. But I am
glad that at least top-level theorems are not subject to this - I assume
scope intrusion can happen there as well?


Makarius schrieb:
> On Wed, 9 Feb 2011, Tobias Nipkow wrote:
>> If your analogy with lambda calculus is correct, than there are
>> situations when one must rename something exported from a proof block.
>> That I do not understand. Take this example:
>> lemma True
>> proof-
>>  { fix n::nat have "n=n" by auto }
>> produces "?n2 = ?n2". I do not see why it could not produce ?n = ?n.
> The surface language of Isar could force it more into that direction,
> but brute force is against the Isar philosophy.
> If we look at the example more generally in terms of local contexts and
> scopes, it is one of the situations where freeze_thaw and its funny
> variant freeze_thaw_robust are both broken.  In general you can have
> this situation:
>   {
>     - fix local parameters
>     - get other term material into scope
>     - export result
>   }
> Due to the middle part, certain names might have to be changed. This
> happens *rarely* but it happens, and I did have a concrete crash of
> Larry's freeze_thaw around 1997/1998 when I started to think about Isar
> contexts more systematically.
> So instead of trying hard to rename almost never, to please people
> superficially, the potential renaming happens all the time.  Thus tools
> have a chance to work correctly in the general situation.
>     Makarius

More information about the isabelle-dev mailing list