On Thu, 7 Oct 2010, Florian Haftmann wrote:

To declare something as a type mapper, the following command could be introduced

 type_mapper map_k
 <proof>

which would issue an appropriate declaration. Attributes are inappropriate here since the user cannot be expected to write down the theorems to prove explicitly.

This looks like the standard solution, i.e. you have a command of the "interaction type" theory_to_proof, the framework asks the user to produce a proof, the tool applies the final result to the context.

The wording is also quite standard: a substantive that names the main concept "type_mapper", without mentioning the "proof" in the name, because that is already part of the Isar proof syntax (via "proof ... qed" or simiular).


However I am always reluctant to introduce new keywords, both for aesthetic and technical reasons. So I am asking myself whether we should introduce a command for generic user-proof-dependent declarations, e.g.

 prove <args>
 <proof>

Here different parsers could be registered under the umbrella of the
same command.  Some possible instances:

 prove type_mapper: map_l
 <proof>

 prove isomorphism: Fset.Fset Fset.member
 <proof>

Any opinions?

So what are the "aesthetic and technical reasons" here?

There are a few caveats when introducing new commands, but this should not invalidate the whole idea.

  * Proof General requires pre-compiled keyword tables.  This artifact
    will disappear together with the PG interaction model in the near
    future.

  * Newly defined commands can only be used in a later theory node.  This
    restriction is still there in the Isabelle/Scala document model: it
    allows to gain precious microseconds of performance by interleaving
    outer syntax parsing and command execution in a liberal way.

  * Command keywords are a scarce global resource with a danger of clashes
    with popular names already used as identifiers in user theories.
    This is not really a problem if some guidelines for command names are
    followed:

    . Relatively long and explicit command names, separate words with
      underscore instead of "multi part" commands.
      E.g.

        my_tool_foo
        my_tool_bar
        my_tool_blah

      instead of

        my_tool foo
        my_tool bar
        my_tool blah

      The agglomerated my_tool_foo scheme is also more convenient for
      users due to command keyword completion (which normally works
      except for some Emacsen on Mac OS X).

    . Very short command names should be avoided, or require at least
      3 rounds of rethinking.


        Makarius
_______________________________________________
Isabelle-dev mailing list
Isabelle-dev@mailbroy.informatik.tu-muenchen.de
https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev

Reply via email to