[isabelle-dev] NEWS (update)

Makarius makarius at sketis.net
Wed Mar 3 17:30:53 CET 2010

* Authentic syntax for *all* logical entities (type classes, type
constructors, term constants): provides simple and robust
correspondence between formal entities and concrete syntax.  Within
the parse tree / AST representations, "constants" are decorated by
their category (class, type, const) and spelled out explicitly with
their full internal name.

Substantial INCOMPATIBILITY concerning low-level syntax declarations
and translations (translation rules and translation functions in ML).
Some hints on upgrading:

   - Many existing uses of 'syntax' and 'translations' can be replaced
     by more modern 'type_notation', 'notation' and 'abbreviation',
     which are independent of this issue.

   - 'translations' require markup within the AST; the term syntax
     provides the following special forms:

       CONST c   -- produces syntax version of constant c from context
       XCONST c  -- literally c, checked as constant from context
       c         -- literally c, if declared by 'syntax'

     Plain identifiers are treated as AST variables -- occasionally the
     system indicates accidental variables via the error "rhs contains
     extra variables".

     Type classes and type constructors are marked according to their
     concrete syntax.  Some old translations rules need to be written
     for the "type" category, using type constructor application
     instead of pseudo-term application of the default category

   - 'parse_translation' etc. in ML may use the following

       @{class_syntax c}   -- type class c within parse tree / AST
       @{term_syntax c}    -- type constructor c within parse tree / AST
       @{const_syntax c}   -- ML version of "CONST c" above
       @{syntax_const c}   -- literally c (checked wrt. 'syntax' declarations)

   - Literal types within 'typed_print_translations', i.e. those *not*
     represented as pseudo-terms are represented verbatim.  Use @{class
     c} or @{type_name c} here instead of the above syntax

Note that old non-authentic syntax was based on unqualified base
names, so all of the above "constant" names would coincide.  Recall
that 'print_syntax' and ML_command "set Syntax.trace_ast" help to
diagnose syntax problems.

More information about the isabelle-dev mailing list