NEWS
changeset 15703 727ef1b8b3ee
parent 15696 1da4ce092c0b
child 15724 1b89c781a7ec
equal deleted inserted replaced
15702:2677db44c795 15703:727ef1b8b3ee
     4 New in this Isabelle release
     4 New in this Isabelle release
     5 ----------------------------
     5 ----------------------------
     6 
     6 
     7 *** General ***
     7 *** General ***
     8 
     8 
     9 * The type Library.option is no more, along with the exception
     9 * ML: The type Library.option is no more, along with the exception
    10   Library.OPTION: Isabelle now uses the standard option type.  The
    10   Library.OPTION: Isabelle now uses the standard option type.  The
    11   functions the, is_some, is_none, etc. are still in Library, but
    11   functions the, is_some, is_none, etc. are still in Library, but
    12   the constructors are now SOME and NONE instead of Some and None.
    12   the constructors are now SOME and NONE instead of Some and None.
    13   They throw the exception Option.
    13   They raise the exception Option.
    14 
    14 
    15 * The exception LIST is no more, the standard exceptions Empty and
    15 * ML: The exception LIST is no more, the standard exceptions Empty and
    16   Subscript, as well as Library.UnequalLengths are used instead.  This
    16   Subscript, as well as Library.UnequalLengths are used instead.  This
    17   means that function like Library.hd and Library.tl are gone, as the
    17   means that function like Library.hd and Library.tl are gone, as the
    18   standard hd and tl functions suffice.
    18   standard hd and tl functions suffice.
    19 
    19 
    20   A number of functions, specifically those in the LIBRARY_CLOSED
    20   A number of functions, specifically those in the LIBRARY_CLOSED
    40   from the standard).
    40   from the standard).
    41 
    41 
    42   A simple solution to broken code is to include "open Library" at the
    42   A simple solution to broken code is to include "open Library" at the
    43   beginning of a structure.  Everything after that will be as before.
    43   beginning of a structure.  Everything after that will be as before.
    44 
    44 
    45 * Document preparation: new antiquotations @{lhs thm} and @{rhs thm}
       
    46   printing the lhs/rhs of definitions, equations, inequations etc. 
       
    47 
       
    48 * isatool usedir: new option -f that allows specification of the ML
       
    49   file to be used by Isabelle; default is ROOT.ML.
       
    50 
       
    51 * Theory headers: the new header syntax for Isar theories is
    45 * Theory headers: the new header syntax for Isar theories is
    52 
    46 
    53   theory <name>
    47   theory <name>
    54   imports <theory1> ... <theoryn>
    48   imports <theory1> ... <theoryn>
    55   begin
    49   begin
   143   simprocs is gone -- use prems_of_ss on the simpset instead.
   137   simprocs is gone -- use prems_of_ss on the simpset instead.
   144   Moreover, the low-level mk_simproc no longer applies Logic.varify
   138   Moreover, the low-level mk_simproc no longer applies Logic.varify
   145   internally, to allow for use in a context of fixed variables.
   139   internally, to allow for use in a context of fixed variables.
   146 
   140 
   147 * Pure/Simplifier: Command "find_rewrites" takes a string and lists all
   141 * Pure/Simplifier: Command "find_rewrites" takes a string and lists all
   148   equality theorems (not just those with attribute simp!) whose left-hand
   142   equality theorems (not just those declared as simp!) whose left-hand
   149   side matches the term given via the string. In PG the command can be
   143   side matches the term given via the string. In PG the command can be
   150   activated via Isabelle -> Show me -> matching rewrites.
   144   activated via Isabelle -> Show me -> matching rewrites.
   151 
   145 
   152 * Provers: Simplifier and Classical Reasoner now support proof context
   146 * Isar debugging: new reference Toplevel.debug; default false.
   153   dependent plug-ins (simprocs, solvers, wrappers etc.).  These extra
   147   Set to make printing of exceptions THM, TERM, TYPE and THEORY more verbose.
   154   components are stored in the theory and patched into the
   148   
   155   simpset/claset when used in an Isar proof context.  Context
   149 * Locales:
   156   dependent components are maintained by the following theory
   150   - "includes" disallowed in declaration of named locales (command "locale").
   157   operations:
   151   - Fixed parameter management in theorem generation for goals with "includes".
   158 
   152     INCOMPATIBILITY: rarely, the generated theorem statement is different.
   159     Simplifier.add_context_simprocs
   153 
   160     Simplifier.del_context_simprocs
   154 * Locales:  new commands for the interpretation of locale expressions
   161     Simplifier.set_context_subgoaler
   155   in theories (interpretation) and proof contexts (interpret).  These take an
   162     Simplifier.reset_context_subgoaler
   156   instantiation of the locale parameters and compute proof obligations from
   163     Simplifier.add_context_looper
   157   the instantiated specification.  After the obligations have been discharged,
   164     Simplifier.del_context_looper
   158   the instantiated theorems of the locale are added to the theory or proof
   165     Simplifier.add_context_unsafe_solver
   159   context.  Interpretation is smart in that already active interpretations
   166     Simplifier.add_context_safe_solver
   160   do not occur in proof obligations, neither are instantiated theorems stored
   167 
   161   in duplicate.
   168     Classical.add_context_safe_wrapper
   162   Use print_interps to inspect active interpretations of a particular locale.
   169     Classical.del_context_safe_wrapper
   163 
   170     Classical.add_context_unsafe_wrapper
   164 * Isar: new syntax 'name(i-j, i-, i, ...)' for referring to specific
   171     Classical.del_context_unsafe_wrapper
   165   selections of theorems in named facts via indices.
   172 
   166 
   173   IMPORTANT NOTE: proof tools (methods etc.) need to use
   167 
   174   local_simpset_of and local_claset_of to instead of the primitive
   168 *** Document preparation ***
   175   Simplifier.get_local_simpset and Classical.get_local_claset,
   169 
   176   respectively, in order to see the context dependent fields!
   170 * New antiquotations @{lhs thm} and @{rhs thm} printing the lhs/rhs of
   177 
   171   definitions, equations, inequations etc.
   178 * Document preparation: antiquotations now provide the option
   172 
   179   'locale=NAME' to specify an alternative context used for evaluating
   173 * Antiquotations now provide the option 'locale=NAME' to specify an
   180   and printing the subsequent argument, as in @{thm [locale=LC]
   174   alternative context used for evaluating and printing the subsequent
   181   fold_commute}, for example.
   175   argument, as in @{thm [locale=LC] fold_commute}, for example.
   182 
   176 
   183 * Document preparation: commands 'display_drafts' and 'print_drafts'
   177 * Commands 'display_drafts' and 'print_drafts' perform simple output
   184   perform simple output of raw sources.  Only those symbols that do
   178   of raw sources.  Only those symbols that do not require additional
   185   not require additional LaTeX packages (depending on comments in
   179   LaTeX packages (depending on comments in isabellesym.sty) are
   186   isabellesym.sty) are displayed properly, everything else is left
   180   displayed properly, everything else is left verbatim.  We use
   187   verbatim.  We use isatool display and isatool print as front ends;
   181   isatool display and isatool print as front ends; these are subject
   188   these are subject to the DVI_VIEWER and PRINT_COMMAND settings,
   182   to the DVI/PDF_VIEWER and PRINT_COMMAND settings, respectively.
   189   respectively.
   183 
   190 
   184 * Proof scripts as well as some other commands such as ML or
   191 * Document preparation: Proof scripts as well as some other commands
   185   parse/print_translation can now be hidden in the document.  Hiding
   192   such as ML or parse/print_translation can now be hidden in the document.
   186   is enabled by default, and can be disabled either via the option '-H
   193   Hiding is enabled by default, and can be disabled either via the option
   187   false' of isatool usedir or by resetting the reference variable
   194   '-H false' of isatool usedir or by resetting the reference variable
       
   195   IsarOutput.hide_commands. Additional commands to be hidden may be
   188   IsarOutput.hide_commands. Additional commands to be hidden may be
   196   declared using IsarOutput.add_hidden_commands.
   189   declared using IsarOutput.add_hidden_commands.
   197 
   190 
   198 * ML: output via the Isabelle channels of writeln/warning/error
   191 
       
   192 *** HOL ***
       
   193 
       
   194 * Datatype induction via method `induct' now preserves the name of the
       
   195   induction variable. For example, when proving P(xs::'a list) by induction
       
   196   on xs, the induction step is now P(xs) ==> P(a#xs) rather than
       
   197   P(list) ==> P(a#list) as previously.
       
   198 
       
   199 * HOL/record: reimplementation of records. Improved scalability for
       
   200   records with many fields, avoiding performance problems for type
       
   201   inference. Records are no longer composed of nested field types, but
       
   202   of nested extension types. Therefore the record type only grows
       
   203   linear in the number of extensions and not in the number of fields.
       
   204   The top-level (users) view on records is preserved.  Potential
       
   205   INCOMPATIBILITY only in strange cases, where the theory depends on
       
   206   the old record representation. The type generated for a record is
       
   207   called <record_name>_ext_type.
       
   208 
       
   209 * HOL/record: Reference record_quick_and_dirty_sensitive can be
       
   210   enabled to skip the proofs triggered by a record definition or a
       
   211   simproc (if quick_and_dirty is enabled). Definitions of large
       
   212   records can take quite long.
       
   213 
       
   214 * HOL/record: "record_upd_simproc" for simplification of multiple
       
   215   record updates enabled by default.  Moreover, trivial updates are
       
   216   also removed: r(|x := x r|) = r.  INCOMPATIBILITY: old proofs break
       
   217   occasionally, since simplification is more powerful by default.
       
   218 
       
   219 * HOL: symbolic syntax of Hilbert Choice Operator is now as follows:
       
   220 
       
   221   syntax (epsilon)
       
   222     "_Eps" :: "[pttrn, bool] => 'a"    ("(3\<some>_./ _)" [0, 10] 10)
       
   223 
       
   224   The symbol \<some> is displayed as the alternative epsilon of LaTeX
       
   225   and x-symbol; use option '-m epsilon' to get it actually printed.
       
   226   Moreover, the mathematically important symbolic identifier
       
   227   \<epsilon> becomes available as variable, constant etc.
       
   228 
       
   229 * HOL: "x > y" abbreviates "y < x" and "x >= y" abbreviates "y <= x".
       
   230   Similarly for all quantifiers: "ALL x > y" etc.
       
   231   The x-symbol for >= is \<ge>.
       
   232 
       
   233 * HOL/Set: "{x:A. P}" abbreviates "{x. x:A & P}"
       
   234            (and similarly for "\<in>" instead of ":")
       
   235 
       
   236 * HOL/SetInterval: The syntax for open intervals has changed:
       
   237 
       
   238   Old         New
       
   239   {..n(}   -> {..<n}
       
   240   {)n..}   -> {n<..}
       
   241   {m..n(}  -> {m..<n}
       
   242   {)m..n}  -> {m<..n}
       
   243   {)m..n(} -> {m<..<n}
       
   244 
       
   245   The old syntax is still supported but will disappear in the future.
       
   246   For conversion use the following emacs search and replace patterns:
       
   247 
       
   248   {)\([^\.]*\)\.\.  ->  {\1<\.\.}
       
   249   \.\.\([^(}]*\)(}  ->  \.\.<\1}
       
   250 
       
   251   They are not perfect but work quite well.
       
   252 
       
   253 * HOL: The syntax for 'setsum', summation over finite sets, has changed:
       
   254 
       
   255   The syntax for 'setsum (%x. e) A' used to be '\<Sum>x:A. e'
       
   256   and is now either 'SUM x:A. e' or '\<Sum>x\<in>A. e'.
       
   257 
       
   258   There is new syntax for summation over finite sets:
       
   259 
       
   260   '\<Sum>x | P. e'    is the same as  'setsum (%x. e) {x. P}'
       
   261   '\<Sum>x=a..b. e'   is the same as  'setsum (%x. e) {a..b}'
       
   262   '\<Sum>x=a..<b. e'  is the same as  'setsum (%x. e) {a..<b}'
       
   263   '\<Sum>x<k. e'      is the same as  'setsum (%x. e) {..<k}'
       
   264 
       
   265   Function 'Summation' over nat is gone, its syntax '\<Sum>i<k. e'
       
   266   now translates into 'setsum' as above.
       
   267 
       
   268 * HOL: Finite set induction: In Isar proofs, the insert case is now
       
   269   "case (insert x F)" instead of the old counterintuitive "case (insert F x)".
       
   270 
       
   271 * HOL/Simplifier:
       
   272 
       
   273   - Is now set up to reason about transitivity chains involving "trancl"
       
   274   (r^+) and "rtrancl" (r^*) by setting up tactics provided by
       
   275   Provers/trancl.ML as additional solvers.  INCOMPATIBILITY: old proofs break
       
   276   occasionally as simplification may now solve more goals than previously.
       
   277 
       
   278   - Converts x <= y into x = y if assumption y <= x is present.  Works for
       
   279   all partial orders (class "order"), in particular numbers and sets. For
       
   280   linear orders (e.g. numbers) it treats ~ x < y just like y <= x.
       
   281 
       
   282   - Simproc for "let x = a in f x"
       
   283   If a is a free or bound variable or a constant then the let is unfolded.
       
   284   Otherwise first a is simplified to a', and then f a' is simplified to
       
   285   g. If possible we abstract a' from g arriving at "let x = a' in g' x",
       
   286   otherwise we unfold the let and arrive at g. The simproc can be 
       
   287   enabled/disabled by the reference use_let_simproc. Potential
       
   288   INCOMPATIBILITY since simplification is more powerful by default.
       
   289  
       
   290 
       
   291 *** HOLCF ***
       
   292 
       
   293 * HOLCF: discontinued special version of 'constdefs' (which used to
       
   294   support continuous functions) in favor of the general Pure one with
       
   295   full type-inference.
       
   296 
       
   297 
       
   298 *** ZF ***
       
   299 
       
   300 * ZF/ex/{Group,Ring}: examples in abstract algebra, including the
       
   301   First Isomorphism Theorem (on quotienting by the kernel of a
       
   302   homomorphism).
       
   303 
       
   304 * ZF/Simplifier: install second copy of type solver that actually
       
   305   makes use of TC rules declared to Isar proof contexts (or locales);
       
   306   the old version is still required for ML proof scripts.
       
   307 
       
   308 
       
   309 *** System ***
       
   310 
       
   311 * HOL: isatool dimacs2hol converts files in DIMACS CNF format
       
   312   (containing Boolean satisfiability problems) into Isabelle/HOL
       
   313   theories.
       
   314 
       
   315 * isatool usedir: option -f allows specification of the ML file to be
       
   316   used by Isabelle; default is ROOT.ML.
       
   317 
       
   318 * ISABELLE_DOC_FORMAT setting specifies preferred document format (for
       
   319   isatool doc, isatool mkdir, display_drafts etc.).
       
   320 
       
   321 
       
   322 *** ML ***
       
   323 
       
   324 * Pure: output via the Isabelle channels of writeln/warning/error
   199   etc. is now passed through Output.output, with a hook for arbitrary
   325   etc. is now passed through Output.output, with a hook for arbitrary
   200   transformations depending on the print_mode (cf. Output.add_mode --
   326   transformations depending on the print_mode (cf. Output.add_mode --
   201   the first active mode that provides a output function wins).
   327   the first active mode that provides a output function wins).
   202   Already formatted output may be embedded into further text via
   328   Already formatted output may be embedded into further text via
   203   Output.raw; the result of Pretty.string_of/str_of and derived
   329   Output.raw; the result of Pretty.string_of/str_of and derived
   209   translations to produce properly formatted results; Output.raw is
   335   translations to produce properly formatted results; Output.raw is
   210   required when capturing already output material that will eventually
   336   required when capturing already output material that will eventually
   211   be presented to the user a second time.  For the default print mode,
   337   be presented to the user a second time.  For the default print mode,
   212   both Output.output and Output.raw have no effect.
   338   both Output.output and Output.raw have no effect.
   213 
   339 
   214 
   340 * Provers: Simplifier and Classical Reasoner now support proof context
   215 *** Isar ***
   341   dependent plug-ins (simprocs, solvers, wrappers etc.).  These extra
   216 
   342   components are stored in the theory and patched into the
   217 * Debugging: new reference Toplevel.debug; default false.
   343   simpset/claset when used in an Isar proof context.  Context
   218   Set to make printing of exceptions THM, TERM, TYPE and THEORY more verbose.
   344   dependent components are maintained by the following theory
   219   
   345   operations:
   220 * Locales:
   346 
   221   - "includes" disallowed in declaration of named locales (command "locale").
   347     Simplifier.add_context_simprocs
   222   - Fixed parameter management in theorem generation for goals with "includes".
   348     Simplifier.del_context_simprocs
   223     INCOMPATIBILITY: rarely, the generated theorem statement is different.
   349     Simplifier.set_context_subgoaler
   224 
   350     Simplifier.reset_context_subgoaler
   225 * Locales:  new commands for the interpretation of locale expressions
   351     Simplifier.add_context_looper
   226   in theories (interpretation) and proof contexts (interpret).  These take an
   352     Simplifier.del_context_looper
   227   instantiation of the locale parameters and compute proof obligations from
   353     Simplifier.add_context_unsafe_solver
   228   the instantiated specification.  After the obligations have been discharged,
   354     Simplifier.add_context_safe_solver
   229   the instantiated theorems of the locale are added to the theory or proof
   355 
   230   context.  Interpretation is smart in that already active interpretations
   356     Classical.add_context_safe_wrapper
   231   do not occur in proof obligations, neither are instantiated theorems stored
   357     Classical.del_context_safe_wrapper
   232   in duplicate.
   358     Classical.add_context_unsafe_wrapper
   233   Use print_interps to inspect active interpretations of a particular locale.
   359     Classical.del_context_unsafe_wrapper
   234 
   360 
   235 * New syntax
   361   IMPORTANT NOTE: proof tools (methods etc.) need to use
   236 
   362   local_simpset_of and local_claset_of to instead of the primitive
   237     <theorem_name> (<index>, ..., <index>-<index>, ...)
   363   Simplifier.get_local_simpset and Classical.get_local_claset,
   238 
   364   respectively, in order to see the context dependent fields!
   239   for referring to specific theorems in a named list of theorems via
       
   240   indices.
       
   241 
       
   242 *** HOL ***
       
   243 
       
   244 * Datatype induction via method `induct' now preserves the name of the
       
   245   induction variable. For example, when proving P(xs::'a list) by induction
       
   246   on xs, the induction step is now P(xs) ==> P(a#xs) rather than
       
   247   P(list) ==> P(a#list) as previously.
       
   248 
       
   249 * HOL/record: reimplementation of records. Improved scalability for
       
   250   records with many fields, avoiding performance problems for type
       
   251   inference. Records are no longer composed of nested field types, but
       
   252   of nested extension types. Therefore the record type only grows
       
   253   linear in the number of extensions and not in the number of fields.
       
   254   The top-level (users) view on records is preserved.  Potential
       
   255   INCOMPATIBILITY only in strange cases, where the theory depends on
       
   256   the old record representation. The type generated for a record is
       
   257   called <record_name>_ext_type.
       
   258 
       
   259 * HOL/record: Reference record_quick_and_dirty_sensitive can be
       
   260   enabled to skip the proofs triggered by a record definition or a
       
   261   simproc (if quick_and_dirty is enabled). Definitions of large
       
   262   records can take quite long.
       
   263 
       
   264 * HOL/record: "record_upd_simproc" for simplification of multiple
       
   265   record updates enabled by default.  Moreover, trivial updates are
       
   266   also removed: r(|x := x r|) = r.  INCOMPATIBILITY: old proofs break
       
   267   occasionally, since simplification is more powerful by default.
       
   268 
       
   269 * HOL: symbolic syntax of Hilbert Choice Operator is now as follows:
       
   270 
       
   271   syntax (epsilon)
       
   272     "_Eps" :: "[pttrn, bool] => 'a"    ("(3\<some>_./ _)" [0, 10] 10)
       
   273 
       
   274   The symbol \<some> is displayed as the alternative epsilon of LaTeX
       
   275   and x-symbol; use option '-m epsilon' to get it actually printed.
       
   276   Moreover, the mathematically important symbolic identifier
       
   277   \<epsilon> becomes available as variable, constant etc.
       
   278 
       
   279 * HOL: "x > y" abbreviates "y < x" and "x >= y" abbreviates "y <= x".
       
   280   Similarly for all quantifiers: "ALL x > y" etc.
       
   281   The x-symbol for >= is \<ge>.
       
   282 
       
   283 * HOL/Set: "{x:A. P}" abbreviates "{x. x:A & P}"
       
   284            (and similarly for "\<in>" instead of ":")
       
   285 
       
   286 * HOL/SetInterval: The syntax for open intervals has changed:
       
   287 
       
   288   Old         New
       
   289   {..n(}   -> {..<n}
       
   290   {)n..}   -> {n<..}
       
   291   {m..n(}  -> {m..<n}
       
   292   {)m..n}  -> {m<..n}
       
   293   {)m..n(} -> {m<..<n}
       
   294 
       
   295   The old syntax is still supported but will disappear in the future.
       
   296   For conversion use the following emacs search and replace patterns:
       
   297 
       
   298   {)\([^\.]*\)\.\.  ->  {\1<\.\.}
       
   299   \.\.\([^(}]*\)(}  ->  \.\.<\1}
       
   300 
       
   301   They are not perfect but work quite well.
       
   302 
       
   303 * HOL: The syntax for 'setsum', summation over finite sets, has changed:
       
   304 
       
   305   The syntax for 'setsum (%x. e) A' used to be '\<Sum>x:A. e'
       
   306   and is now either 'SUM x:A. e' or '\<Sum>x\<in>A. e'.
       
   307 
       
   308   There is new syntax for summation over finite sets:
       
   309 
       
   310   '\<Sum>x | P. e'    is the same as  'setsum (%x. e) {x. P}'
       
   311   '\<Sum>x=a..b. e'   is the same as  'setsum (%x. e) {a..b}'
       
   312   '\<Sum>x=a..<b. e'  is the same as  'setsum (%x. e) {a..<b}'
       
   313   '\<Sum>x<k. e'      is the same as  'setsum (%x. e) {..<k}'
       
   314 
       
   315   Function 'Summation' over nat is gone, its syntax '\<Sum>i<k. e'
       
   316   now translates into 'setsum' as above.
       
   317 
       
   318 * HOL: Finite set induction: In Isar proofs, the insert case is now
       
   319   "case (insert x F)" instead of the old counterintuitive "case (insert F x)".
       
   320 
       
   321 * HOL/Simplifier:
       
   322 
       
   323   - Is now set up to reason about transitivity chains involving "trancl"
       
   324   (r^+) and "rtrancl" (r^*) by setting up tactics provided by
       
   325   Provers/trancl.ML as additional solvers.  INCOMPATIBILITY: old proofs break
       
   326   occasionally as simplification may now solve more goals than previously.
       
   327 
       
   328   - Converts x <= y into x = y if assumption y <= x is present.  Works for
       
   329   all partial orders (class "order"), in particular numbers and sets. For
       
   330   linear orders (e.g. numbers) it treats ~ x < y just like y <= x.
       
   331 
       
   332   - Simproc for "let x = a in f x"
       
   333   If a is a free or bound variable or a constant then the let is unfolded.
       
   334   Otherwise first a is simplified to a', and then f a' is simplified to
       
   335   g. If possible we abstract a' from g arriving at "let x = a' in g' x",
       
   336   otherwise we unfold the let and arrive at g. The simproc can be 
       
   337   enabled/disabled by the reference use_let_simproc. Potential
       
   338   INCOMPATIBILITY since simplification is more powerful by default.
       
   339  
       
   340 * HOL: new 'isatool dimacs2hol' to convert files in DIMACS CNF format
       
   341   (containing Boolean satisfiability problems) into Isabelle/HOL theories.
       
   342 
       
   343 
       
   344 *** HOLCF ***
       
   345 
       
   346 * HOLCF: discontinued special version of 'constdefs' (which used to
       
   347   support continuous functions) in favor of the general Pure one with
       
   348   full type-inference.
       
   349 
       
   350 
       
   351 *** ZF ***
       
   352 
       
   353 * ZF/ex/{Group,Ring}: examples in abstract algebra, including the
       
   354   First Isomorphism Theorem (on quotienting by the kernel of a
       
   355   homomorphism).
       
   356 
       
   357 * ZF/Simplifier: install second copy of type solver that actually
       
   358   makes use of TC rules declared to Isar proof contexts (or locales);
       
   359   the old version is still required for ML proof scripts.
       
   360 
   365 
   361 
   366 
   362 
   367 
   363 New in Isabelle2004 (April 2004)
   368 New in Isabelle2004 (April 2004)
   364 --------------------------------
   369 --------------------------------