NEWS
changeset 16234 421c3522f160
parent 16181 22324687e2d2
child 16251 121dc80d120a
equal deleted inserted replaced
16233:e634d33deb86 16234:421c3522f160
     7 *** General ***
     7 *** General ***
     8 
     8 
     9 * Theory headers: the new header syntax for Isar theories is
     9 * Theory headers: the new header syntax for Isar theories is
    10 
    10 
    11   theory <name>
    11   theory <name>
    12   imports <theory1> ... <theoryn>
    12   imports <theory1> ... <theoryN>
       
    13   uses <file1> ... <fileM>
    13   begin
    14   begin
    14 
    15 
    15   optionally also with a "files" section. The syntax
    16 where the 'uses' part is optional.  The previous syntax
    16 
    17 
    17   theory <name> = <theory1> + ... + <theoryn>:
    18   theory <name> = <theory1> + ... + <theoryN>:
    18 
    19 
    19   will still be supported for some time but will eventually disappear.
    20 will disappear in the next release.  Note that there is no change in
    20   The syntax of old-style theories has not changed.
    21 ancient non-Isar theories.
    21 
    22 
    22 * Theory loader: parent theories can now also be referred to via
    23 * Theory loader: parent theories can now also be referred to via
    23   relative and absolute paths.
    24 relative and absolute paths.
       
    25 
       
    26 * Improved version of thms_containing searches for a list of criteria
       
    27 instead of a list of constants. Known criteria are: intro, elim, dest,
       
    28 name:string, simp:term, and any term. Criteria can be preceded by '-'
       
    29 to select theorems that do not match. Intro, elim, dest select
       
    30 theorems that match the current goal, name:s selects theorems whose
       
    31 fully qualified name contain s, and simp:term selects all
       
    32 simplification rules whose lhs match term.  Any other term is
       
    33 interpreted as pattern and selects all theorems matching the
       
    34 pattern. Available in ProofGeneral under 'ProofGeneral -> Find
       
    35 Theorems' or C-c C-f.  Example:
       
    36 
       
    37   C-c C-f (100) "(_::nat) + _ + _" intro -name:"HOL."
       
    38 
       
    39 prints the last 100 theorems matching the pattern "(_::nat) + _ + _",
       
    40 matching the current goal as introduction rule and not having "HOL."
       
    41 in their name (i.e. not being defined in theory HOL).
       
    42 
       
    43 
       
    44 *** Document preparation ***
       
    45 
       
    46 * Commands 'display_drafts' and 'print_drafts' perform simple output
       
    47 of raw sources.  Only those symbols that do not require additional
       
    48 LaTeX packages (depending on comments in isabellesym.sty) are
       
    49 displayed properly, everything else is left verbatim.  isatool display
       
    50 and isatool print are used as front ends (these are subject to the
       
    51 DVI/PDF_VIEWER and PRINT_COMMAND settings, respectively).
       
    52 
       
    53 * There is now a flag to control hiding of proofs and some other
       
    54 commands (such as 'ML' or 'parse/print_translation') in document
       
    55 output.  Hiding is enabled by default, and can be disabled by the
       
    56 option '-H false' of isatool usedir or by resetting the reference
       
    57 variable IsarOutput.hide_commands in ML.  Additional commands to be
       
    58 hidden may be declared using IsarOutput.add_hidden_commands.
       
    59 
       
    60 * Several new antiquotation:
       
    61 
       
    62   @{term_type term} prints a term with its type annotated;
       
    63 
       
    64   @{typeof term} prints the type of a term;
       
    65 
       
    66   @{const const} is the same as @{term const}, but checks that the
       
    67   argument is a known logical constant;
       
    68 
       
    69   @{term_style style term} and @{thm_style style thm} print a term or
       
    70   theorem applying a "style" to it
       
    71 
       
    72 Predefined styles are 'lhs' and 'rhs' printing the lhs/rhs of
       
    73 definitions, equations, inequations etc., 'concl' printing only the
       
    74 conclusion of a meta-logical statement theorem, and 'prem1' .. 'prem9'
       
    75 to print the specified premise.  TermStyle.add_style provides an ML
       
    76 interface for introducing further styles.  See also the "LaTeX Sugar"
       
    77 document practical applications.
       
    78 
       
    79 
       
    80 *** Pure ***
       
    81 
       
    82 * Considerably improved version of 'constdefs' command.  Now performs
       
    83 automatic type-inference of declared constants; additional support for
       
    84 local structure declarations (cf. locales and HOL records), see also
       
    85 isar-ref manual.  Potential INCOMPATIBILITY: need to observe strictly
       
    86 sequential dependencies of definitions within a single 'constdefs'
       
    87 section; moreover, the declared name needs to be an identifier.  If
       
    88 all fails, consider to fall back on 'consts' and 'defs' separately.
       
    89 
       
    90 * Improved indexed syntax and implicit structures.  First of all,
       
    91 indexed syntax provides a notational device for subscripted
       
    92 application, using the new syntax \<^bsub>term\<^esub> for arbitrary
       
    93 expressions.  Secondly, in a local context with structure
       
    94 declarations, number indexes \<^sub>n or the empty index (default
       
    95 number 1) refer to a certain fixed variable implicitly; option
       
    96 show_structs controls printing of implicit structures.  Typical
       
    97 applications of these concepts involve record types and locales.
       
    98 
       
    99 * New command 'no_syntax' removes grammar declarations (and
       
   100 translations) resulting from the given syntax specification, which is
       
   101 interpreted in the same manner as for the 'syntax' command.
       
   102 
       
   103 * 'Advanced' translation functions (parse_translation etc.) may depend
       
   104 on the signature of the theory context being presently used for
       
   105 parsing/printing, see also isar-ref manual.
       
   106 
       
   107 * Improved internal renaming of symbolic identifiers -- attach primes
       
   108 instead of base 26 numbers.
       
   109 
       
   110 * New flag show_question_marks controls printing of leading question
       
   111 marks in schematic variable names.
       
   112 
       
   113 * In schematic variable names, *any* symbol following \<^isub> or
       
   114 \<^isup> is now treated as part of the base name.  For example, the
       
   115 following works without printing of awkward ".0" indexes:
       
   116 
       
   117   lemma "x\<^isub>1 = x\<^isub>2 ==> x\<^isub>2 = x\<^isub>1"
       
   118     by simp
       
   119 
       
   120 * Inner syntax includes (*(*nested*) comments*).
       
   121 
       
   122 * Pretty pinter now supports unbreakable blocks, specified in mixfix
       
   123 annotations as "(00...)".
       
   124 
       
   125 * Clear separation of logical types and nonterminals, where the latter
       
   126 may only occur in 'syntax' specifications or type abbreviations.
       
   127 Before that distinction was only partially implemented via type class
       
   128 "logic" vs. "{}".  Potential INCOMPATIBILITY in rare cases of improper
       
   129 use of 'types'/'consts' instead of 'nonterminals'/'syntax'.  Some very
       
   130 exotic syntax specifications may require further adaption
       
   131 (e.g. Cube/Base.thy).
       
   132 
       
   133 * Removed obsolete type class "logic", use the top sort {} instead.
       
   134 Note that non-logical types should be declared as 'nonterminals'
       
   135 rather than 'types'.  INCOMPATIBILITY for new object-logic
       
   136 specifications.
       
   137 
       
   138 * Simplifier: can now control the depth to which conditional rewriting
       
   139 is traced via the PG menu Isabelle -> Settings -> Trace Simp Depth
       
   140 Limit.
       
   141 
       
   142 * Simplifier: simplification procedures may now take the current
       
   143 simpset into account (cf. Simplifier.simproc(_i) / mk_simproc
       
   144 interface), which is very useful for calling the Simplifier
       
   145 recursively.  Minor INCOMPATIBILITY: the 'prems' argument of simprocs
       
   146 is gone -- use prems_of_ss on the simpset instead.  Moreover, the
       
   147 low-level mk_simproc no longer applies Logic.varify internally, to
       
   148 allow for use in a context of fixed variables.
       
   149 
       
   150 * thin_tac now works even if the assumption being deleted contains !!
       
   151 or ==>.  More generally, erule now works even if the major premise of
       
   152 the elimination rule contains !! or ==>.
       
   153 
       
   154 * Reorganized bootstrapping of the Pure theories; CPure is now derived
       
   155 from Pure, which contains all common declarations already.  Both
       
   156 theories are defined via plain Isabelle/Isar .thy files.
       
   157 INCOMPATIBILITY: elements of CPure (such as the CPure.intro /
       
   158 CPure.elim / CPure.dest attributes) now appear in the Pure name space;
       
   159 use isatool fixcpure to adapt your theory and ML sources.
       
   160 
       
   161 * New syntax 'name(i-j, i-, i, ...)' for referring to specific
       
   162 selections of theorems in named facts via index ranges.
       
   163 
       
   164 
       
   165 *** Locales ***
       
   166   
       
   167 * New commands for the interpretation of locale expressions in
       
   168 theories ('interpretation') and proof contexts ('interpret').  These
       
   169 take an instantiation of the locale parameters and compute proof
       
   170 obligations from the instantiated specification.  After the
       
   171 obligations have been discharged, the instantiated theorems of the
       
   172 locale are added to the theory or proof context.  Interpretation is
       
   173 smart in that already active interpretations do not occur in proof
       
   174 obligations, neither are instantiated theorems stored in duplicate.
       
   175 Use print_interps to inspect active interpretations of a particular
       
   176 locale.  For details, see the Isar Reference manual.
       
   177 
       
   178 INCOMPATIBILITY: former 'instantiate' has been withdrawn, use
       
   179 'interpret' instead.
       
   180 
       
   181 * Proper static binding of attribute syntax -- i.e. types / terms /
       
   182 facts mentioned as arguments are always those of the locale definition
       
   183 context, independently of the context of later invocations.  Moreover,
       
   184 locale operations (renaming and type / term instantiation) are applied
       
   185 to attribute arguments as expected.
       
   186 
       
   187 INCOMPATIBILITY of the ML interface: always pass Attrib.src instead of
       
   188 actual attributes; rare situations may require Attrib.attribute to
       
   189 embed those attributes into Attrib.src that lack concrete syntax.
       
   190 Attribute implementations need to cooperate properly with the static
       
   191 binding mechanism.  Basic parsers Args.XXX_typ/term/prop and
       
   192 Attrib.XXX_thm etc. already do the right thing without further
       
   193 intervention.  Only unusual applications -- such as "where" or "of"
       
   194 (cf. src/Pure/Isar/attrib.ML), which process arguments depending both
       
   195 on the context and the facts involved -- may have to assign parsed
       
   196 values to argument tokens explicitly.
       
   197 
       
   198 * New context element "constrains" adds type constraints to parameters --
       
   199 there is no logical significance.
       
   200 
       
   201 * Context expressions: renaming parameters permits syntax
       
   202 redeclaration as well.
       
   203 
       
   204 * Locale definition: 'includes' now disallowed.
       
   205 
       
   206 * Changed parameter management in theorem generation for long goal
       
   207 statements with 'includes'.  INCOMPATIBILITY: produces a different
       
   208 theorem statement in rare situations.
       
   209 
       
   210 * Attributes 'induct' and 'cases': type or set names may now be
       
   211 locally fixed variables as well.
       
   212 
       
   213 * Antiquotations now provide the option 'locale=NAME' to specify an
       
   214 alternative context used for evaluating and printing the subsequent
       
   215 argument, as in @{thm [locale=LC] fold_commute}, for example.
       
   216 
       
   217 
       
   218 *** Provers ***
       
   219 
       
   220 * Provers/hypsubst.ML: improved version of the subst method, for
       
   221 single-step rewriting: it now works in bound variable contexts. New is
       
   222 'subst (asm)', for rewriting an assumption.  INCOMPATIBILITY: may
       
   223 rewrite a different subterm than the original subst method, which is
       
   224 still available as 'simplesubst'.
    24 
   225 
    25 * Provers/quasi.ML: new transitivity reasoners for transitivity only
   226 * Provers/quasi.ML: new transitivity reasoners for transitivity only
    26   and quasi orders.
   227 and quasi orders.
    27 
   228 
    28 * Provers/trancl.ML: new transitivity reasoner for transitive and
   229 * Provers/trancl.ML: new transitivity reasoner for transitive and
    29   reflexive-transitive closure of relations.
   230 reflexive-transitive closure of relations.
    30 
   231 
    31 * Provers/blast.ML: new reference depth_limit to make blast's depth
   232 * Provers/blast.ML: new reference depth_limit to make blast's depth
    32   limit (previously hard-coded with a value of 20) user-definable.
   233 limit (previously hard-coded with a value of 20) user-definable.
    33 
       
    34 * Provers: new version of the subst method, for single-step rewriting: it now
       
    35   works in bound variable contexts. New is subst (asm), for rewriting an
       
    36   assumption. Thanks to Lucas Dixon! INCOMPATIBILITY: may rewrite a different
       
    37   subterm than the original subst method, which is still available under the
       
    38   name simplesubst.
       
    39 
       
    40 * Pure: thin_tac now works even if the assumption being deleted contains !! or ==>. 
       
    41   More generally, erule now works even if the major premise of the elimination rule
       
    42   contains !! or ==>.
       
    43 
       
    44 * Pure: considerably improved version of 'constdefs' command.  Now
       
    45   performs automatic type-inference of declared constants; additional
       
    46   support for local structure declarations (cf. locales and HOL
       
    47   records), see also isar-ref manual.  Potential INCOMPATIBILITY: need
       
    48   to observe strictly sequential dependencies of definitions within a
       
    49   single 'constdefs' section; moreover, the declared name needs to be
       
    50   an identifier.  If all fails, consider to fall back on 'consts' and
       
    51   'defs' separately.
       
    52 
       
    53 * Pure: improved indexed syntax and implicit structures.  First of
       
    54   all, indexed syntax provides a notational device for subscripted
       
    55   application, using the new syntax \<^bsub>term\<^esub> for arbitrary
       
    56   expressions.  Secondly, in a local context with structure
       
    57   declarations, number indexes \<^sub>n or the empty index (default
       
    58   number 1) refer to a certain fixed variable implicitly; option
       
    59   show_structs controls printing of implicit structures.  Typical
       
    60   applications of these concepts involve record types and locales.
       
    61 
       
    62 * Pure: clear separation of logical types and nonterminals, where the
       
    63   latter may only occur in 'syntax' specifications or type
       
    64   abbreviations.  Before that distinction was only partially
       
    65   implemented via type class "logic" vs. "{}".  Potential
       
    66   INCOMPATIBILITY in rare cases of improper use of 'types'/'consts'
       
    67   instead of 'nonterminals'/'syntax'.  Some very exotic syntax
       
    68   specifications may require further adaption (e.g. Cube/Base.thy).
       
    69 
       
    70 * Pure: removed obsolete type class "logic", use the top sort {}
       
    71   instead.  Note that non-logical types should be declared as
       
    72   'nonterminals' rather than 'types'.  INCOMPATIBILITY for new
       
    73   object-logic specifications.
       
    74 
       
    75 * Pure: command 'no_syntax' removes grammar declarations (and
       
    76   translations) resulting from the given syntax specification, which
       
    77   is interpreted in the same manner as for the 'syntax' command.
       
    78 
       
    79 * Pure: print_tac now outputs the goal through the trace channel.
       
    80 
       
    81 * Pure: reference NameSpace.unique_names included.  If true the
       
    82   (shortest) namespace-prefix is printed to disambiguate conflicts (as
       
    83   yet). If false the first entry wins (as during parsing). Default
       
    84   value is true.
       
    85 
       
    86 * Pure: tuned internal renaming of symbolic identifiers -- attach
       
    87   primes instead of base 26 numbers.
       
    88 
       
    89 * Pure: new flag show_question_marks controls printing of leading
       
    90   question marks in schematic variable names.
       
    91 
       
    92 * Pure: new version of thms_containing that searches for a list of
       
    93   criteria instead of a list of constants. Known criteria are: intro,
       
    94   elim, dest, name:string, simp:term, and any term. Criteria can be 
       
    95   preceded by '-' to select theorems that do not match. Intro, elim, 
       
    96   dest select theorems that match the current goal, name:s selects
       
    97   theorems whose fully qualified name contain s, and simp:term selects
       
    98   all simplification rules whose lhs match term.  Any other term is 
       
    99   interpreted as pattern and selects all theorems matching the
       
   100   pattern. Available in ProofGeneral under 'ProofGeneral -> Find
       
   101   Theorems' or C-c C-f.
       
   102 
       
   103   Example: C-c C-f (100) "(_::nat) + _ + _" intro -name:"HOL."
       
   104 
       
   105   prints the last 100 theorems matching the pattern "(_::nat) + _ + _",
       
   106   matching the current goal as introduction rule and not having "HOL." 
       
   107   in their name (i.e. not being defined in theory HOL).
       
   108 
       
   109 * Pure/Syntax: In schematic variable names, *any* symbol following
       
   110   \<^isub> or \<^isup> is now treated as part of the base name.  For
       
   111   example, the following works without printing of ugly ".0" indexes:
       
   112 
       
   113     lemma "x\<^isub>1 = x\<^isub>2 ==> x\<^isub>2 = x\<^isub>1"
       
   114       by simp
       
   115 
       
   116 * Pure/Syntax: inner syntax includes (*(*nested*) comments*).
       
   117 
       
   118 * Pure/Syntax: pretty pinter now supports unbreakable blocks,
       
   119   specified in mixfix annotations as "(00...)".
       
   120 
       
   121 * Pure/Syntax: 'advanced' translation functions (parse_translation
       
   122   etc.) may depend on the signature of the theory context being
       
   123   presently used for parsing/printing, see also isar-ref manual.
       
   124 
       
   125 * Pure/Simplifier: you can control the depth to which conditional rewriting
       
   126   is traced via the PG menu Isabelle -> Settings -> Trace Simp Depth Limit.
       
   127 
       
   128 * Pure/Simplifier: simplification procedures may now take the current
       
   129   simpset into account (cf. Simplifier.simproc(_i) / mk_simproc
       
   130   interface), which is very useful for calling the Simplifier
       
   131   recursively.  Minor INCOMPATIBILITY: the 'prems' argument of
       
   132   simprocs is gone -- use prems_of_ss on the simpset instead.
       
   133   Moreover, the low-level mk_simproc no longer applies Logic.varify
       
   134   internally, to allow for use in a context of fixed variables.
       
   135 
       
   136 * Isar debugging: new reference Toplevel.debug; default false.  Set to
       
   137   make printing of exceptions THM, TERM, TYPE and THEORY more verbose.
       
   138   
       
   139 * Locales: modifications regarding "includes"
       
   140   - "includes" disallowed in declaration of named locales (command "locale").
       
   141   - Fixed parameter management in theorem generation for goals with "includes".
       
   142     INCOMPATIBILITY: rarely, the generated theorem statement is different.
       
   143 
       
   144 * Locales: new context element "constrains" for adding type constraints
       
   145   to parameters.
       
   146 
       
   147 * Locales: context expressions permit optional syntax redeclaration when
       
   148   renaming parameters.
       
   149 
       
   150 * Locales: new commands for the interpretation of locale expressions
       
   151   in theories (interpretation) and proof contexts (interpret).  These take an
       
   152   instantiation of the locale parameters and compute proof obligations from
       
   153   the instantiated specification.  After the obligations have been discharged,
       
   154   the instantiated theorems of the locale are added to the theory or proof
       
   155   context.  Interpretation is smart in that already active interpretations
       
   156   do not occur in proof obligations, neither are instantiated theorems stored
       
   157   in duplicate.
       
   158   Use print_interps to inspect active interpretations of a particular locale.
       
   159   For details, see the Isar Reference manual.
       
   160 
       
   161 * Locales: INCOMPATIBILITY: experimental command "instantiate" has
       
   162   been withdrawn.  Use "interpret" instead.
       
   163 
       
   164 * Locales: proper static binding of attribute syntax -- i.e. types /
       
   165   terms / facts mentioned as arguments are always those of the locale
       
   166   definition context, independently of the context of later
       
   167   invocations.  Moreover, locale operations (renaming and type / term
       
   168   instantiation) are applied to attribute arguments as expected.
       
   169 
       
   170   INCOMPATIBILITY of the ML interface: always pass Attrib.src instead
       
   171   of actual attributes; rare situations may require Attrib.attribute
       
   172   to embed those attributes into Attrib.src that lack concrete syntax.
       
   173 
       
   174   Attribute implementations need to cooperate properly with the static
       
   175   binding mechanism.  Basic parsers Args.XXX_typ/term/prop and
       
   176   Attrib.XXX_thm etc. already do the right thing without further
       
   177   intervention.  Only unusual applications -- such as "where" or "of"
       
   178   (cf. src/Pure/Isar/attrib.ML), which process arguments depending
       
   179   both on the context and the facts involved -- may have to assign
       
   180   parsed values to argument tokens explicitly.
       
   181 
       
   182 * Attributes 'induct' and 'cases': type or set names may now be
       
   183   locally fixed variables as well.
       
   184 
       
   185 * Isar: new syntax 'name(i-j, i-, i, ...)' for referring to specific
       
   186   selections of theorems in named facts via indices.
       
   187 
       
   188 * Pure: reorganized bootstrapping of the Pure theories; CPure is now
       
   189   derived from Pure, which contains all common declarations already.
       
   190   Both theories are defined via plain Isabelle/Isar .thy files.
       
   191   INCOMPATIBILITY: elements of CPure (such as the CPure.intro /
       
   192   CPure.elim / CPure.dest attributes) now appear in the Pure name
       
   193   space; use isatool fixcpure to adapt your theory and ML sources.
       
   194 
   234 
   195 * Provers/simplifier.ML has been moved to Pure, where Simplifier.setup
   235 * Provers/simplifier.ML has been moved to Pure, where Simplifier.setup
   196   is peformed already.  Object-logics merely need to finish their
   236 is peformed already.  Object-logics merely need to finish their
   197   initial simpset configuration as before.
   237 initial simpset configuration as before.  INCOMPATIBILITY.
   198 
       
   199 
       
   200 *** Document preparation ***
       
   201 
       
   202 * Several new antiquotation:
       
   203 
       
   204   @{term_type term} prints a term with its type annotated;
       
   205 
       
   206   @{typeof term} prints the type of a term;
       
   207 
       
   208   @{const const} is the same as @{term const}, but checks
       
   209     that the argument is a known logical constant;
       
   210 
       
   211   @{term_style style term} and @{thm_style style thm} print a term or
       
   212     theorem applying a "style" to it
       
   213 
       
   214   Predefined styles are "lhs" and "rhs" printing the lhs/rhs of
       
   215   definitions, equations, inequations etc. and "conclusion" printing
       
   216   only the conclusion of a meta-logical statement theorem.  Styles may
       
   217   be defined via TermStyle.add_style in ML.  See the "LaTeX Sugar"
       
   218   document for more information.
       
   219 
       
   220 * Antiquotations now provide the option 'locale=NAME' to specify an
       
   221   alternative context used for evaluating and printing the subsequent
       
   222   argument, as in @{thm [locale=LC] fold_commute}, for example.
       
   223 
       
   224 * Commands 'display_drafts' and 'print_drafts' perform simple output
       
   225   of raw sources.  Only those symbols that do not require additional
       
   226   LaTeX packages (depending on comments in isabellesym.sty) are
       
   227   displayed properly, everything else is left verbatim.  We use
       
   228   isatool display and isatool print as front ends; these are subject
       
   229   to the DVI/PDF_VIEWER and PRINT_COMMAND settings, respectively.
       
   230 
       
   231 * Proof scripts as well as some other commands such as ML or
       
   232   parse/print_translation can now be hidden in the document.  Hiding
       
   233   is enabled by default, and can be disabled either via the option '-H
       
   234   false' of isatool usedir or by resetting the reference variable
       
   235   IsarOutput.hide_commands. Additional commands to be hidden may be
       
   236   declared using IsarOutput.add_hidden_commands.
       
   237 
   238 
   238 
   239 
   239 *** HOL ***
   240 *** HOL ***
   240 
   241 
   241 * Datatype induction via method `induct' now preserves the name of the
   242 * Symbolic syntax of Hilbert Choice Operator is now as follows:
   242   induction variable. For example, when proving P(xs::'a list) by induction
       
   243   on xs, the induction step is now P(xs) ==> P(a#xs) rather than
       
   244   P(list) ==> P(a#list) as previously.
       
   245 
       
   246 * HOL/record: reimplementation of records. Improved scalability for
       
   247   records with many fields, avoiding performance problems for type
       
   248   inference. Records are no longer composed of nested field types, but
       
   249   of nested extension types. Therefore the record type only grows
       
   250   linear in the number of extensions and not in the number of fields.
       
   251   The top-level (users) view on records is preserved.  Potential
       
   252   INCOMPATIBILITY only in strange cases, where the theory depends on
       
   253   the old record representation. The type generated for a record is
       
   254   called <record_name>_ext_type.
       
   255 
       
   256 * HOL/record: Reference record_quick_and_dirty_sensitive can be
       
   257   enabled to skip the proofs triggered by a record definition or a
       
   258   simproc (if quick_and_dirty is enabled). Definitions of large
       
   259   records can take quite long.
       
   260 
       
   261 * HOL/record: "record_upd_simproc" for simplification of multiple
       
   262   record updates enabled by default.  Moreover, trivial updates are
       
   263   also removed: r(|x := x r|) = r.  INCOMPATIBILITY: old proofs break
       
   264   occasionally, since simplification is more powerful by default.
       
   265 
       
   266 * HOL: symbolic syntax of Hilbert Choice Operator is now as follows:
       
   267 
   243 
   268   syntax (epsilon)
   244   syntax (epsilon)
   269     "_Eps" :: "[pttrn, bool] => 'a"    ("(3\<some>_./ _)" [0, 10] 10)
   245     "_Eps" :: "[pttrn, bool] => 'a"    ("(3\<some>_./ _)" [0, 10] 10)
   270 
   246 
   271   The symbol \<some> is displayed as the alternative epsilon of LaTeX
   247 The symbol \<some> is displayed as the alternative epsilon of LaTeX
   272   and x-symbol; use option '-m epsilon' to get it actually printed.
   248 and x-symbol; use option '-m epsilon' to get it actually printed.
   273   Moreover, the mathematically important symbolic identifier
   249 Moreover, the mathematically important symbolic identifier \<epsilon>
   274   \<epsilon> becomes available as variable, constant etc.
   250 becomes available as variable, constant etc.  INCOMPATIBILITY,
   275 
   251 
   276 * HOL: "x > y" abbreviates "y < x" and "x >= y" abbreviates "y <= x".
   252 * "x > y" abbreviates "y < x" and "x >= y" abbreviates "y <= x".
   277   Similarly for all quantifiers: "ALL x > y" etc.  The x-symbol for >=
   253 Similarly for all quantifiers: "ALL x > y" etc.  The x-symbol for >=
   278   is \<ge>.
   254 is \<ge>.
   279 
   255 
   280 * HOL/Set: "{x:A. P}" abbreviates "{x. x:A & P}" (and similarly for
   256 * "{x:A. P}" abbreviates "{x. x:A & P}", and similarly for "\<in>"
   281   "\<in>" instead of ":").
   257 instead of ":".
   282 
   258 
   283 * HOL/SetInterval: The syntax for open intervals has changed:
   259 * theory SetInterval: changed the syntax for open intervals:
   284 
   260 
   285   Old         New
   261   Old       New
   286   {..n(}   -> {..<n}
   262   {..n(}    {..<n}
   287   {)n..}   -> {n<..}
   263   {)n..}    {n<..}
   288   {m..n(}  -> {m..<n}
   264   {m..n(}   {m..<n}
   289   {)m..n}  -> {m<..n}
   265   {)m..n}   {m<..n}
   290   {)m..n(} -> {m<..<n}
   266   {)m..n(}  {m<..<n}
   291 
   267 
   292   The old syntax is still supported but will disappear in the future.
   268 The old syntax is still supported but will disappear in the next
   293   For conversion use the following emacs search and replace patterns:
   269 release.  For conversion use the following Emacs search and replace
       
   270 patterns (these are not perfect but work quite well):
   294 
   271 
   295   {)\([^\.]*\)\.\.  ->  {\1<\.\.}
   272   {)\([^\.]*\)\.\.  ->  {\1<\.\.}
   296   \.\.\([^(}]*\)(}  ->  \.\.<\1}
   273   \.\.\([^(}]*\)(}  ->  \.\.<\1}
   297 
   274 
   298   They are not perfect but work quite well.
   275 * theory Finite_Set: changed the syntax for 'setsum', summation over
   299 
   276 finite sets: "setsum (%x. e) A", which used to be "\<Sum>x:A. e", is
   300 * HOL: The syntax for 'setsum', summation over finite sets, has changed:
   277 now either "SUM x:A. e" or "\<Sum>x \<in> A. e".
   301 
   278 
   302   The syntax for 'setsum (%x. e) A' used to be '\<Sum>x:A. e'
   279 Some new syntax forms are available:
   303   and is now either 'SUM x:A. e' or '\<Sum>x\<in>A. e'.
   280 
   304 
   281   "\<Sum>x | P. e"      for     "setsum (%x. e) {x. P}"
   305   There is new syntax for summation over finite sets:
   282   "\<Sum>x = a..b. e"   for     "setsum (%x. e) {a..b}"
   306 
   283   "\<Sum>x = a..<b. e"  for     "setsum (%x. e) {a..<b}"
   307   '\<Sum>x | P. e'    is the same as  'setsum (%x. e) {x. P}'
   284   "\<Sum>x < k. e"      for     "setsum (%x. e) {..<k}"
   308   '\<Sum>x=a..b. e'   is the same as  'setsum (%x. e) {a..b}'
   285 
   309   '\<Sum>x=a..<b. e'  is the same as  'setsum (%x. e) {a..<b}'
   286 The latter form "\<Sum>x < k. e" used to be based on a separate
   310   '\<Sum>x<k. e'      is the same as  'setsum (%x. e) {..<k}'
   287 function "Summation", which has been discontinued.
   311 
   288 
   312   Function 'Summation' over nat is gone, its syntax '\<Sum>i<k. e'
   289 * theory Finite_Set: in structured induction proofs, the insert case
   313   now translates into 'setsum' as above.
   290 is now 'case (insert x F)' instead of the old counterintuitive 'case
   314 
   291 (insert F x)'.
   315 * HOL: Finite set induction: In Isar proofs, the insert case is now
   292 
   316   "case (insert x F)" instead of the old counterintuitive "case (insert F x)".
   293 * The 'refute' command has been extended to support a much larger
   317 
   294 fragment of HOL, including axiomatic type classes, constdefs and
   318 * HOL/Simplifier:
   295 typedefs, inductive datatypes and recursion.
   319 
   296 
   320   - Is now set up to reason about transitivity chains involving "trancl"
   297 * Datatype induction via method 'induct' now preserves the name of the
   321   (r^+) and "rtrancl" (r^*) by setting up tactics provided by
   298 induction variable. For example, when proving P(xs::'a list) by
   322   Provers/trancl.ML as additional solvers.  INCOMPATIBILITY: old proofs break
   299 induction on xs, the induction step is now P(xs) ==> P(a#xs) rather
   323   occasionally as simplification may now solve more goals than previously.
   300 than P(list) ==> P(a#list) as previously.  Potential INCOMPATIBILITY
   324 
   301 in unstructured proof scripts.
   325   - Converts x <= y into x = y if assumption y <= x is present.  Works for
   302 
   326   all partial orders (class "order"), in particular numbers and sets. For
   303 * Reworked implementation of records.  Improved scalability for
   327   linear orders (e.g. numbers) it treats ~ x < y just like y <= x.
   304 records with many fields, avoiding performance problems for type
   328 
   305 inference. Records are no longer composed of nested field types, but
   329   - Simproc for "let x = a in f x"
   306 of nested extension types. Therefore the record type only grows linear
   330   If a is a free or bound variable or a constant then the let is unfolded.
   307 in the number of extensions and not in the number of fields.  The
   331   Otherwise first a is simplified to a', and then f a' is simplified to
   308 top-level (users) view on records is preserved.  Potential
   332   g. If possible we abstract a' from g arriving at "let x = a' in g' x",
   309 INCOMPATIBILITY only in strange cases, where the theory depends on the
   333   otherwise we unfold the let and arrive at g. The simproc can be 
   310 old record representation. The type generated for a record is called
   334   enabled/disabled by the reference use_let_simproc. Potential
   311 <record_name>_ext_type.
   335   INCOMPATIBILITY since simplification is more powerful by default.
   312 
   336 
   313 Flag record_quick_and_dirty_sensitive can be enabled to skip the
   337 * HOL: The 'refute' command has been extended to support a much larger
   314 proofs triggered by a record definition or a simproc (if
   338   fragment of HOL, including axiomatic type classes, constdefs and typedefs,
   315 quick_and_dirty is enabled).  Definitions of large records can take
   339   inductive datatypes and recursion.
   316 quite long.
       
   317 
       
   318 New simproc record_upd_simproc for simplification of multiple record
       
   319 updates enabled by default.  Moreover, trivial updates are also
       
   320 removed: r(|x := x r|) = r.  INCOMPATIBILITY: old proofs break
       
   321 occasionally, since simplification is more powerful by default.
       
   322 
       
   323 * Simplifier: automatically reasons about transitivity chains
       
   324 involving "trancl" (r^+) and "rtrancl" (r^*) by setting up tactics
       
   325 provided by Provers/trancl.ML as additional solvers.  INCOMPATIBILITY:
       
   326 old proofs break occasionally as simplification may now solve more
       
   327 goals than previously.
       
   328 
       
   329 * Simplifier: converts x <= y into x = y if assumption y <= x is
       
   330 present.  Works for all partial orders (class "order"), in particular
       
   331 numbers and sets.  For linear orders (e.g. numbers) it treats ~ x < y
       
   332 just like y <= x.
       
   333 
       
   334 * Simplifier: new simproc for "let x = a in f x".  If a is a free or
       
   335 bound variable or a constant then the let is unfolded.  Otherwise
       
   336 first a is simplified to b, and then f b is simplified to g. If
       
   337 possible we abstract b from g arriving at "let x = b in h x",
       
   338 otherwise we unfold the let and arrive at g.  The simproc can be
       
   339 enabled/disabled by the reference use_let_simproc.  Potential
       
   340 INCOMPATIBILITY since simplification is more powerful by default.
   340 
   341 
   341 
   342 
   342 *** HOLCF ***
   343 *** HOLCF ***
   343 
   344 
   344 * HOLCF: discontinued special version of 'constdefs' (which used to
   345 * HOLCF: discontinued special version of 'constdefs' (which used to
   345   support continuous functions) in favor of the general Pure one with
   346 support continuous functions) in favor of the general Pure one with
   346   full type-inference.
   347 full type-inference.
   347 
   348 
   348 
   349 
   349 *** ZF ***
   350 *** ZF ***
   350 
   351 
   351 * ZF/ex/{Group,Ring}: examples in abstract algebra, including the
   352 * ZF/ex: theories Group and Ring provide examples in abstract algebra,
   352   First Isomorphism Theorem (on quotienting by the kernel of a
   353 including the First Isomorphism Theorem (on quotienting by the kernel
   353   homomorphism).
   354 of a homomorphism).
   354 
   355 
   355 * ZF/Simplifier: install second copy of type solver that actually
   356 * ZF/Simplifier: install second copy of type solver that actually
   356   makes use of TC rules declared to Isar proof contexts (or locales);
   357 makes use of TC rules declared to Isar proof contexts (or locales);
   357   the old version is still required for ML proof scripts.
   358 the old version is still required for ML proof scripts.
   358 
       
   359 
       
   360 *** System ***
       
   361 
       
   362 * Allow symlinks to all proper Isabelle executables (Isabelle,
       
   363   isabelle, isatool etc.).
       
   364 
       
   365 * isabelle-process: Poly/ML no longer needs Perl to run an interactive
       
   366   session.
       
   367 
       
   368 * ISABELLE_DOC_FORMAT setting specifies preferred document format (for
       
   369   isatool doc, isatool mkdir, display_drafts etc.).
       
   370 
       
   371 * isatool usedir: option -f allows specification of the ML file to be
       
   372   used by Isabelle; default is ROOT.ML.
       
   373 
       
   374 * HOL: isatool dimacs2hol converts files in DIMACS CNF format
       
   375   (containing Boolean satisfiability problems) into Isabelle/HOL
       
   376   theories.
       
   377 
   359 
   378 
   360 
   379 *** ML ***
   361 *** ML ***
   380 
   362 
   381 * Pure/library.ML no longer defines its own option datatype, but uses
   363 * Pure/library.ML no longer defines its own option datatype, but uses
   382   that of the SML basis, which has constructors NONE and SOME instead
   364 that of the SML basis, which has constructors NONE and SOME instead of
   383   of None and Some, as well as exception Option.Option instead of
   365 None and Some, as well as exception Option.Option instead of OPTION.
   384   OPTION.  The functions the, if_none, is_some, is_none have been
   366 The functions the, if_none, is_some, is_none have been adapted
   385   adapted accordingly, while Option.map replaces apsome.
   367 accordingly, while Option.map replaces apsome.
   386 
   368 
   387 * The exception LIST has been given up in favour of the standard
   369 * The exception LIST has been given up in favour of the standard
   388   exceptions Empty and Subscript, as well as Library.UnequalLengths.
   370 exceptions Empty and Subscript, as well as Library.UnequalLengths.
   389   Function like Library.hd and Library.tl are superceded by the
   371 Function like Library.hd and Library.tl are superceded by the standard
   390   standard hd and tl functions etc.
   372 hd and tl functions etc.
   391 
   373 
   392   A number of basic functions are now no longer exported to the ML
   374 A number of basic functions are now no longer exported to the ML
   393   toplevel, as they are variants of standard functions.  The following
   375 toplevel, as they are variants of standard functions.  The following
   394   suggests how one can translate existing code:
   376 suggests how one can translate existing code:
   395 
   377 
   396     rev_append xs ys = List.revAppend (xs, ys)
   378     rev_append xs ys = List.revAppend (xs, ys)
   397     nth_elem (i, xs) = List.nth (xs, i)
   379     nth_elem (i, xs) = List.nth (xs, i)
   398     last_elem xs = List.last xs
   380     last_elem xs = List.last xs
   399     flat xss = List.concat xss
   381     flat xss = List.concat xss
   400     seq fs = app fs
   382     seq fs = List.app fs
   401     partition P xs = List.partition P xs
   383     partition P xs = List.partition P xs
   402     filter P xs = List.filter P xs
   384     filter P xs = List.filter P xs
   403     mapfilter f xs = List.mapPartial f xs
   385     mapfilter f xs = List.mapPartial f xs
   404 
   386 
   405 * Pure: output via the Isabelle channels of writeln/warning/error
   387 * Pure: output via the Isabelle channels of writeln/warning/error
   406   etc. is now passed through Output.output, with a hook for arbitrary
   388 etc. is now passed through Output.output, with a hook for arbitrary
   407   transformations depending on the print_mode (cf. Output.add_mode --
   389 transformations depending on the print_mode (cf. Output.add_mode --
   408   the first active mode that provides a output function wins).
   390 the first active mode that provides a output function wins).  Already
   409   Already formatted output may be embedded into further text via
   391 formatted output may be embedded into further text via Output.raw; the
   410   Output.raw; the result of Pretty.string_of/str_of and derived
   392 result of Pretty.string_of/str_of and derived functions
   411   functions (string_of_term/cterm/thm etc.) is already marked raw to
   393 (string_of_term/cterm/thm etc.) is already marked raw to accommodate
   412   accommodate easy composition of diagnostic messages etc.
   394 easy composition of diagnostic messages etc.  Programmers rarely need
   413   Programmers rarely need to care about Output.output or Output.raw at
   395 to care about Output.output or Output.raw at all, with some notable
   414   all, with some notable exceptions: Output.output is required when
   396 exceptions: Output.output is required when bypassing the standard
   415   bypassing the standard channels (writeln etc.), or in token
   397 channels (writeln etc.), or in token translations to produce properly
   416   translations to produce properly formatted results; Output.raw is
   398 formatted results; Output.raw is required when capturing already
   417   required when capturing already output material that will eventually
   399 output material that will eventually be presented to the user a second
   418   be presented to the user a second time.  For the default print mode,
   400 time.  For the default print mode, both Output.output and Output.raw
   419   both Output.output and Output.raw have no effect.
   401 have no effect.
       
   402 
       
   403 * Pure: print_tac now outputs the goal through the trace channel.
       
   404 
       
   405 * Isar debugging: new reference Toplevel.debug; default false.  Set to
       
   406 make printing of exceptions THM, TERM, TYPE and THEORY more verbose.
   420 
   407 
   421 * Pure: name spaces have been refined, with significant changes of the
   408 * Pure: name spaces have been refined, with significant changes of the
   422   internal interfaces -- INCOMPATIBILITY.  Renamed cond_extern(_table)
   409 internal interfaces -- INCOMPATIBILITY.  Renamed cond_extern(_table)
   423   to extern(_table).  The plain name entry path is superceded by a
   410 to extern(_table).  The plain name entry path is superceded by a
   424   general 'naming' context, which also includes the 'policy' to
   411 general 'naming' context, which also includes the 'policy' to produce
   425   produce a fully qualified name and external accesses of a fully
   412 a fully qualified name and external accesses of a fully qualified
   426   qualified name; NameSpace.extend is superceded by context dependent
   413 name; NameSpace.extend is superceded by context dependent
   427   Sign.declare_name.  Several theory and proof context operations
   414 Sign.declare_name.  Several theory and proof context operations modify
   428   modify the naming context.  Especially note Theory.restore_naming
   415 the naming context.  Especially note Theory.restore_naming and
   429   and ProofContext.restore_naming to get back to a sane state; note
   416 ProofContext.restore_naming to get back to a sane state; note that
   430   that Theory.add_path is no longer sufficient to recover from
   417 Theory.add_path is no longer sufficient to recover from
   431   Theory.absolute_path in particular.
   418 Theory.absolute_path in particular.
       
   419 
       
   420 * Pure: new flags short_names (default false) and unique_names
       
   421 (default true) for controlling output of qualified names.  If
       
   422 short_names is set, names are printed unqualified.  If unique_names is
       
   423 reset, the name prefix is reduced to the minimum required to achieve
       
   424 the original result when interning again, even if there is an overlap
       
   425 with earlier declarations.
   432 
   426 
   433 * Pure: cases produced by proof methods specify options, where NONE
   427 * Pure: cases produced by proof methods specify options, where NONE
   434   means to remove case bindings -- INCOMPATIBILITY in
   428 means to remove case bindings -- INCOMPATIBILITY in
   435   (RAW_)METHOD_CASES.
   429 (RAW_)METHOD_CASES.
   436 
   430 
   437 * Provers: Simplifier and Classical Reasoner now support proof context
   431 * Provers: Simplifier and Classical Reasoner now support proof context
   438   dependent plug-ins (simprocs, solvers, wrappers etc.).  These extra
   432 dependent plug-ins (simprocs, solvers, wrappers etc.).  These extra
   439   components are stored in the theory and patched into the
   433 components are stored in the theory and patched into the
   440   simpset/claset when used in an Isar proof context.  Context
   434 simpset/claset when used in an Isar proof context.  Context dependent
   441   dependent components are maintained by the following theory
   435 components are maintained by the following theory operations:
   442   operations:
   436 
   443 
   437   Simplifier.add_context_simprocs
   444     Simplifier.add_context_simprocs
   438   Simplifier.del_context_simprocs
   445     Simplifier.del_context_simprocs
   439   Simplifier.set_context_subgoaler
   446     Simplifier.set_context_subgoaler
   440   Simplifier.reset_context_subgoaler
   447     Simplifier.reset_context_subgoaler
   441   Simplifier.add_context_looper
   448     Simplifier.add_context_looper
   442   Simplifier.del_context_looper
   449     Simplifier.del_context_looper
   443   Simplifier.add_context_unsafe_solver
   450     Simplifier.add_context_unsafe_solver
   444   Simplifier.add_context_safe_solver
   451     Simplifier.add_context_safe_solver
   445 
   452 
   446   Classical.add_context_safe_wrapper
   453     Classical.add_context_safe_wrapper
   447   Classical.del_context_safe_wrapper
   454     Classical.del_context_safe_wrapper
   448   Classical.add_context_unsafe_wrapper
   455     Classical.add_context_unsafe_wrapper
   449   Classical.del_context_unsafe_wrapper
   456     Classical.del_context_unsafe_wrapper
   450 
   457 
   451 IMPORTANT NOTE: proof tools (methods etc.) need to use
   458   IMPORTANT NOTE: proof tools (methods etc.) need to use
   452 local_simpset_of and local_claset_of to instead of the primitive
   459   local_simpset_of and local_claset_of to instead of the primitive
   453 Simplifier.get_local_simpset and Classical.get_local_claset,
   460   Simplifier.get_local_simpset and Classical.get_local_claset,
   454 respectively, in order to see the context dependent fields!
   461   respectively, in order to see the context dependent fields!
   455 
       
   456 
       
   457 *** System ***
       
   458 
       
   459 * Allow symlinks to all proper Isabelle executables (Isabelle,
       
   460 isabelle, isatool etc.).
       
   461 
       
   462 * ISABELLE_DOC_FORMAT setting specifies preferred document format (for
       
   463 isatool doc, isatool mkdir, display_drafts etc.).
       
   464 
       
   465 * isatool usedir: option -f allows specification of the ML file to be
       
   466 used by Isabelle; default is ROOT.ML.
       
   467 
       
   468 * HOL: isatool dimacs2hol converts files in DIMACS CNF format
       
   469 (containing Boolean satisfiability problems) into Isabelle/HOL
       
   470 theories.
   462 
   471 
   463 
   472 
   464 
   473 
   465 New in Isabelle2004 (April 2004)
   474 New in Isabelle2004 (April 2004)
   466 --------------------------------
   475 --------------------------------