NEWS
author wenzelm
Sat, 27 Jul 2013 21:43:12 +0200
changeset 53880 a7d69a11f395
parent 53790 0589394aaaa5
child 53882 821ce370b7fc
permissions -rw-r--r--
discontinued ISABELLE_DOC_FORMAT;
     1 Isabelle NEWS -- history user-relevant changes
     2 ==============================================
     3 
     4 New in this Isabelle version
     5 ----------------------------
     6 
     7 *** General ***
     8 
     9 * Uniform management of "quick_and_dirty" as system option (see also
    10 "isabelle options"), configuration option within the context (see also
    11 Config.get in Isabelle/ML), and attribute in Isabelle/Isar.  Minor
    12 INCOMPATIBILITY, need to use more official Isabelle means to access
    13 quick_and_dirty, instead of historical poking into mutable reference.
    14 
    15 * Renamed command 'print_configs' to 'print_options'.  Minor
    16 INCOMPATIBILITY.
    17 
    18 * Sessions may be organized via 'chapter' specifications in the ROOT
    19 file, which determines a two-level hierarchy of browser info.  The old
    20 tree-like organization via implicit sub-session relation, with its
    21 tendency towards erratic fluctuation of URLs, has been discontinued.
    22 The default chapter is "Unsorted".  Potential INCOMPATIBILITY for HTML
    23 presentation of theories.
    24 
    25 * Discontinued obsolete 'uses' within theory header.  Note that
    26 commands like 'ML_file' work without separate declaration of file
    27 dependencies.  Minor INCOMPATIBILITY.
    28 
    29 * Discontinued redundant 'use' command, which was superseded by
    30 'ML_file' in Isabelle2013.  Minor INCOMPATIBILITY.
    31 
    32 * Updated and extended "isar-ref" and "implementation" manual,
    33 eliminated old "ref" manual.
    34 
    35 * Proper diagnostic command 'print_state'.  Old 'pr' (with its
    36 implicit change of some global references) is retained for now as
    37 control command, e.g. for ProofGeneral 3.7.x.
    38 
    39 * Discontinued 'print_drafts' command with its old-fashioned PS output
    40 and Unix command-line print spooling.  Minor INCOMPATIBILITY: use
    41 'display_drafts' instead and print via the regular document viewer.
    42 
    43 
    44 *** Prover IDE -- Isabelle/Scala/jEdit ***
    45 
    46 * Strictly monotonic document update, without premature cancelation of
    47 running transactions that are still needed: avoid reset/restart of
    48 such command executions while editing.
    49 
    50 * Support for asynchronous print functions, as overlay to existing
    51 document content.
    52 
    53 * Support for automatic tools in HOL, which try to prove or disprove
    54 toplevel theorem statements.
    55 
    56 * Dockable window "Documentation" provides access to Isabelle
    57 documentation.
    58 
    59 * Dockable window "Timing" provides an overview of relevant command
    60 timing information.
    61 
    62 * Option to skip over proofs, using implicit 'sorry' internally.
    63 
    64 
    65 *** Pure ***
    66 
    67 * System option "proofs" has been discontinued.  Instead the global
    68 state of Proofterm.proofs is persistently compiled into logic images
    69 as required, notably HOL-Proofs.  Users no longer need to change
    70 Proofterm.proofs dynamically.  Minor INCOMPATIBILITY.
    71 
    72 * Syntax translation functions (print_translation etc.) always depend
    73 on Proof.context.  Discontinued former "(advanced)" option -- this is
    74 now the default.  Minor INCOMPATIBILITY.
    75 
    76 * Target-sensitive commands 'interpretation' and 'sublocale'.
    77 Particulary, 'interpretation' now allows for non-persistent
    78 interpretation within "context ... begin ... end" blocks.
    79 See "isar-ref" manual for details.
    80 
    81 * Improved locales diagnostic command 'print_dependencies'.
    82 
    83 * Discontinued obsolete 'axioms' command, which has been marked as
    84 legacy since Isabelle2009-2.  INCOMPATIBILITY, use 'axiomatization'
    85 instead, while observing its uniform scope for polymorphism.
    86 
    87 * Discontinued empty name bindings in 'axiomatization'.
    88 INCOMPATIBILITY.
    89 
    90 * SELECT_GOAL now retains the syntactic context of the overall goal
    91 state (schematic variables etc.).  Potential INCOMPATIBILITY in rare
    92 situations.
    93 
    94 
    95 *** HOL ***
    96 
    97 * Attibute 'code': 'code' now declares concrete and abstract code equations uniformly.
    98 Use explicit 'code equation' and 'code abstract' to distinguish both when desired.
    99 
   100 * Code generator:
   101   * 'code_printing' unifies 'code_const' / 'code_type' / 'code_class' / 'code_instance'.
   102   * 'code_identifier' declares name hints for arbitrary identifiers in generated code,
   103     subsuming 'code_modulename'.
   104   See the Isar reference manual for syntax diagrams, and the HOL theories for examples.
   105 
   106 * Library/Polynomial.thy:
   107   * Use lifting for primitive definitions.
   108   * Explicit conversions from and to lists of coefficients, used for generated code.
   109   * Replaced recursion operator poly_rec by fold_coeffs.
   110   * Prefer pre-existing gcd operation for gcd.
   111   * Fact renames:
   112     poly_eq_iff ~> poly_eq_poly_eq_iff
   113     poly_ext ~> poly_eqI
   114     expand_poly_eq ~> poly_eq_iff
   115 IMCOMPATIBILTIY.
   116 
   117 * Reification and reflection:
   118   * Reification is now directly available in HOL-Main in structure "Reification".
   119   * Reflection now handles multiple lists with variables also.
   120   * The whole reflection stack has been decomposed into conversions.
   121 INCOMPATIBILITY.
   122 
   123 * Weaker precendence of syntax for big intersection and union on sets,
   124 in accordance with corresponding lattice operations.  INCOMPATIBILITY.
   125 
   126 * Nested case expressions are now translated in a separate check
   127   phase rather than during parsing. The data for case combinators
   128   is separated from the datatype package. The declaration attribute
   129   "case_translation" can be used to register new case combinators:
   130 
   131   declare [[case_translation case_combinator constructor1 ... constructorN]]
   132 
   133 * Notation "{p:A. P}" now allows tuple patterns as well.
   134 
   135 * Revised devices for recursive definitions over finite sets:
   136   - Only one fundamental fold combinator on finite set remains:
   137     Finite_Set.fold :: ('a => 'b => 'b) => 'b => 'a set => 'b
   138     This is now identity on infinite sets.
   139   - Locales (»mini packages«) for fundamental definitions with
   140     Finite_Set.fold: folding, folding_idem.
   141   - Locales comm_monoid_set, semilattice_order_set and
   142     semilattice_neutr_order_set for big operators on sets.
   143     See theory Big_Operators for canonical examples.
   144     Note that foundational constants comm_monoid_set.F and
   145     semilattice_set.F correspond to former combinators fold_image
   146     and fold1 respectively.  These are now gone.  You may use
   147     those foundational constants as substitutes, but it is
   148     preferable to interpret the above locales accordingly. 
   149   - Dropped class ab_semigroup_idem_mult (special case of lattice,
   150     no longer needed in connection with Finite_Set.fold etc.)
   151   - Fact renames:
   152       card.union_inter ~> card_Un_Int [symmetric]
   153       card.union_disjoint ~> card_Un_disjoint
   154 
   155 INCOMPATIBILITY.
   156 
   157 * Locale hierarchy for abstract orderings and (semi)lattices.
   158 
   159 * Discontinued theory src/HOL/Library/Eval_Witness.
   160 INCOMPATIBILITY.
   161 
   162 * Discontinued obsolete src/HOL/IsaMakefile (considered legacy since
   163 Isabelle2013).  Use "isabelle build" to operate on Isabelle sessions.
   164 
   165 * Numeric types mapped by default to target language numerals:
   166 natural (replaces former code_numeral) and integer (replaces
   167 former code_int).  Conversions are available as integer_of_natural /
   168 natural_of_integer / integer_of_nat / nat_of_integer (in HOL) and
   169 Code_Numeral.integer_of_natural / Code_Numeral.natural_of_integer (in ML).
   170 INCOMPATIBILITY.
   171 
   172 * Discontinued theories Code_Integer and Efficient_Nat by a more
   173 fine-grain stack of theories Code_Target_Int, Code_Binary_Nat,
   174 Code_Target_Nat and Code_Target_Numeral.  See the tutorial on
   175 code generation for details.  INCOMPATIBILITY.
   176 
   177 * Introduce type class "conditionally_complete_lattice": Like a complete
   178   lattice but does not assume the existence of the top and bottom elements.
   179   Allows to generalize some lemmas about reals and extended reals.
   180   Removed SupInf and replaced it by the instantiation of
   181   conditionally_complete_lattice for real. Renamed lemmas about
   182   conditionally-complete lattice from Sup_... to cSup_... and from Inf_...
   183   to cInf_... to avoid hidding of similar complete lattice lemmas.
   184 
   185   Introduce type class linear_continuum as combination of conditionally-complete
   186   lattices and inner dense linorders which have more than one element.
   187 INCOMPATIBILITY.
   188 
   189 * Introduce type classes "no_top" and "no_bot" for orderings without top
   190   and bottom elements.
   191 
   192 * Split dense_linorder into inner_dense_order and no_top, no_bot.
   193 
   194 * Complex_Main: Unify and move various concepts from
   195   HOL-Multivariate_Analysis to HOL-Complex_Main.
   196 
   197  - Introduce type class (lin)order_topology and linear_continuum_topology.
   198    Allows to generalize theorems about limits and order.
   199    Instances are reals and extended reals.
   200 
   201  - continuous and continuos_on from Multivariate_Analysis:
   202    "continuous" is the continuity of a function at a filter.
   203    "isCont" is now an abbrevitation: "isCont x f == continuous (at _) f".
   204 
   205    Generalized continuity lemmas from isCont to continuous on an arbitrary
   206    filter.
   207 
   208  - compact from Multivariate_Analysis. Use Bolzano's lemma
   209    to prove compactness of closed intervals on reals. Continuous functions
   210    attain infimum and supremum on compact sets. The inverse of a continuous
   211    function is continuous, when the function is continuous on a compact set.
   212 
   213  - connected from Multivariate_Analysis. Use it to prove the
   214    intermediate value theorem. Show connectedness of intervals on
   215    linear_continuum_topology).
   216 
   217  - first_countable_topology from Multivariate_Analysis. Is used to
   218    show equivalence of properties on the neighbourhood filter of x and on
   219    all sequences converging to x.
   220 
   221  - FDERIV: Definition of has_derivative moved to Deriv.thy. Moved theorems
   222    from Library/FDERIV.thy to Deriv.thy and base the definition of DERIV on
   223    FDERIV. Add variants of DERIV and FDERIV which are restricted to sets,
   224    i.e. to represent derivatives from left or right.
   225 
   226  - Removed the within-filter. It is replaced by the principal filter:
   227 
   228      F within X = inf F (principal X)
   229 
   230  - Introduce "at x within U" as a single constant, "at x" is now an
   231    abbreviation for "at x within UNIV"
   232 
   233  - Introduce named theorem collections tendsto_intros, continuous_intros,
   234    continuous_on_intros and FDERIV_intros. Theorems in tendsto_intros (or
   235    FDERIV_intros) are also available as tendsto_eq_intros (or
   236    FDERIV_eq_intros) where the right-hand side is replaced by a congruence
   237    rule. This allows to apply them as intro rules and then proving
   238    equivalence by the simplifier.
   239 
   240  - Restructured theories in HOL-Complex_Main:
   241 
   242    + Moved RealDef and RComplete into Real
   243 
   244    + Introduced Topological_Spaces and moved theorems about
   245      topological spaces, filters, limits and continuity to it
   246 
   247    + Renamed RealVector to Real_Vector_Spaces
   248 
   249    + Split Lim, SEQ, Series into Topological_Spaces, Real_Vector_Spaces, and
   250      Limits
   251 
   252    + Moved Ln and Log to Transcendental
   253 
   254    + Moved theorems about continuity from Deriv to Topological_Spaces
   255 
   256  - Remove various auxiliary lemmas.
   257 
   258 INCOMPATIBILITY.
   259 
   260 * Consolidation of library theories on product orders:
   261 
   262     Product_Lattice ~> Product_Order -- pointwise order on products
   263     Product_ord ~> Product_Lexorder -- lexicographic order on products
   264 
   265 INCOMPATIBILITY.
   266 
   267 * Sledgehammer:
   268 
   269   - Renamed option:
   270       isar_shrink ~> isar_compress
   271 
   272 * HOL-Spec_Check: a Quickcheck tool for Isabelle's ML environment.
   273   
   274   With HOL-Spec_Check, ML developers can check specifications with the
   275   ML function check_property. The specifications must be of the form
   276   "ALL x1 ... xn. Prop x1 ... xn". Simple examples are in
   277   src/HOL/Spec_Check/Examples.thy.
   278 
   279 
   280 *** HOL-Algebra ***
   281 
   282 * Discontinued theories src/HOL/Algebra/abstract and .../poly.
   283 Existing theories should be based on src/HOL/Library/Polynomial
   284 instead.  The latter provides integration with HOL's type classes for
   285 rings.  INCOMPATIBILITY.
   286 
   287 
   288 *** ML ***
   289 
   290 * More uniform naming of goal functions for skipped proofs:
   291 
   292     Skip_Proof.prove  ~>  Goal.prove_sorry
   293     Skip_Proof.prove_global  ~>  Goal.prove_sorry_global
   294 
   295 * Antiquotation @{theory_context A} is similar to @{theory A}, but
   296 presents the result as initial Proof.context.
   297 
   298 * Modifiers for classical wrappers (e.g. addWrapper, delWrapper)
   299 operate on Proof.context instead of claset, for uniformity with addIs,
   300 addEs, addDs etc. Note that claset_of and put_claset allow to manage
   301 clasets separately from the context.
   302 
   303 * Simplifier tactics and tools use proper Proof.context instead of
   304 historic type simpset.  Old-style declarations like addsimps,
   305 addsimprocs etc. operate directly on Proof.context.  Raw type simpset
   306 retains its use as snapshot of the main Simplifier context, using
   307 simpset_of and put_simpset on Proof.context.  INCOMPATIBILITY -- port
   308 old tools by making them depend on (ctxt : Proof.context) instead of
   309 (ss : simpset), then turn (simpset_of ctxt) into ctxt.
   310 
   311 * Discontinued obsolete ML antiquotations @{claset} and @{simpset}.
   312 INCOMPATIBILITY, use @{context} instead.
   313 
   314 
   315 *** System ***
   316 
   317 * Discontinued obsolete isabelle usedir, mkdir, make -- superseded by
   318 "isabelle build" in Isabelle2013.  INCOMPATIBILITY.
   319 
   320 * Discontinued obsolete isabelle-process options -f and -u (former
   321 administrative aliases of option -e).  Minor INCOMPATIBILITY.
   322 
   323 * Discontinued obsolete isabelle print tool, and PRINT_COMMAND
   324 settings variable.
   325 
   326 * Discontinued ISABELLE_DOC_FORMAT settings variable -- the preferred
   327 document format is always pdf.
   328 
   329 * Isabelle settings variable ISABELLE_BUILD_JAVA_OPTIONS allows to
   330 specify global resources of the JVM process run by isabelle build.
   331 
   332 * Toplevel executable $ISABELLE_HOME/bin/isabelle_scala_script allows
   333 to run Isabelle/Scala source files as standalone programs.
   334 
   335 * Improved "isabelle keywords" tool (for old-style ProofGeneral
   336 keyword tables): use Isabelle/Scala operations, which inspect outer
   337 syntax without requiring to build sessions first.
   338 
   339 
   340 
   341 New in Isabelle2013 (February 2013)
   342 -----------------------------------
   343 
   344 *** General ***
   345 
   346 * Theorem status about oracles and unfinished/failed future proofs is
   347 no longer printed by default, since it is incompatible with
   348 incremental / parallel checking of the persistent document model.  ML
   349 function Thm.peek_status may be used to inspect a snapshot of the
   350 ongoing evaluation process.  Note that in batch mode --- notably
   351 isabelle build --- the system ensures that future proofs of all
   352 accessible theorems in the theory context are finished (as before).
   353 
   354 * Configuration option show_markup controls direct inlining of markup
   355 into the printed representation of formal entities --- notably type
   356 and sort constraints.  This enables Prover IDE users to retrieve that
   357 information via tooltips in the output window, for example.
   358 
   359 * Command 'ML_file' evaluates ML text from a file directly within the
   360 theory, without any predeclaration via 'uses' in the theory header.
   361 
   362 * Old command 'use' command and corresponding keyword 'uses' in the
   363 theory header are legacy features and will be discontinued soon.
   364 Tools that load their additional source files may imitate the
   365 'ML_file' implementation, such that the system can take care of
   366 dependencies properly.
   367 
   368 * Discontinued obsolete method fastsimp / tactic fast_simp_tac, which
   369 is called fastforce / fast_force_tac already since Isabelle2011-1.
   370 
   371 * Updated and extended "isar-ref" and "implementation" manual, reduced
   372 remaining material in old "ref" manual.
   373 
   374 * Improved support for auxiliary contexts that indicate block structure
   375 for specifications.  Nesting of "context fixes ... context assumes ..."
   376 and "class ... context ...".
   377 
   378 * Attribute "consumes" allows a negative value as well, which is
   379 interpreted relatively to the total number of premises of the rule in
   380 the target context.  This form of declaration is stable when exported
   381 from a nested 'context' with additional assumptions.  It is the
   382 preferred form for definitional packages, notably cases/rules produced
   383 in HOL/inductive and HOL/function.
   384 
   385 * More informative error messages for Isar proof commands involving
   386 lazy enumerations (method applications etc.).
   387 
   388 * Refined 'help' command to retrieve outer syntax commands according
   389 to name patterns (with clickable results).
   390 
   391 
   392 *** Prover IDE -- Isabelle/Scala/jEdit ***
   393 
   394 * Parallel terminal proofs ('by') are enabled by default, likewise
   395 proofs that are built into packages like 'datatype', 'function'.  This
   396 allows to "run ahead" checking the theory specifications on the
   397 surface, while the prover is still crunching on internal
   398 justifications.  Unfinished / cancelled proofs are restarted as
   399 required to complete full proof checking eventually.
   400 
   401 * Improved output panel with tooltips, hyperlinks etc. based on the
   402 same Rich_Text_Area as regular Isabelle/jEdit buffers.  Activation of
   403 tooltips leads to some window that supports the same recursively,
   404 which can lead to stacks of tooltips as the semantic document content
   405 is explored.  ESCAPE closes the whole stack, individual windows may be
   406 closed separately, or detached to become independent jEdit dockables.
   407 
   408 * Improved support for commands that produce graph output: the text
   409 message contains a clickable area to open a new instance of the graph
   410 browser on demand.
   411 
   412 * More robust incremental parsing of outer syntax (partial comments,
   413 malformed symbols).  Changing the balance of open/close quotes and
   414 comment delimiters works more conveniently with unfinished situations
   415 that frequently occur in user interaction.
   416 
   417 * More efficient painting and improved reactivity when editing large
   418 files.  More scalable management of formal document content.
   419 
   420 * Smarter handling of tracing messages: prover process pauses after
   421 certain number of messages per command transaction, with some user
   422 dialog to stop or continue.  This avoids swamping the front-end with
   423 potentially infinite message streams.
   424 
   425 * More plugin options and preferences, based on Isabelle/Scala.  The
   426 jEdit plugin option panel provides access to some Isabelle/Scala
   427 options, including tuning parameters for editor reactivity and color
   428 schemes.
   429 
   430 * Dockable window "Symbols" provides some editing support for Isabelle
   431 symbols.
   432 
   433 * Dockable window "Monitor" shows ML runtime statistics.  Note that
   434 continuous display of the chart slows down the system.
   435 
   436 * Improved editing support for control styles: subscript, superscript,
   437 bold, reset of style -- operating on single symbols or text
   438 selections.  Cf. keyboard shortcuts C+e DOWN/UP/RIGHT/LEFT.
   439 
   440 * Actions isabelle.increase-font-size and isabelle.decrease-font-size
   441 adjust the main text area font size, and its derivatives for output,
   442 tooltips etc.  Cf. keyboard shortcuts C-PLUS and C-MINUS, which often
   443 need to be adapted to local keyboard layouts.
   444 
   445 * More reactive completion popup by default: use \t (TAB) instead of
   446 \n (NEWLINE) to minimize intrusion into regular flow of editing.  See
   447 also "Plugin Options / SideKick / General / Code Completion Options".
   448 
   449 * Implicit check and build dialog of the specified logic session
   450 image.  For example, HOL, HOLCF, HOL-Nominal can be produced on
   451 demand, without bundling big platform-dependent heap images in the
   452 Isabelle distribution.
   453 
   454 * Uniform Java 7 platform on Linux, Mac OS X, Windows: recent updates
   455 from Oracle provide better multi-platform experience.  This version is
   456 now bundled exclusively with Isabelle.
   457 
   458 
   459 *** Pure ***
   460 
   461 * Code generation for Haskell: restrict unqualified imports from
   462 Haskell Prelude to a small set of fundamental operations.
   463 
   464 * Command 'export_code': relative file names are interpreted
   465 relatively to master directory of current theory rather than the
   466 rather arbitrary current working directory.  INCOMPATIBILITY.
   467 
   468 * Discontinued obsolete attribute "COMP".  Potential INCOMPATIBILITY,
   469 use regular rule composition via "OF" / "THEN", or explicit proof
   470 structure instead.  Note that Isabelle/ML provides a variety of
   471 operators like COMP, INCR_COMP, COMP_INCR, which need to be applied
   472 with some care where this is really required.
   473 
   474 * Command 'typ' supports an additional variant with explicit sort
   475 constraint, to infer and check the most general type conforming to a
   476 given sort.  Example (in HOL):
   477 
   478   typ "_ * _ * bool * unit" :: finite
   479 
   480 * Command 'locale_deps' visualizes all locales and their relations as
   481 a Hasse diagram.
   482 
   483 
   484 *** HOL ***
   485 
   486 * Sledgehammer:
   487 
   488   - Added MaSh relevance filter based on machine-learning; see the
   489     Sledgehammer manual for details.
   490   - Polished Isar proofs generated with "isar_proofs" option.
   491   - Rationalized type encodings ("type_enc" option).
   492   - Renamed "kill_provers" subcommand to "kill_all".
   493   - Renamed options:
   494       isar_proof ~> isar_proofs
   495       isar_shrink_factor ~> isar_shrink
   496       max_relevant ~> max_facts
   497       relevance_thresholds ~> fact_thresholds
   498 
   499 * Quickcheck: added an optimisation for equality premises.  It is
   500 switched on by default, and can be switched off by setting the
   501 configuration quickcheck_optimise_equality to false.
   502 
   503 * Quotient: only one quotient can be defined by quotient_type
   504 INCOMPATIBILITY.
   505 
   506 * Lifting:
   507   - generation of an abstraction function equation in lift_definition
   508   - quot_del attribute
   509   - renamed no_abs_code -> no_code (INCOMPATIBILITY.)
   510 
   511 * Simproc "finite_Collect" rewrites set comprehensions into pointfree
   512 expressions.
   513 
   514 * Preprocessing of the code generator rewrites set comprehensions into
   515 pointfree expressions.
   516 
   517 * The SMT solver Z3 has now by default a restricted set of directly
   518 supported features. For the full set of features (div/mod, nonlinear
   519 arithmetic, datatypes/records) with potential proof reconstruction
   520 failures, enable the configuration option "z3_with_extensions".  Minor
   521 INCOMPATIBILITY.
   522 
   523 * Simplified 'typedef' specifications: historical options for implicit
   524 set definition and alternative name have been discontinued.  The
   525 former behavior of "typedef (open) t = A" is now the default, but
   526 written just "typedef t = A".  INCOMPATIBILITY, need to adapt theories
   527 accordingly.
   528 
   529 * Removed constant "chars"; prefer "Enum.enum" on type "char"
   530 directly.  INCOMPATIBILITY.
   531 
   532 * Moved operation product, sublists and n_lists from theory Enum to
   533 List.  INCOMPATIBILITY.
   534 
   535 * Theorem UN_o generalized to SUP_comp.  INCOMPATIBILITY.
   536 
   537 * Class "comm_monoid_diff" formalises properties of bounded
   538 subtraction, with natural numbers and multisets as typical instances.
   539 
   540 * Added combinator "Option.these" with type "'a option set => 'a set".
   541 
   542 * Theory "Transitive_Closure": renamed lemmas
   543 
   544   reflcl_tranclp -> reflclp_tranclp
   545   rtranclp_reflcl -> rtranclp_reflclp
   546 
   547 INCOMPATIBILITY.
   548 
   549 * Theory "Rings": renamed lemmas (in class semiring)
   550 
   551   left_distrib ~> distrib_right
   552   right_distrib ~> distrib_left
   553 
   554 INCOMPATIBILITY.
   555 
   556 * Generalized the definition of limits:
   557 
   558   - Introduced the predicate filterlim (LIM x F. f x :> G) which
   559     expresses that when the input values x converge to F then the
   560     output f x converges to G.
   561 
   562   - Added filters for convergence to positive (at_top) and negative
   563     infinity (at_bot).
   564 
   565   - Moved infinity in the norm (at_infinity) from
   566     Multivariate_Analysis to Complex_Main.
   567 
   568   - Removed real_tendsto_inf, it is superseded by "LIM x F. f x :>
   569     at_top".
   570 
   571 INCOMPATIBILITY.
   572 
   573 * Theory "Library/Option_ord" provides instantiation of option type to
   574 lattice type classes.
   575 
   576 * Theory "Library/Multiset": renamed
   577 
   578     constant fold_mset ~> Multiset.fold
   579     fact fold_mset_commute ~> fold_mset_comm
   580 
   581 INCOMPATIBILITY.
   582 
   583 * Renamed theory Library/List_Prefix to Library/Sublist, with related
   584 changes as follows.
   585 
   586   - Renamed constants (and related lemmas)
   587 
   588       prefix ~> prefixeq
   589       strict_prefix ~> prefix
   590 
   591   - Replaced constant "postfix" by "suffixeq" with swapped argument
   592     order (i.e., "postfix xs ys" is now "suffixeq ys xs") and dropped
   593     old infix syntax "xs >>= ys"; use "suffixeq ys xs" instead.
   594     Renamed lemmas accordingly.
   595 
   596   - Added constant "list_hembeq" for homeomorphic embedding on
   597     lists. Added abbreviation "sublisteq" for special case
   598     "list_hembeq (op =)".
   599 
   600   - Theory Library/Sublist no longer provides "order" and "bot" type
   601     class instances for the prefix order (merely corresponding locale
   602     interpretations). The type class instances are now in theory
   603     Library/Prefix_Order.
   604 
   605   - The sublist relation of theory Library/Sublist_Order is now based
   606     on "Sublist.sublisteq".  Renamed lemmas accordingly:
   607 
   608       le_list_append_le_same_iff ~> Sublist.sublisteq_append_le_same_iff
   609       le_list_append_mono ~> Sublist.list_hembeq_append_mono
   610       le_list_below_empty ~> Sublist.list_hembeq_Nil, Sublist.list_hembeq_Nil2
   611       le_list_Cons_EX ~> Sublist.list_hembeq_ConsD
   612       le_list_drop_Cons2 ~> Sublist.sublisteq_Cons2'
   613       le_list_drop_Cons_neq ~> Sublist.sublisteq_Cons2_neq
   614       le_list_drop_Cons ~> Sublist.sublisteq_Cons'
   615       le_list_drop_many ~> Sublist.sublisteq_drop_many
   616       le_list_filter_left ~> Sublist.sublisteq_filter_left
   617       le_list_rev_drop_many ~> Sublist.sublisteq_rev_drop_many
   618       le_list_rev_take_iff ~> Sublist.sublisteq_append
   619       le_list_same_length ~> Sublist.sublisteq_same_length
   620       le_list_take_many_iff ~> Sublist.sublisteq_append'
   621       less_eq_list.drop ~> less_eq_list_drop
   622       less_eq_list.induct ~> less_eq_list_induct
   623       not_le_list_length ~> Sublist.not_sublisteq_length
   624 
   625 INCOMPATIBILITY.
   626 
   627 * New theory Library/Countable_Set.
   628 
   629 * Theory Library/Debug and Library/Parallel provide debugging and
   630 parallel execution for code generated towards Isabelle/ML.
   631 
   632 * Theory Library/FuncSet: Extended support for Pi and extensional and
   633 introduce the extensional dependent function space "PiE". Replaced
   634 extensional_funcset by an abbreviation, and renamed lemmas from
   635 extensional_funcset to PiE as follows:
   636 
   637   extensional_empty  ~>  PiE_empty
   638   extensional_funcset_empty_domain  ~>  PiE_empty_domain
   639   extensional_funcset_empty_range  ~>  PiE_empty_range
   640   extensional_funcset_arb  ~>  PiE_arb
   641   extensional_funcset_mem  ~>  PiE_mem
   642   extensional_funcset_extend_domainI  ~>  PiE_fun_upd
   643   extensional_funcset_restrict_domain  ~>  fun_upd_in_PiE
   644   extensional_funcset_extend_domain_eq  ~>  PiE_insert_eq
   645   card_extensional_funcset  ~>  card_PiE
   646   finite_extensional_funcset  ~>  finite_PiE
   647 
   648 INCOMPATIBILITY.
   649 
   650 * Theory Library/FinFun: theory of almost everywhere constant
   651 functions (supersedes the AFP entry "Code Generation for Functions as
   652 Data").
   653 
   654 * Theory Library/Phantom: generic phantom type to make a type
   655 parameter appear in a constant's type.  This alternative to adding
   656 TYPE('a) as another parameter avoids unnecessary closures in generated
   657 code.
   658 
   659 * Theory Library/RBT_Impl: efficient construction of red-black trees
   660 from sorted associative lists. Merging two trees with rbt_union may
   661 return a structurally different tree than before.  Potential
   662 INCOMPATIBILITY.
   663 
   664 * Theory Library/IArray: immutable arrays with code generation.
   665 
   666 * Theory Library/Finite_Lattice: theory of finite lattices.
   667 
   668 * HOL/Multivariate_Analysis: replaced
   669 
   670   "basis :: 'a::euclidean_space => nat => real"
   671   "\<Chi>\<Chi> :: (nat => real) => 'a::euclidean_space"
   672 
   673 on euclidean spaces by using the inner product "_ \<bullet> _" with
   674 vectors from the Basis set: "\<Chi>\<Chi> i. f i" is superseded by
   675 "SUM i : Basis. f i * r i".
   676 
   677   With this change the following constants are also changed or removed:
   678 
   679     DIM('a) :: nat  ~>  card (Basis :: 'a set)   (is an abbreviation)
   680     a $$ i  ~>  inner a i  (where i : Basis)
   681     cart_base i  removed
   682     \<pi>, \<pi>'  removed
   683 
   684   Theorems about these constants where removed.
   685 
   686   Renamed lemmas:
   687 
   688     component_le_norm  ~>  Basis_le_norm
   689     euclidean_eq  ~>  euclidean_eq_iff
   690     differential_zero_maxmin_component  ~>  differential_zero_maxmin_cart
   691     euclidean_simps  ~>  inner_simps
   692     independent_basis  ~>  independent_Basis
   693     span_basis  ~>  span_Basis
   694     in_span_basis  ~>  in_span_Basis
   695     norm_bound_component_le  ~>  norm_boound_Basis_le
   696     norm_bound_component_lt  ~>  norm_boound_Basis_lt
   697     component_le_infnorm  ~>  Basis_le_infnorm
   698 
   699 INCOMPATIBILITY.
   700 
   701 * HOL/Probability:
   702 
   703   - Added simproc "measurable" to automatically prove measurability.
   704 
   705   - Added induction rules for sigma sets with disjoint union
   706     (sigma_sets_induct_disjoint) and for Borel-measurable functions
   707     (borel_measurable_induct).
   708 
   709   - Added the Daniell-Kolmogorov theorem (the existence the limit of a
   710     projective family).
   711 
   712 * HOL/Cardinals: Theories of ordinals and cardinals (supersedes the
   713 AFP entry "Ordinals_and_Cardinals").
   714 
   715 * HOL/BNF: New (co)datatype package based on bounded natural functors
   716 with support for mixed, nested recursion and interesting non-free
   717 datatypes.
   718 
   719 * HOL/Finite_Set and Relation: added new set and relation operations
   720 expressed by Finite_Set.fold.
   721 
   722 * New theory HOL/Library/RBT_Set: implementation of sets by red-black
   723 trees for the code generator.
   724 
   725 * HOL/Library/RBT and HOL/Library/Mapping have been converted to
   726 Lifting/Transfer.
   727 possible INCOMPATIBILITY.
   728 
   729 * HOL/Set: renamed Set.project -> Set.filter
   730 INCOMPATIBILITY.
   731 
   732 
   733 *** Document preparation ***
   734 
   735 * Dropped legacy antiquotations "term_style" and "thm_style", since
   736 styles may be given as arguments to "term" and "thm" already.
   737 Discontinued legacy styles "prem1" .. "prem19".
   738 
   739 * Default LaTeX rendering for \<euro> is now based on eurosym package,
   740 instead of slightly exotic babel/greek.
   741 
   742 * Document variant NAME may use different LaTeX entry point
   743 document/root_NAME.tex if that file exists, instead of the common
   744 document/root.tex.
   745 
   746 * Simplified custom document/build script, instead of old-style
   747 document/IsaMakefile.  Minor INCOMPATIBILITY.
   748 
   749 
   750 *** ML ***
   751 
   752 * The default limit for maximum number of worker threads is now 8,
   753 instead of 4, in correspondence to capabilities of contemporary
   754 hardware and Poly/ML runtime system.
   755 
   756 * Type Seq.results and related operations support embedded error
   757 messages within lazy enumerations, and thus allow to provide
   758 informative errors in the absence of any usable results.
   759 
   760 * Renamed Position.str_of to Position.here to emphasize that this is a
   761 formal device to inline positions into message text, but not
   762 necessarily printing visible text.
   763 
   764 
   765 *** System ***
   766 
   767 * Advanced support for Isabelle sessions and build management, see
   768 "system" manual for the chapter of that name, especially the "isabelle
   769 build" tool and its examples.  The "isabelle mkroot" tool prepares
   770 session root directories for use with "isabelle build", similar to
   771 former "isabelle mkdir" for "isabelle usedir".  Note that this affects
   772 document preparation as well.  INCOMPATIBILITY, isabelle usedir /
   773 mkdir / make are rendered obsolete.
   774 
   775 * Discontinued obsolete Isabelle/build script, it is superseded by the
   776 regular isabelle build tool.  For example:
   777 
   778   isabelle build -s -b HOL
   779 
   780 * Discontinued obsolete "isabelle makeall".
   781 
   782 * Discontinued obsolete IsaMakefile and ROOT.ML files from the
   783 Isabelle distribution, except for rudimentary src/HOL/IsaMakefile that
   784 provides some traditional targets that invoke "isabelle build".  Note
   785 that this is inefficient!  Applications of Isabelle/HOL involving
   786 "isabelle make" should be upgraded to use "isabelle build" directly.
   787 
   788 * The "isabelle options" tool prints Isabelle system options, as
   789 required for "isabelle build", for example.
   790 
   791 * The "isabelle logo" tool produces EPS and PDF format simultaneously.
   792 Minor INCOMPATIBILITY in command-line options.
   793 
   794 * The "isabelle install" tool has now a simpler command-line.  Minor
   795 INCOMPATIBILITY.
   796 
   797 * The "isabelle components" tool helps to resolve add-on components
   798 that are not bundled, or referenced from a bare-bones repository
   799 version of Isabelle.
   800 
   801 * Settings variable ISABELLE_PLATFORM_FAMILY refers to the general
   802 platform family: "linux", "macos", "windows".
   803 
   804 * The ML system is configured as regular component, and no longer
   805 picked up from some surrounding directory.  Potential INCOMPATIBILITY
   806 for home-made settings.
   807 
   808 * Improved ML runtime statistics (heap, threads, future tasks etc.).
   809 
   810 * Discontinued support for Poly/ML 5.2.1, which was the last version
   811 without exception positions and advanced ML compiler/toplevel
   812 configuration.
   813 
   814 * Discontinued special treatment of Proof General -- no longer guess
   815 PROOFGENERAL_HOME based on accidental file-system layout.  Minor
   816 INCOMPATIBILITY: provide PROOFGENERAL_HOME and PROOFGENERAL_OPTIONS
   817 settings manually, or use a Proof General version that has been
   818 bundled as Isabelle component.
   819 
   820 
   821 
   822 New in Isabelle2012 (May 2012)
   823 ------------------------------
   824 
   825 *** General ***
   826 
   827 * Prover IDE (PIDE) improvements:
   828 
   829   - more robust Sledgehammer integration (as before the sledgehammer
   830     command-line needs to be typed into the source buffer)
   831   - markup for bound variables
   832   - markup for types of term variables (displayed as tooltips)
   833   - support for user-defined Isar commands within the running session
   834   - improved support for Unicode outside original 16bit range
   835     e.g. glyph for \<A> (thanks to jEdit 4.5.1)
   836 
   837 * Forward declaration of outer syntax keywords within the theory
   838 header -- minor INCOMPATIBILITY for user-defined commands.  Allow new
   839 commands to be used in the same theory where defined.
   840 
   841 * Auxiliary contexts indicate block structure for specifications with
   842 additional parameters and assumptions.  Such unnamed contexts may be
   843 nested within other targets, like 'theory', 'locale', 'class',
   844 'instantiation' etc.  Results from the local context are generalized
   845 accordingly and applied to the enclosing target context.  Example:
   846 
   847   context
   848     fixes x y z :: 'a
   849     assumes xy: "x = y" and yz: "y = z"
   850   begin
   851 
   852   lemma my_trans: "x = z" using xy yz by simp
   853 
   854   end
   855 
   856   thm my_trans
   857 
   858 The most basic application is to factor-out context elements of
   859 several fixes/assumes/shows theorem statements, e.g. see
   860 ~~/src/HOL/Isar_Examples/Group_Context.thy
   861 
   862 Any other local theory specification element works within the "context
   863 ... begin ... end" block as well.
   864 
   865 * Bundled declarations associate attributed fact expressions with a
   866 given name in the context.  These may be later included in other
   867 contexts.  This allows to manage context extensions casually, without
   868 the logical dependencies of locales and locale interpretation.  See
   869 commands 'bundle', 'include', 'including' etc. in the isar-ref manual.
   870 
   871 * Commands 'lemmas' and 'theorems' allow local variables using 'for'
   872 declaration, and results are standardized before being stored.  Thus
   873 old-style "standard" after instantiation or composition of facts
   874 becomes obsolete.  Minor INCOMPATIBILITY, due to potential change of
   875 indices of schematic variables.
   876 
   877 * Rule attributes in local theory declarations (e.g. locale or class)
   878 are now statically evaluated: the resulting theorem is stored instead
   879 of the original expression.  INCOMPATIBILITY in rare situations, where
   880 the historic accident of dynamic re-evaluation in interpretations
   881 etc. was exploited.
   882 
   883 * New tutorial "Programming and Proving in Isabelle/HOL"
   884 ("prog-prove").  It completely supersedes "A Tutorial Introduction to
   885 Structured Isar Proofs" ("isar-overview"), which has been removed.  It
   886 also supersedes "Isabelle/HOL, A Proof Assistant for Higher-Order
   887 Logic" as the recommended beginners tutorial, but does not cover all
   888 of the material of that old tutorial.
   889 
   890 * Updated and extended reference manuals: "isar-ref",
   891 "implementation", "system"; reduced remaining material in old "ref"
   892 manual.
   893 
   894 
   895 *** Pure ***
   896 
   897 * Command 'definition' no longer exports the foundational "raw_def"
   898 into the user context.  Minor INCOMPATIBILITY, may use the regular
   899 "def" result with attribute "abs_def" to imitate the old version.
   900 
   901 * Attribute "abs_def" turns an equation of the form "f x y == t" into
   902 "f == %x y. t", which ensures that "simp" or "unfold" steps always
   903 expand it.  This also works for object-logic equality.  (Formerly
   904 undocumented feature.)
   905 
   906 * Sort constraints are now propagated in simultaneous statements, just
   907 like type constraints.  INCOMPATIBILITY in rare situations, where
   908 distinct sorts used to be assigned accidentally.  For example:
   909 
   910   lemma "P (x::'a::foo)" and "Q (y::'a::bar)"  -- "now illegal"
   911 
   912   lemma "P (x::'a)" and "Q (y::'a::bar)"
   913     -- "now uniform 'a::bar instead of default sort for first occurrence (!)"
   914 
   915 * Rule composition via attribute "OF" (or ML functions OF/MRS) is more
   916 tolerant against multiple unifiers, as long as the final result is
   917 unique.  (As before, rules are composed in canonical right-to-left
   918 order to accommodate newly introduced premises.)
   919 
   920 * Renamed some inner syntax categories:
   921 
   922     num ~> num_token
   923     xnum ~> xnum_token
   924     xstr ~> str_token
   925 
   926 Minor INCOMPATIBILITY.  Note that in practice "num_const" or
   927 "num_position" etc. are mainly used instead (which also include
   928 position information via constraints).
   929 
   930 * Simplified configuration options for syntax ambiguity: see
   931 "syntax_ambiguity_warning" and "syntax_ambiguity_limit" in isar-ref
   932 manual.  Minor INCOMPATIBILITY.
   933 
   934 * Discontinued configuration option "syntax_positions": atomic terms
   935 in parse trees are always annotated by position constraints.
   936 
   937 * Old code generator for SML and its commands 'code_module',
   938 'code_library', 'consts_code', 'types_code' have been discontinued.
   939 Use commands of the generic code generator instead.  INCOMPATIBILITY.
   940 
   941 * Redundant attribute "code_inline" has been discontinued. Use
   942 "code_unfold" instead.  INCOMPATIBILITY.
   943 
   944 * Dropped attribute "code_unfold_post" in favor of the its dual
   945 "code_abbrev", which yields a common pattern in definitions like
   946 
   947   definition [code_abbrev]: "f = t"
   948 
   949 INCOMPATIBILITY.
   950 
   951 * Obsolete 'types' command has been discontinued.  Use 'type_synonym'
   952 instead.  INCOMPATIBILITY.
   953 
   954 * Discontinued old "prems" fact, which used to refer to the accidental
   955 collection of foundational premises in the context (already marked as
   956 legacy since Isabelle2011).
   957 
   958 
   959 *** HOL ***
   960 
   961 * Type 'a set is now a proper type constructor (just as before
   962 Isabelle2008).  Definitions mem_def and Collect_def have disappeared.
   963 Non-trivial INCOMPATIBILITY.  For developments keeping predicates and
   964 sets separate, it is often sufficient to rephrase some set S that has
   965 been accidentally used as predicates by "%x. x : S", and some
   966 predicate P that has been accidentally used as set by "{x. P x}".
   967 Corresponding proofs in a first step should be pruned from any
   968 tinkering with former theorems mem_def and Collect_def as far as
   969 possible.
   970 
   971 For developments which deliberately mix predicates and sets, a
   972 planning step is necessary to determine what should become a predicate
   973 and what a set.  It can be helpful to carry out that step in
   974 Isabelle2011-1 before jumping right into the current release.
   975 
   976 * Code generation by default implements sets as container type rather
   977 than predicates.  INCOMPATIBILITY.
   978 
   979 * New type synonym 'a rel = ('a * 'a) set
   980 
   981 * The representation of numerals has changed.  Datatype "num"
   982 represents strictly positive binary numerals, along with functions
   983 "numeral :: num => 'a" and "neg_numeral :: num => 'a" to represent
   984 positive and negated numeric literals, respectively.  See also
   985 definitions in ~~/src/HOL/Num.thy.  Potential INCOMPATIBILITY, some
   986 user theories may require adaptations as follows:
   987 
   988   - Theorems with number_ring or number_semiring constraints: These
   989     classes are gone; use comm_ring_1 or comm_semiring_1 instead.
   990 
   991   - Theories defining numeric types: Remove number, number_semiring,
   992     and number_ring instances. Defer all theorems about numerals until
   993     after classes one and semigroup_add have been instantiated.
   994 
   995   - Numeral-only simp rules: Replace each rule having a "number_of v"
   996     pattern with two copies, one for numeral and one for neg_numeral.
   997 
   998   - Theorems about subclasses of semiring_1 or ring_1: These classes
   999     automatically support numerals now, so more simp rules and
  1000     simprocs may now apply within the proof.
  1001 
  1002   - Definitions and theorems using old constructors Pls/Min/Bit0/Bit1:
  1003     Redefine using other integer operations.
  1004 
  1005 * Transfer: New package intended to generalize the existing
  1006 "descending" method and related theorem attributes from the Quotient
  1007 package.  (Not all functionality is implemented yet, but future
  1008 development will focus on Transfer as an eventual replacement for the
  1009 corresponding parts of the Quotient package.)
  1010 
  1011   - transfer_rule attribute: Maintains a collection of transfer rules,
  1012     which relate constants at two different types. Transfer rules may
  1013     relate different type instances of the same polymorphic constant,
  1014     or they may relate an operation on a raw type to a corresponding
  1015     operation on an abstract type (quotient or subtype). For example:
  1016 
  1017     ((A ===> B) ===> list_all2 A ===> list_all2 B) map map
  1018     (cr_int ===> cr_int ===> cr_int) (%(x,y) (u,v). (x+u, y+v)) plus_int
  1019 
  1020   - transfer method: Replaces a subgoal on abstract types with an
  1021     equivalent subgoal on the corresponding raw types. Constants are
  1022     replaced with corresponding ones according to the transfer rules.
  1023     Goals are generalized over all free variables by default; this is
  1024     necessary for variables whose types change, but can be overridden
  1025     for specific variables with e.g. "transfer fixing: x y z".  The
  1026     variant transfer' method allows replacing a subgoal with one that
  1027     is logically stronger (rather than equivalent).
  1028 
  1029   - relator_eq attribute: Collects identity laws for relators of
  1030     various type constructors, e.g. "list_all2 (op =) = (op =)".  The
  1031     transfer method uses these lemmas to infer transfer rules for
  1032     non-polymorphic constants on the fly.
  1033 
  1034   - transfer_prover method: Assists with proving a transfer rule for a
  1035     new constant, provided the constant is defined in terms of other
  1036     constants that already have transfer rules. It should be applied
  1037     after unfolding the constant definitions.
  1038 
  1039   - HOL/ex/Transfer_Int_Nat.thy: Example theory demonstrating transfer
  1040     from type nat to type int.
  1041 
  1042 * Lifting: New package intended to generalize the quotient_definition
  1043 facility of the Quotient package; designed to work with Transfer.
  1044 
  1045   - lift_definition command: Defines operations on an abstract type in
  1046     terms of a corresponding operation on a representation
  1047     type.  Example syntax:
  1048 
  1049     lift_definition dlist_insert :: "'a => 'a dlist => 'a dlist"
  1050       is List.insert
  1051 
  1052     Users must discharge a respectfulness proof obligation when each
  1053     constant is defined. (For a type copy, i.e. a typedef with UNIV,
  1054     the proof is discharged automatically.) The obligation is
  1055     presented in a user-friendly, readable form; a respectfulness
  1056     theorem in the standard format and a transfer rule are generated
  1057     by the package.
  1058 
  1059   - Integration with code_abstype: For typedefs (e.g. subtypes
  1060     corresponding to a datatype invariant, such as dlist),
  1061     lift_definition generates a code certificate theorem and sets up
  1062     code generation for each constant.
  1063 
  1064   - setup_lifting command: Sets up the Lifting package to work with a
  1065     user-defined type. The user must provide either a quotient theorem
  1066     or a type_definition theorem.  The package configures transfer
  1067     rules for equality and quantifiers on the type, and sets up the
  1068     lift_definition command to work with the type.
  1069 
  1070   - Usage examples: See Quotient_Examples/Lift_DList.thy,
  1071     Quotient_Examples/Lift_RBT.thy, Quotient_Examples/Lift_FSet.thy,
  1072     Word/Word.thy and Library/Float.thy.
  1073 
  1074 * Quotient package:
  1075 
  1076   - The 'quotient_type' command now supports a 'morphisms' option with
  1077     rep and abs functions, similar to typedef.
  1078 
  1079   - 'quotient_type' sets up new types to work with the Lifting and
  1080     Transfer packages, as with 'setup_lifting'.
  1081 
  1082   - The 'quotient_definition' command now requires the user to prove a
  1083     respectfulness property at the point where the constant is
  1084     defined, similar to lift_definition; INCOMPATIBILITY.
  1085 
  1086   - Renamed predicate 'Quotient' to 'Quotient3', and renamed theorems
  1087     accordingly, INCOMPATIBILITY.
  1088 
  1089 * New diagnostic command 'find_unused_assms' to find potentially
  1090 superfluous assumptions in theorems using Quickcheck.
  1091 
  1092 * Quickcheck:
  1093 
  1094   - Quickcheck returns variable assignments as counterexamples, which
  1095     allows to reveal the underspecification of functions under test.
  1096     For example, refuting "hd xs = x", it presents the variable
  1097     assignment xs = [] and x = a1 as a counterexample, assuming that
  1098     any property is false whenever "hd []" occurs in it.
  1099 
  1100     These counterexample are marked as potentially spurious, as
  1101     Quickcheck also returns "xs = []" as a counterexample to the
  1102     obvious theorem "hd xs = hd xs".
  1103 
  1104     After finding a potentially spurious counterexample, Quickcheck
  1105     continues searching for genuine ones.
  1106 
  1107     By default, Quickcheck shows potentially spurious and genuine
  1108     counterexamples. The option "genuine_only" sets quickcheck to only
  1109     show genuine counterexamples.
  1110 
  1111   - The command 'quickcheck_generator' creates random and exhaustive
  1112     value generators for a given type and operations.
  1113 
  1114     It generates values by using the operations as if they were
  1115     constructors of that type.
  1116 
  1117   - Support for multisets.
  1118 
  1119   - Added "use_subtype" options.
  1120 
  1121   - Added "quickcheck_locale" configuration to specify how to process
  1122     conjectures in a locale context.
  1123 
  1124 * Nitpick: Fixed infinite loop caused by the 'peephole_optim' option
  1125 and affecting 'rat' and 'real'.
  1126 
  1127 * Sledgehammer:
  1128   - Integrated more tightly with SPASS, as described in the ITP 2012
  1129     paper "More SPASS with Isabelle".
  1130   - Made it try "smt" as a fallback if "metis" fails or times out.
  1131   - Added support for the following provers: Alt-Ergo (via Why3 and
  1132     TFF1), iProver, iProver-Eq.
  1133   - Sped up the minimizer.
  1134   - Added "lam_trans", "uncurry_aliases", and "minimize" options.
  1135   - Renamed "slicing" ("no_slicing") option to "slice" ("dont_slice").
  1136   - Renamed "sound" option to "strict".
  1137 
  1138 * Metis: Added possibility to specify lambda translations scheme as a
  1139 parenthesized argument (e.g., "by (metis (lifting) ...)").
  1140 
  1141 * SMT: Renamed "smt_fixed" option to "smt_read_only_certificates".
  1142 
  1143 * Command 'try0': Renamed from 'try_methods'. INCOMPATIBILITY.
  1144 
  1145 * New "case_product" attribute to generate a case rule doing multiple
  1146 case distinctions at the same time.  E.g.
  1147 
  1148   list.exhaust [case_product nat.exhaust]
  1149 
  1150 produces a rule which can be used to perform case distinction on both
  1151 a list and a nat.
  1152 
  1153 * New "eventually_elim" method as a generalized variant of the
  1154 eventually_elim* rules.  Supports structured proofs.
  1155 
  1156 * Typedef with implicit set definition is considered legacy.  Use
  1157 "typedef (open)" form instead, which will eventually become the
  1158 default.
  1159 
  1160 * Record: code generation can be switched off manually with
  1161 
  1162   declare [[record_coden = false]]  -- "default true"
  1163 
  1164 * Datatype: type parameters allow explicit sort constraints.
  1165 
  1166 * Concrete syntax for case expressions includes constraints for source
  1167 positions, and thus produces Prover IDE markup for its bindings.
  1168 INCOMPATIBILITY for old-style syntax translations that augment the
  1169 pattern notation; e.g. see src/HOL/HOLCF/One.thy for translations of
  1170 one_case.
  1171 
  1172 * Clarified attribute "mono_set": pure declaration without modifying
  1173 the result of the fact expression.
  1174 
  1175 * More default pred/set conversions on a couple of relation operations
  1176 and predicates.  Added powers of predicate relations.  Consolidation
  1177 of some relation theorems:
  1178 
  1179   converse_def ~> converse_unfold
  1180   rel_comp_def ~> relcomp_unfold
  1181   symp_def ~> (modified, use symp_def and sym_def instead)
  1182   transp_def ~> transp_trans
  1183   Domain_def ~> Domain_unfold
  1184   Range_def ~> Domain_converse [symmetric]
  1185 
  1186 Generalized theorems INF_INT_eq, INF_INT_eq2, SUP_UN_eq, SUP_UN_eq2.
  1187 
  1188 See theory "Relation" for examples for making use of pred/set
  1189 conversions by means of attributes "to_set" and "to_pred".
  1190 
  1191 INCOMPATIBILITY.
  1192 
  1193 * Renamed facts about the power operation on relations, i.e., relpow
  1194 to match the constant's name:
  1195 
  1196   rel_pow_1 ~> relpow_1
  1197   rel_pow_0_I ~> relpow_0_I
  1198   rel_pow_Suc_I ~> relpow_Suc_I
  1199   rel_pow_Suc_I2 ~> relpow_Suc_I2
  1200   rel_pow_0_E ~> relpow_0_E
  1201   rel_pow_Suc_E ~> relpow_Suc_E
  1202   rel_pow_E ~> relpow_E
  1203   rel_pow_Suc_D2 ~> relpow_Suc_D2
  1204   rel_pow_Suc_E2 ~> relpow_Suc_E2
  1205   rel_pow_Suc_D2' ~> relpow_Suc_D2'
  1206   rel_pow_E2 ~> relpow_E2
  1207   rel_pow_add ~> relpow_add
  1208   rel_pow_commute ~> relpow
  1209   rel_pow_empty ~> relpow_empty:
  1210   rtrancl_imp_UN_rel_pow ~> rtrancl_imp_UN_relpow
  1211   rel_pow_imp_rtrancl ~> relpow_imp_rtrancl
  1212   rtrancl_is_UN_rel_pow ~> rtrancl_is_UN_relpow
  1213   rtrancl_imp_rel_pow ~> rtrancl_imp_relpow
  1214   rel_pow_fun_conv ~> relpow_fun_conv
  1215   rel_pow_finite_bounded1 ~> relpow_finite_bounded1
  1216   rel_pow_finite_bounded ~> relpow_finite_bounded
  1217   rtrancl_finite_eq_rel_pow ~> rtrancl_finite_eq_relpow
  1218   trancl_finite_eq_rel_pow ~> trancl_finite_eq_relpow
  1219   single_valued_rel_pow ~> single_valued_relpow
  1220 
  1221 INCOMPATIBILITY.
  1222 
  1223 * Theory Relation: Consolidated constant name for relation composition
  1224 and corresponding theorem names:
  1225 
  1226   - Renamed constant rel_comp to relcomp.
  1227 
  1228   - Dropped abbreviation pred_comp. Use relcompp instead.
  1229 
  1230   - Renamed theorems:
  1231 
  1232     rel_compI ~> relcompI
  1233     rel_compEpair ~> relcompEpair
  1234     rel_compE ~> relcompE
  1235     pred_comp_rel_comp_eq ~> relcompp_relcomp_eq
  1236     rel_comp_empty1 ~> relcomp_empty1
  1237     rel_comp_mono ~> relcomp_mono
  1238     rel_comp_subset_Sigma ~> relcomp_subset_Sigma
  1239     rel_comp_distrib ~> relcomp_distrib
  1240     rel_comp_distrib2 ~> relcomp_distrib2
  1241     rel_comp_UNION_distrib ~> relcomp_UNION_distrib
  1242     rel_comp_UNION_distrib2 ~> relcomp_UNION_distrib2
  1243     single_valued_rel_comp ~> single_valued_relcomp
  1244     rel_comp_def ~> relcomp_unfold
  1245     converse_rel_comp ~> converse_relcomp
  1246     pred_compI ~> relcomppI
  1247     pred_compE ~> relcomppE
  1248     pred_comp_bot1 ~> relcompp_bot1
  1249     pred_comp_bot2 ~> relcompp_bot2
  1250     transp_pred_comp_less_eq ~> transp_relcompp_less_eq
  1251     pred_comp_mono ~> relcompp_mono
  1252     pred_comp_distrib ~> relcompp_distrib
  1253     pred_comp_distrib2 ~> relcompp_distrib2
  1254     converse_pred_comp ~> converse_relcompp
  1255 
  1256     finite_rel_comp ~> finite_relcomp
  1257 
  1258     set_rel_comp ~> set_relcomp
  1259 
  1260 INCOMPATIBILITY.
  1261 
  1262 * Theory Divides: Discontinued redundant theorems about div and mod.
  1263 INCOMPATIBILITY, use the corresponding generic theorems instead.
  1264 
  1265   DIVISION_BY_ZERO ~> div_by_0, mod_by_0
  1266   zdiv_self ~> div_self
  1267   zmod_self ~> mod_self
  1268   zdiv_zero ~> div_0
  1269   zmod_zero ~> mod_0
  1270   zdiv_zmod_equality ~> div_mod_equality2
  1271   zdiv_zmod_equality2 ~> div_mod_equality
  1272   zmod_zdiv_trivial ~> mod_div_trivial
  1273   zdiv_zminus_zminus ~> div_minus_minus
  1274   zmod_zminus_zminus ~> mod_minus_minus
  1275   zdiv_zminus2 ~> div_minus_right
  1276   zmod_zminus2 ~> mod_minus_right
  1277   zdiv_minus1_right ~> div_minus1_right
  1278   zmod_minus1_right ~> mod_minus1_right
  1279   zdvd_mult_div_cancel ~> dvd_mult_div_cancel
  1280   zmod_zmult1_eq ~> mod_mult_right_eq
  1281   zpower_zmod ~> power_mod
  1282   zdvd_zmod ~> dvd_mod
  1283   zdvd_zmod_imp_zdvd ~> dvd_mod_imp_dvd
  1284   mod_mult_distrib ~> mult_mod_left
  1285   mod_mult_distrib2 ~> mult_mod_right
  1286 
  1287 * Removed redundant theorems nat_mult_2 and nat_mult_2_right; use
  1288 generic mult_2 and mult_2_right instead. INCOMPATIBILITY.
  1289 
  1290 * Finite_Set.fold now qualified.  INCOMPATIBILITY.
  1291 
  1292 * Consolidated theorem names concerning fold combinators:
  1293 
  1294   inf_INFI_fold_inf ~> inf_INF_fold_inf
  1295   sup_SUPR_fold_sup ~> sup_SUP_fold_sup
  1296   INFI_fold_inf ~> INF_fold_inf
  1297   SUPR_fold_sup ~> SUP_fold_sup
  1298   union_set ~> union_set_fold
  1299   minus_set ~> minus_set_fold
  1300   INFI_set_fold ~> INF_set_fold
  1301   SUPR_set_fold ~> SUP_set_fold
  1302   INF_code ~> INF_set_foldr
  1303   SUP_code ~> SUP_set_foldr
  1304   foldr.simps ~> foldr.simps (in point-free formulation)
  1305   foldr_fold_rev ~> foldr_conv_fold
  1306   foldl_fold ~> foldl_conv_fold
  1307   foldr_foldr ~> foldr_conv_foldl
  1308   foldl_foldr ~> foldl_conv_foldr
  1309   fold_set_remdups ~> fold_set_fold_remdups
  1310   fold_set ~> fold_set_fold
  1311   fold1_set ~> fold1_set_fold
  1312 
  1313 INCOMPATIBILITY.
  1314 
  1315 * Dropped rarely useful theorems concerning fold combinators:
  1316 foldl_apply, foldl_fun_comm, foldl_rev, fold_weak_invariant,
  1317 rev_foldl_cons, fold_set_remdups, fold_set, fold_set1,
  1318 concat_conv_foldl, foldl_weak_invariant, foldl_invariant,
  1319 foldr_invariant, foldl_absorb0, foldl_foldr1_lemma, foldl_foldr1,
  1320 listsum_conv_fold, listsum_foldl, sort_foldl_insort, foldl_assoc,
  1321 foldr_conv_foldl, start_le_sum, elem_le_sum, sum_eq_0_conv.
  1322 INCOMPATIBILITY.  For the common phrases "%xs. List.foldr plus xs 0"
  1323 and "List.foldl plus 0", prefer "List.listsum".  Otherwise it can be
  1324 useful to boil down "List.foldr" and "List.foldl" to "List.fold" by
  1325 unfolding "foldr_conv_fold" and "foldl_conv_fold".
  1326 
  1327 * Dropped lemmas minus_set_foldr, union_set_foldr, union_coset_foldr,
  1328 inter_coset_foldr, Inf_fin_set_foldr, Sup_fin_set_foldr,
  1329 Min_fin_set_foldr, Max_fin_set_foldr, Inf_set_foldr, Sup_set_foldr,
  1330 INF_set_foldr, SUP_set_foldr.  INCOMPATIBILITY.  Prefer corresponding
  1331 lemmas over fold rather than foldr, or make use of lemmas
  1332 fold_conv_foldr and fold_rev.
  1333 
  1334 * Congruence rules Option.map_cong and Option.bind_cong for recursion
  1335 through option types.
  1336 
  1337 * "Transitive_Closure.ntrancl": bounded transitive closure on
  1338 relations.
  1339 
  1340 * Constant "Set.not_member" now qualified.  INCOMPATIBILITY.
  1341 
  1342 * Theory Int: Discontinued many legacy theorems specific to type int.
  1343 INCOMPATIBILITY, use the corresponding generic theorems instead.
  1344 
  1345   zminus_zminus ~> minus_minus
  1346   zminus_0 ~> minus_zero
  1347   zminus_zadd_distrib ~> minus_add_distrib
  1348   zadd_commute ~> add_commute
  1349   zadd_assoc ~> add_assoc
  1350   zadd_left_commute ~> add_left_commute
  1351   zadd_ac ~> add_ac
  1352   zmult_ac ~> mult_ac
  1353   zadd_0 ~> add_0_left
  1354   zadd_0_right ~> add_0_right
  1355   zadd_zminus_inverse2 ~> left_minus
  1356   zmult_zminus ~> mult_minus_left
  1357   zmult_commute ~> mult_commute
  1358   zmult_assoc ~> mult_assoc
  1359   zadd_zmult_distrib ~> left_distrib
  1360   zadd_zmult_distrib2 ~> right_distrib
  1361   zdiff_zmult_distrib ~> left_diff_distrib
  1362   zdiff_zmult_distrib2 ~> right_diff_distrib
  1363   zmult_1 ~> mult_1_left
  1364   zmult_1_right ~> mult_1_right
  1365   zle_refl ~> order_refl
  1366   zle_trans ~> order_trans
  1367   zle_antisym ~> order_antisym
  1368   zle_linear ~> linorder_linear
  1369   zless_linear ~> linorder_less_linear
  1370   zadd_left_mono ~> add_left_mono
  1371   zadd_strict_right_mono ~> add_strict_right_mono
  1372   zadd_zless_mono ~> add_less_le_mono
  1373   int_0_less_1 ~> zero_less_one
  1374   int_0_neq_1 ~> zero_neq_one
  1375   zless_le ~> less_le
  1376   zpower_zadd_distrib ~> power_add
  1377   zero_less_zpower_abs_iff ~> zero_less_power_abs_iff
  1378   zero_le_zpower_abs ~> zero_le_power_abs
  1379 
  1380 * Theory Deriv: Renamed
  1381 
  1382   DERIV_nonneg_imp_nonincreasing ~> DERIV_nonneg_imp_nondecreasing
  1383 
  1384 * Theory Library/Multiset: Improved code generation of multisets.
  1385 
  1386 * Theory HOL/Library/Set_Algebras: Addition and multiplication on sets
  1387 are expressed via type classes again. The special syntax
  1388 \<oplus>/\<otimes> has been replaced by plain +/*. Removed constant
  1389 setsum_set, which is now subsumed by Big_Operators.setsum.
  1390 INCOMPATIBILITY.
  1391 
  1392 * Theory HOL/Library/Diagonalize has been removed. INCOMPATIBILITY,
  1393 use theory HOL/Library/Nat_Bijection instead.
  1394 
  1395 * Theory HOL/Library/RBT_Impl: Backing implementation of red-black
  1396 trees is now inside a type class context.  Names of affected
  1397 operations and lemmas have been prefixed by rbt_.  INCOMPATIBILITY for
  1398 theories working directly with raw red-black trees, adapt the names as
  1399 follows:
  1400 
  1401   Operations:
  1402   bulkload -> rbt_bulkload
  1403   del_from_left -> rbt_del_from_left
  1404   del_from_right -> rbt_del_from_right
  1405   del -> rbt_del
  1406   delete -> rbt_delete
  1407   ins -> rbt_ins
  1408   insert -> rbt_insert
  1409   insertw -> rbt_insert_with
  1410   insert_with_key -> rbt_insert_with_key
  1411   map_entry -> rbt_map_entry
  1412   lookup -> rbt_lookup
  1413   sorted -> rbt_sorted
  1414   tree_greater -> rbt_greater
  1415   tree_less -> rbt_less
  1416   tree_less_symbol -> rbt_less_symbol
  1417   union -> rbt_union
  1418   union_with -> rbt_union_with
  1419   union_with_key -> rbt_union_with_key
  1420 
  1421   Lemmas:
  1422   balance_left_sorted -> balance_left_rbt_sorted
  1423   balance_left_tree_greater -> balance_left_rbt_greater
  1424   balance_left_tree_less -> balance_left_rbt_less
  1425   balance_right_sorted -> balance_right_rbt_sorted
  1426   balance_right_tree_greater -> balance_right_rbt_greater
  1427   balance_right_tree_less -> balance_right_rbt_less
  1428   balance_sorted -> balance_rbt_sorted
  1429   balance_tree_greater -> balance_rbt_greater
  1430   balance_tree_less -> balance_rbt_less
  1431   bulkload_is_rbt -> rbt_bulkload_is_rbt
  1432   combine_sorted -> combine_rbt_sorted
  1433   combine_tree_greater -> combine_rbt_greater
  1434   combine_tree_less -> combine_rbt_less
  1435   delete_in_tree -> rbt_delete_in_tree
  1436   delete_is_rbt -> rbt_delete_is_rbt
  1437   del_from_left_tree_greater -> rbt_del_from_left_rbt_greater
  1438   del_from_left_tree_less -> rbt_del_from_left_rbt_less
  1439   del_from_right_tree_greater -> rbt_del_from_right_rbt_greater
  1440   del_from_right_tree_less -> rbt_del_from_right_rbt_less
  1441   del_in_tree -> rbt_del_in_tree
  1442   del_inv1_inv2 -> rbt_del_inv1_inv2
  1443   del_sorted -> rbt_del_rbt_sorted
  1444   del_tree_greater -> rbt_del_rbt_greater
  1445   del_tree_less -> rbt_del_rbt_less
  1446   dom_lookup_Branch -> dom_rbt_lookup_Branch
  1447   entries_lookup -> entries_rbt_lookup
  1448   finite_dom_lookup -> finite_dom_rbt_lookup
  1449   insert_sorted -> rbt_insert_rbt_sorted
  1450   insertw_is_rbt -> rbt_insertw_is_rbt
  1451   insertwk_is_rbt -> rbt_insertwk_is_rbt
  1452   insertwk_sorted -> rbt_insertwk_rbt_sorted
  1453   insertw_sorted -> rbt_insertw_rbt_sorted
  1454   ins_sorted -> ins_rbt_sorted
  1455   ins_tree_greater -> ins_rbt_greater
  1456   ins_tree_less -> ins_rbt_less
  1457   is_rbt_sorted -> is_rbt_rbt_sorted
  1458   lookup_balance -> rbt_lookup_balance
  1459   lookup_bulkload -> rbt_lookup_rbt_bulkload
  1460   lookup_delete -> rbt_lookup_rbt_delete
  1461   lookup_Empty -> rbt_lookup_Empty
  1462   lookup_from_in_tree -> rbt_lookup_from_in_tree
  1463   lookup_in_tree -> rbt_lookup_in_tree
  1464   lookup_ins -> rbt_lookup_ins
  1465   lookup_insert -> rbt_lookup_rbt_insert
  1466   lookup_insertw -> rbt_lookup_rbt_insertw
  1467   lookup_insertwk -> rbt_lookup_rbt_insertwk
  1468   lookup_keys -> rbt_lookup_keys
  1469   lookup_map -> rbt_lookup_map
  1470   lookup_map_entry -> rbt_lookup_rbt_map_entry
  1471   lookup_tree_greater -> rbt_lookup_rbt_greater
  1472   lookup_tree_less -> rbt_lookup_rbt_less
  1473   lookup_union -> rbt_lookup_rbt_union
  1474   map_entry_color_of -> rbt_map_entry_color_of
  1475   map_entry_inv1 -> rbt_map_entry_inv1
  1476   map_entry_inv2 -> rbt_map_entry_inv2
  1477   map_entry_is_rbt -> rbt_map_entry_is_rbt
  1478   map_entry_sorted -> rbt_map_entry_rbt_sorted
  1479   map_entry_tree_greater -> rbt_map_entry_rbt_greater
  1480   map_entry_tree_less -> rbt_map_entry_rbt_less
  1481   map_tree_greater -> map_rbt_greater
  1482   map_tree_less -> map_rbt_less
  1483   map_sorted -> map_rbt_sorted
  1484   paint_sorted -> paint_rbt_sorted
  1485   paint_lookup -> paint_rbt_lookup
  1486   paint_tree_greater -> paint_rbt_greater
  1487   paint_tree_less -> paint_rbt_less
  1488   sorted_entries -> rbt_sorted_entries
  1489   tree_greater_eq_trans -> rbt_greater_eq_trans
  1490   tree_greater_nit -> rbt_greater_nit
  1491   tree_greater_prop -> rbt_greater_prop
  1492   tree_greater_simps -> rbt_greater_simps
  1493   tree_greater_trans -> rbt_greater_trans
  1494   tree_less_eq_trans -> rbt_less_eq_trans
  1495   tree_less_nit -> rbt_less_nit
  1496   tree_less_prop -> rbt_less_prop
  1497   tree_less_simps -> rbt_less_simps
  1498   tree_less_trans -> rbt_less_trans
  1499   tree_ord_props -> rbt_ord_props
  1500   union_Branch -> rbt_union_Branch
  1501   union_is_rbt -> rbt_union_is_rbt
  1502   unionw_is_rbt -> rbt_unionw_is_rbt
  1503   unionwk_is_rbt -> rbt_unionwk_is_rbt
  1504   unionwk_sorted -> rbt_unionwk_rbt_sorted
  1505 
  1506 * Theory HOL/Library/Float: Floating point numbers are now defined as
  1507 a subset of the real numbers.  All operations are defined using the
  1508 lifing-framework and proofs use the transfer method.  INCOMPATIBILITY.
  1509 
  1510   Changed Operations:
  1511   float_abs -> abs
  1512   float_nprt -> nprt
  1513   float_pprt -> pprt
  1514   pow2 -> use powr
  1515   round_down -> float_round_down
  1516   round_up -> float_round_up
  1517   scale -> exponent
  1518 
  1519   Removed Operations:
  1520   ceiling_fl, lb_mult, lb_mod, ub_mult, ub_mod
  1521 
  1522   Renamed Lemmas:
  1523   abs_float_def -> Float.compute_float_abs
  1524   bitlen_ge0 -> bitlen_nonneg
  1525   bitlen.simps -> Float.compute_bitlen
  1526   float_components -> Float_mantissa_exponent
  1527   float_divl.simps -> Float.compute_float_divl
  1528   float_divr.simps -> Float.compute_float_divr
  1529   float_eq_odd -> mult_powr_eq_mult_powr_iff
  1530   float_power -> real_of_float_power
  1531   lapprox_posrat_def -> Float.compute_lapprox_posrat
  1532   lapprox_rat.simps -> Float.compute_lapprox_rat
  1533   le_float_def' -> Float.compute_float_le
  1534   le_float_def -> less_eq_float.rep_eq
  1535   less_float_def' -> Float.compute_float_less
  1536   less_float_def -> less_float.rep_eq
  1537   normfloat_def -> Float.compute_normfloat
  1538   normfloat_imp_odd_or_zero -> mantissa_not_dvd and mantissa_noteq_0
  1539   normfloat -> normfloat_def
  1540   normfloat_unique -> use normfloat_def
  1541   number_of_float_Float -> Float.compute_float_numeral, Float.compute_float_neg_numeral
  1542   one_float_def -> Float.compute_float_one
  1543   plus_float_def -> Float.compute_float_plus
  1544   rapprox_posrat_def -> Float.compute_rapprox_posrat
  1545   rapprox_rat.simps -> Float.compute_rapprox_rat
  1546   real_of_float_0 -> zero_float.rep_eq
  1547   real_of_float_1 -> one_float.rep_eq
  1548   real_of_float_abs -> abs_float.rep_eq
  1549   real_of_float_add -> plus_float.rep_eq
  1550   real_of_float_minus -> uminus_float.rep_eq
  1551   real_of_float_mult -> times_float.rep_eq
  1552   real_of_float_simp -> Float.rep_eq
  1553   real_of_float_sub -> minus_float.rep_eq
  1554   round_down.simps -> Float.compute_float_round_down
  1555   round_up.simps -> Float.compute_float_round_up
  1556   times_float_def -> Float.compute_float_times
  1557   uminus_float_def -> Float.compute_float_uminus
  1558   zero_float_def -> Float.compute_float_zero
  1559 
  1560   Lemmas not necessary anymore, use the transfer method:
  1561   bitlen_B0, bitlen_B1, bitlen_ge1, bitlen_Min, bitlen_Pls, float_divl,
  1562   float_divr, float_le_simp, float_less1_mantissa_bound,
  1563   float_less_simp, float_less_zero, float_le_zero,
  1564   float_pos_less1_e_neg, float_pos_m_pos, float_split, float_split2,
  1565   floor_pos_exp, lapprox_posrat, lapprox_posrat_bottom, lapprox_rat,
  1566   lapprox_rat_bottom, normalized_float, rapprox_posrat,
  1567   rapprox_posrat_le1, rapprox_rat, real_of_float_ge0_exp,
  1568   real_of_float_neg_exp, real_of_float_nge0_exp, round_down floor_fl,
  1569   round_up, zero_le_float, zero_less_float
  1570 
  1571 * New theory HOL/Library/DAList provides an abstract type for
  1572 association lists with distinct keys.
  1573 
  1574 * Session HOL/IMP: Added new theory of abstract interpretation of
  1575 annotated commands.
  1576 
  1577 * Session HOL-Import: Re-implementation from scratch is faster,
  1578 simpler, and more scalable.  Requires a proof bundle, which is
  1579 available as an external component.  Discontinued old (and mostly
  1580 dead) Importer for HOL4 and HOL Light.  INCOMPATIBILITY.
  1581 
  1582 * Session HOL-Word: Discontinued many redundant theorems specific to
  1583 type 'a word. INCOMPATIBILITY, use the corresponding generic theorems
  1584 instead.
  1585 
  1586   word_sub_alt ~> word_sub_wi
  1587   word_add_alt ~> word_add_def
  1588   word_mult_alt ~> word_mult_def
  1589   word_minus_alt ~> word_minus_def
  1590   word_0_alt ~> word_0_wi
  1591   word_1_alt ~> word_1_wi
  1592   word_add_0 ~> add_0_left
  1593   word_add_0_right ~> add_0_right
  1594   word_mult_1 ~> mult_1_left
  1595   word_mult_1_right ~> mult_1_right
  1596   word_add_commute ~> add_commute
  1597   word_add_assoc ~> add_assoc
  1598   word_add_left_commute ~> add_left_commute
  1599   word_mult_commute ~> mult_commute
  1600   word_mult_assoc ~> mult_assoc
  1601   word_mult_left_commute ~> mult_left_commute
  1602   word_left_distrib ~> left_distrib
  1603   word_right_distrib ~> right_distrib
  1604   word_left_minus ~> left_minus
  1605   word_diff_0_right ~> diff_0_right
  1606   word_diff_self ~> diff_self
  1607   word_sub_def ~> diff_minus
  1608   word_diff_minus ~> diff_minus
  1609   word_add_ac ~> add_ac
  1610   word_mult_ac ~> mult_ac
  1611   word_plus_ac0 ~> add_0_left add_0_right add_ac
  1612   word_times_ac1 ~> mult_1_left mult_1_right mult_ac
  1613   word_order_trans ~> order_trans
  1614   word_order_refl ~> order_refl
  1615   word_order_antisym ~> order_antisym
  1616   word_order_linear ~> linorder_linear
  1617   lenw1_zero_neq_one ~> zero_neq_one
  1618   word_number_of_eq ~> number_of_eq
  1619   word_of_int_add_hom ~> wi_hom_add
  1620   word_of_int_sub_hom ~> wi_hom_sub
  1621   word_of_int_mult_hom ~> wi_hom_mult
  1622   word_of_int_minus_hom ~> wi_hom_neg
  1623   word_of_int_succ_hom ~> wi_hom_succ
  1624   word_of_int_pred_hom ~> wi_hom_pred
  1625   word_of_int_0_hom ~> word_0_wi
  1626   word_of_int_1_hom ~> word_1_wi
  1627 
  1628 * Session HOL-Word: New proof method "word_bitwise" for splitting
  1629 machine word equalities and inequalities into logical circuits,
  1630 defined in HOL/Word/WordBitwise.thy.  Supports addition, subtraction,
  1631 multiplication, shifting by constants, bitwise operators and numeric
  1632 constants.  Requires fixed-length word types, not 'a word.  Solves
  1633 many standard word identities outright and converts more into first
  1634 order problems amenable to blast or similar.  See also examples in
  1635 HOL/Word/Examples/WordExamples.thy.
  1636 
  1637 * Session HOL-Probability: Introduced the type "'a measure" to
  1638 represent measures, this replaces the records 'a algebra and 'a
  1639 measure_space.  The locales based on subset_class now have two
  1640 locale-parameters the space \<Omega> and the set of measurable sets M.
  1641 The product of probability spaces uses now the same constant as the
  1642 finite product of sigma-finite measure spaces "PiM :: ('i => 'a)
  1643 measure".  Most constants are defined now outside of locales and gain
  1644 an additional parameter, like null_sets, almost_eventually or \<mu>'.
  1645 Measure space constructions for distributions and densities now got
  1646 their own constants distr and density.  Instead of using locales to
  1647 describe measure spaces with a finite space, the measure count_space
  1648 and point_measure is introduced.  INCOMPATIBILITY.
  1649 
  1650   Renamed constants:
  1651   measure -> emeasure
  1652   finite_measure.\<mu>' -> measure
  1653   product_algebra_generator -> prod_algebra
  1654   product_prob_space.emb -> prod_emb
  1655   product_prob_space.infprod_algebra -> PiM
  1656 
  1657   Removed locales:
  1658   completeable_measure_space
  1659   finite_measure_space
  1660   finite_prob_space
  1661   finite_product_finite_prob_space
  1662   finite_product_sigma_algebra
  1663   finite_sigma_algebra
  1664   measure_space
  1665   pair_finite_prob_space
  1666   pair_finite_sigma_algebra
  1667   pair_finite_space
  1668   pair_sigma_algebra
  1669   product_sigma_algebra
  1670 
  1671   Removed constants:
  1672   conditional_space
  1673   distribution -> use distr measure, or distributed predicate
  1674   image_space
  1675   joint_distribution -> use distr measure, or distributed predicate
  1676   pair_measure_generator
  1677   product_prob_space.infprod_algebra -> use PiM
  1678   subvimage
  1679 
  1680   Replacement theorems:
  1681   finite_additivity_sufficient -> ring_of_sets.countably_additiveI_finite
  1682   finite_measure.empty_measure -> measure_empty
  1683   finite_measure.finite_continuity_from_above -> finite_measure.finite_Lim_measure_decseq
  1684   finite_measure.finite_continuity_from_below -> finite_measure.finite_Lim_measure_incseq
  1685   finite_measure.finite_measure_countably_subadditive -> finite_measure.finite_measure_subadditive_countably
  1686   finite_measure.finite_measure_eq -> finite_measure.emeasure_eq_measure
  1687   finite_measure.finite_measure -> finite_measure.emeasure_finite
  1688   finite_measure.finite_measure_finite_singleton -> finite_measure.finite_measure_eq_setsum_singleton
  1689   finite_measure.positive_measure' -> measure_nonneg
  1690   finite_measure.real_measure -> finite_measure.emeasure_real
  1691   finite_product_prob_space.finite_measure_times -> finite_product_prob_space.finite_measure_PiM_emb
  1692   finite_product_sigma_algebra.in_P -> sets_PiM_I_finite
  1693   finite_product_sigma_algebra.P_empty -> space_PiM_empty, sets_PiM_empty
  1694   information_space.conditional_entropy_eq -> information_space.conditional_entropy_simple_distributed
  1695   information_space.conditional_entropy_positive -> information_space.conditional_entropy_nonneg_simple
  1696   information_space.conditional_mutual_information_eq_mutual_information -> information_space.conditional_mutual_information_eq_mutual_information_simple
  1697   information_space.conditional_mutual_information_generic_positive -> information_space.conditional_mutual_information_nonneg_simple
  1698   information_space.conditional_mutual_information_positive -> information_space.conditional_mutual_information_nonneg_simple
  1699   information_space.entropy_commute -> information_space.entropy_commute_simple
  1700   information_space.entropy_eq -> information_space.entropy_simple_distributed
  1701   information_space.entropy_generic_eq -> information_space.entropy_simple_distributed
  1702   information_space.entropy_positive -> information_space.entropy_nonneg_simple
  1703   information_space.entropy_uniform_max -> information_space.entropy_uniform
  1704   information_space.KL_eq_0_imp -> information_space.KL_eq_0_iff_eq
  1705   information_space.KL_eq_0 -> information_space.KL_same_eq_0
  1706   information_space.KL_ge_0 -> information_space.KL_nonneg
  1707   information_space.mutual_information_eq -> information_space.mutual_information_simple_distributed
  1708   information_space.mutual_information_positive -> information_space.mutual_information_nonneg_simple
  1709   Int_stable_cuboids -> Int_stable_atLeastAtMost
  1710   Int_stable_product_algebra_generator -> positive_integral
  1711   measure_preserving -> equality "distr M N f = N" "f : measurable M N"
  1712   measure_space.additive -> emeasure_additive
  1713   measure_space.AE_iff_null_set -> AE_iff_null
  1714   measure_space.almost_everywhere_def -> eventually_ae_filter
  1715   measure_space.almost_everywhere_vimage -> AE_distrD
  1716   measure_space.continuity_from_above -> INF_emeasure_decseq
  1717   measure_space.continuity_from_above_Lim -> Lim_emeasure_decseq
  1718   measure_space.continuity_from_below_Lim -> Lim_emeasure_incseq
  1719   measure_space.continuity_from_below -> SUP_emeasure_incseq
  1720   measure_space_density -> emeasure_density
  1721   measure_space.density_is_absolutely_continuous -> absolutely_continuousI_density
  1722   measure_space.integrable_vimage -> integrable_distr
  1723   measure_space.integral_translated_density -> integral_density
  1724   measure_space.integral_vimage -> integral_distr
  1725   measure_space.measure_additive -> plus_emeasure
  1726   measure_space.measure_compl -> emeasure_compl
  1727   measure_space.measure_countable_increasing -> emeasure_countable_increasing
  1728   measure_space.measure_countably_subadditive -> emeasure_subadditive_countably
  1729   measure_space.measure_decseq -> decseq_emeasure
  1730   measure_space.measure_Diff -> emeasure_Diff
  1731   measure_space.measure_Diff_null_set -> emeasure_Diff_null_set
  1732   measure_space.measure_eq_0 -> emeasure_eq_0
  1733   measure_space.measure_finitely_subadditive -> emeasure_subadditive_finite
  1734   measure_space.measure_finite_singleton -> emeasure_eq_setsum_singleton
  1735   measure_space.measure_incseq -> incseq_emeasure
  1736   measure_space.measure_insert -> emeasure_insert
  1737   measure_space.measure_mono -> emeasure_mono
  1738   measure_space.measure_not_negative -> emeasure_not_MInf
  1739   measure_space.measure_preserving_Int_stable -> measure_eqI_generator_eq
  1740   measure_space.measure_setsum -> setsum_emeasure
  1741   measure_space.measure_setsum_split -> setsum_emeasure_cover
  1742   measure_space.measure_space_vimage -> emeasure_distr
  1743   measure_space.measure_subadditive_finite -> emeasure_subadditive_finite
  1744   measure_space.measure_subadditive -> subadditive
  1745   measure_space.measure_top -> emeasure_space
  1746   measure_space.measure_UN_eq_0 -> emeasure_UN_eq_0
  1747   measure_space.measure_Un_null_set -> emeasure_Un_null_set
  1748   measure_space.positive_integral_translated_density -> positive_integral_density
  1749   measure_space.positive_integral_vimage -> positive_integral_distr
  1750   measure_space.real_continuity_from_above -> Lim_measure_decseq
  1751   measure_space.real_continuity_from_below -> Lim_measure_incseq
  1752   measure_space.real_measure_countably_subadditive -> measure_subadditive_countably
  1753   measure_space.real_measure_Diff -> measure_Diff
  1754   measure_space.real_measure_finite_Union -> measure_finite_Union
  1755   measure_space.real_measure_setsum_singleton -> measure_eq_setsum_singleton
  1756   measure_space.real_measure_subadditive -> measure_subadditive
  1757   measure_space.real_measure_Union -> measure_Union
  1758   measure_space.real_measure_UNION -> measure_UNION
  1759   measure_space.simple_function_vimage -> simple_function_comp
  1760   measure_space.simple_integral_vimage -> simple_integral_distr
  1761   measure_space.simple_integral_vimage -> simple_integral_distr
  1762   measure_unique_Int_stable -> measure_eqI_generator_eq
  1763   measure_unique_Int_stable_vimage -> measure_eqI_generator_eq
  1764   pair_sigma_algebra.measurable_cut_fst -> sets_Pair1
  1765   pair_sigma_algebra.measurable_cut_snd -> sets_Pair2
  1766   pair_sigma_algebra.measurable_pair_image_fst -> measurable_Pair1
  1767   pair_sigma_algebra.measurable_pair_image_snd -> measurable_Pair2
  1768   pair_sigma_algebra.measurable_product_swap -> measurable_pair_swap_iff
  1769   pair_sigma_algebra.pair_sigma_algebra_measurable -> measurable_pair_swap
  1770   pair_sigma_algebra.pair_sigma_algebra_swap_measurable -> measurable_pair_swap'
  1771   pair_sigma_algebra.sets_swap -> sets_pair_swap
  1772   pair_sigma_finite.measure_cut_measurable_fst -> pair_sigma_finite.measurable_emeasure_Pair1
  1773   pair_sigma_finite.measure_cut_measurable_snd -> pair_sigma_finite.measurable_emeasure_Pair2
  1774   pair_sigma_finite.measure_preserving_swap -> pair_sigma_finite.distr_pair_swap
  1775   pair_sigma_finite.pair_measure_alt2 -> pair_sigma_finite.emeasure_pair_measure_alt2
  1776   pair_sigma_finite.pair_measure_alt -> pair_sigma_finite.emeasure_pair_measure_alt
  1777   pair_sigma_finite.pair_measure_times -> pair_sigma_finite.emeasure_pair_measure_Times
  1778   prob_space.indep_distribution_eq_measure -> prob_space.indep_vars_iff_distr_eq_PiM
  1779   prob_space.indep_var_distributionD -> prob_space.indep_var_distribution_eq
  1780   prob_space.measure_space_1 -> prob_space.emeasure_space_1
  1781   prob_space.prob_space_vimage -> prob_space_distr
  1782   prob_space.random_variable_restrict -> measurable_restrict
  1783   prob_space_unique_Int_stable -> measure_eqI_prob_space
  1784   product_algebraE -> prod_algebraE_all
  1785   product_algebra_generator_der -> prod_algebra_eq_finite
  1786   product_algebra_generator_into_space -> prod_algebra_sets_into_space
  1787   product_algebraI -> sets_PiM_I_finite
  1788   product_measure_exists -> product_sigma_finite.sigma_finite
  1789   product_prob_space.finite_index_eq_finite_product -> product_prob_space.sets_PiM_generator
  1790   product_prob_space.finite_measure_infprod_emb_Pi -> product_prob_space.measure_PiM_emb
  1791   product_prob_space.infprod_spec -> product_prob_space.emeasure_PiM_emb_not_empty
  1792   product_prob_space.measurable_component -> measurable_component_singleton
  1793   product_prob_space.measurable_emb -> measurable_prod_emb
  1794   product_prob_space.measurable_into_infprod_algebra -> measurable_PiM_single
  1795   product_prob_space.measurable_singleton_infprod -> measurable_component_singleton
  1796   product_prob_space.measure_emb -> emeasure_prod_emb
  1797   product_prob_space.measure_preserving_restrict -> product_prob_space.distr_restrict
  1798   product_sigma_algebra.product_algebra_into_space -> space_closed
  1799   product_sigma_finite.measure_fold -> product_sigma_finite.distr_merge
  1800   product_sigma_finite.measure_preserving_component_singelton -> product_sigma_finite.distr_singleton
  1801   product_sigma_finite.measure_preserving_merge -> product_sigma_finite.distr_merge
  1802   sequence_space.measure_infprod -> sequence_space.measure_PiM_countable
  1803   sets_product_algebra -> sets_PiM
  1804   sigma_algebra.measurable_sigma -> measurable_measure_of
  1805   sigma_finite_measure.disjoint_sigma_finite -> sigma_finite_disjoint
  1806   sigma_finite_measure.RN_deriv_vimage -> sigma_finite_measure.RN_deriv_distr
  1807   sigma_product_algebra_sigma_eq -> sigma_prod_algebra_sigma_eq
  1808   space_product_algebra -> space_PiM
  1809 
  1810 * Session HOL-TPTP: support to parse and import TPTP problems (all
  1811 languages) into Isabelle/HOL.
  1812 
  1813 
  1814 *** FOL ***
  1815 
  1816 * New "case_product" attribute (see HOL).
  1817 
  1818 
  1819 *** ZF ***
  1820 
  1821 * Greater support for structured proofs involving induction or case
  1822 analysis.
  1823 
  1824 * Much greater use of mathematical symbols.
  1825 
  1826 * Removal of many ML theorem bindings.  INCOMPATIBILITY.
  1827 
  1828 
  1829 *** ML ***
  1830 
  1831 * Antiquotation @{keyword "name"} produces a parser for outer syntax
  1832 from a minor keyword introduced via theory header declaration.
  1833 
  1834 * Antiquotation @{command_spec "name"} produces the
  1835 Outer_Syntax.command_spec from a major keyword introduced via theory
  1836 header declaration; it can be passed to Outer_Syntax.command etc.
  1837 
  1838 * Local_Theory.define no longer hard-wires default theorem name
  1839 "foo_def", but retains the binding as given.  If that is Binding.empty
  1840 / Attrib.empty_binding, the result is not registered as user-level
  1841 fact.  The Local_Theory.define_internal variant allows to specify a
  1842 non-empty name (used for the foundation in the background theory),
  1843 while omitting the fact binding in the user-context.  Potential
  1844 INCOMPATIBILITY for derived definitional packages: need to specify
  1845 naming policy for primitive definitions more explicitly.
  1846 
  1847 * Renamed Thm.capply to Thm.apply, and Thm.cabs to Thm.lambda in
  1848 conformance with similar operations in structure Term and Logic.
  1849 
  1850 * Antiquotation @{attributes [...]} embeds attribute source
  1851 representation into the ML text, which is particularly useful with
  1852 declarations like Local_Theory.note.
  1853 
  1854 * Structure Proof_Context follows standard naming scheme.  Old
  1855 ProofContext has been discontinued.  INCOMPATIBILITY.
  1856 
  1857 * Refined Local_Theory.declaration {syntax, pervasive}, with subtle
  1858 change of semantics: update is applied to auxiliary local theory
  1859 context as well.
  1860 
  1861 * Modernized some old-style infix operations:
  1862 
  1863   addeqcongs    ~> Simplifier.add_eqcong
  1864   deleqcongs    ~> Simplifier.del_eqcong
  1865   addcongs      ~> Simplifier.add_cong
  1866   delcongs      ~> Simplifier.del_cong
  1867   setmksimps    ~> Simplifier.set_mksimps
  1868   setmkcong     ~> Simplifier.set_mkcong
  1869   setmksym      ~> Simplifier.set_mksym
  1870   setmkeqTrue   ~> Simplifier.set_mkeqTrue
  1871   settermless   ~> Simplifier.set_termless
  1872   setsubgoaler  ~> Simplifier.set_subgoaler
  1873   addsplits     ~> Splitter.add_split
  1874   delsplits     ~> Splitter.del_split
  1875 
  1876 
  1877 *** System ***
  1878 
  1879 * USER_HOME settings variable points to cross-platform user home
  1880 directory, which coincides with HOME on POSIX systems only.  Likewise,
  1881 the Isabelle path specification "~" now expands to $USER_HOME, instead
  1882 of former $HOME.  A different default for USER_HOME may be set
  1883 explicitly in shell environment, before Isabelle settings are
  1884 evaluated.  Minor INCOMPATIBILITY: need to adapt Isabelle path where
  1885 the generic user home was intended.
  1886 
  1887 * ISABELLE_HOME_WINDOWS refers to ISABELLE_HOME in windows file name
  1888 notation, which is useful for the jEdit file browser, for example.
  1889 
  1890 * ISABELLE_JDK_HOME settings variable points to JDK with javac and jar
  1891 (not just JRE).
  1892 
  1893 
  1894 
  1895 New in Isabelle2011-1 (October 2011)
  1896 ------------------------------------
  1897 
  1898 *** General ***
  1899 
  1900 * Improved Isabelle/jEdit Prover IDE (PIDE), which can be invoked as
  1901 "isabelle jedit" or "ISABELLE_HOME/Isabelle" on the command line.
  1902 
  1903   - Management of multiple theory files directly from the editor
  1904     buffer store -- bypassing the file-system (no requirement to save
  1905     files for checking).
  1906 
  1907   - Markup of formal entities within the text buffer, with semantic
  1908     highlighting, tooltips and hyperlinks to jump to defining source
  1909     positions.
  1910 
  1911   - Improved text rendering, with sub/superscripts in the source
  1912     buffer (including support for copy/paste wrt. output panel, HTML
  1913     theory output and other non-Isabelle text boxes).
  1914 
  1915   - Refined scheduling of proof checking and printing of results,
  1916     based on interactive editor view.  (Note: jEdit folding and
  1917     narrowing allows to restrict buffer perspectives explicitly.)
  1918 
  1919   - Reduced CPU performance requirements, usable on machines with few
  1920     cores.
  1921 
  1922   - Reduced memory requirements due to pruning of unused document
  1923     versions (garbage collection).
  1924 
  1925 See also ~~/src/Tools/jEdit/README.html for further information,
  1926 including some remaining limitations.
  1927 
  1928 * Theory loader: source files are exclusively located via the master
  1929 directory of each theory node (where the .thy file itself resides).
  1930 The global load path (such as src/HOL/Library) has been discontinued.
  1931 Note that the path element ~~ may be used to reference theories in the
  1932 Isabelle home folder -- for instance, "~~/src/HOL/Library/FuncSet".
  1933 INCOMPATIBILITY.
  1934 
  1935 * Theory loader: source files are identified by content via SHA1
  1936 digests.  Discontinued former path/modtime identification and optional
  1937 ISABELLE_FILE_IDENT plugin scripts.
  1938 
  1939 * Parallelization of nested Isar proofs is subject to
  1940 Goal.parallel_proofs_threshold (default 100).  See also isabelle
  1941 usedir option -Q.
  1942 
  1943 * Name space: former unsynchronized references are now proper
  1944 configuration options, with more conventional names:
  1945 
  1946   long_names   ~> names_long
  1947   short_names  ~> names_short
  1948   unique_names ~> names_unique
  1949 
  1950 Minor INCOMPATIBILITY, need to declare options in context like this:
  1951 
  1952   declare [[names_unique = false]]
  1953 
  1954 * Literal facts `prop` may contain dummy patterns, e.g. `_ = _`.  Note
  1955 that the result needs to be unique, which means fact specifications
  1956 may have to be refined after enriching a proof context.
  1957 
  1958 * Attribute "case_names" has been refined: the assumptions in each case
  1959 can be named now by following the case name with [name1 name2 ...].
  1960 
  1961 * Isabelle/Isar reference manual has been updated and extended:
  1962   - "Synopsis" provides a catalog of main Isar language concepts.
  1963   - Formal references in syntax diagrams, via @{rail} antiquotation.
  1964   - Updated material from classic "ref" manual, notably about
  1965     "Classical Reasoner".
  1966 
  1967 
  1968 *** HOL ***
  1969 
  1970 * Class bot and top require underlying partial order rather than
  1971 preorder: uniqueness of bot and top is guaranteed.  INCOMPATIBILITY.
  1972 
  1973 * Class complete_lattice: generalized a couple of lemmas from sets;
  1974 generalized theorems INF_cong and SUP_cong.  New type classes for
  1975 complete boolean algebras and complete linear orders.  Lemmas
  1976 Inf_less_iff, less_Sup_iff, INF_less_iff, less_SUP_iff now reside in
  1977 class complete_linorder.
  1978 
  1979 Changed proposition of lemmas Inf_bool_def, Sup_bool_def, Inf_fun_def,
  1980 Sup_fun_def, Inf_apply, Sup_apply.
  1981 
  1982 Removed redundant lemmas (the right hand side gives hints how to
  1983 replace them for (metis ...), or (simp only: ...) proofs):
  1984 
  1985   Inf_singleton ~> Inf_insert [where A="{}", unfolded Inf_empty inf_top_right]
  1986   Sup_singleton ~> Sup_insert [where A="{}", unfolded Sup_empty sup_bot_right]
  1987   Inf_binary ~> Inf_insert, Inf_empty, and inf_top_right
  1988   Sup_binary ~> Sup_insert, Sup_empty, and sup_bot_right
  1989   Int_eq_Inter ~> Inf_insert, Inf_empty, and inf_top_right
  1990   Un_eq_Union ~> Sup_insert, Sup_empty, and sup_bot_right
  1991   Inter_def ~> INF_def, image_def
  1992   Union_def ~> SUP_def, image_def
  1993   INT_eq ~> INF_def, and image_def
  1994   UN_eq ~> SUP_def, and image_def
  1995   INF_subset ~> INF_superset_mono [OF _ order_refl]
  1996 
  1997 More consistent and comprehensive names:
  1998 
  1999   INTER_eq_Inter_image ~> INF_def
  2000   UNION_eq_Union_image ~> SUP_def
  2001   INFI_def ~> INF_def
  2002   SUPR_def ~> SUP_def
  2003   INF_leI ~> INF_lower
  2004   INF_leI2 ~> INF_lower2
  2005   le_INFI ~> INF_greatest
  2006   le_SUPI ~> SUP_upper
  2007   le_SUPI2 ~> SUP_upper2
  2008   SUP_leI ~> SUP_least
  2009   INFI_bool_eq ~> INF_bool_eq
  2010   SUPR_bool_eq ~> SUP_bool_eq
  2011   INFI_apply ~> INF_apply
  2012   SUPR_apply ~> SUP_apply
  2013   INTER_def ~> INTER_eq
  2014   UNION_def ~> UNION_eq
  2015 
  2016 INCOMPATIBILITY.
  2017 
  2018 * Renamed theory Complete_Lattice to Complete_Lattices.
  2019 INCOMPATIBILITY.
  2020 
  2021 * Theory Complete_Lattices: lemmas Inf_eq_top_iff, INF_eq_top_iff,
  2022 INF_image, Inf_insert, INF_top, Inf_top_conv, INF_top_conv, SUP_bot,
  2023 Sup_bot_conv, SUP_bot_conv, Sup_eq_top_iff, SUP_eq_top_iff, SUP_image,
  2024 Sup_insert are now declared as [simp].  INCOMPATIBILITY.
  2025 
  2026 * Theory Lattice: lemmas compl_inf_bot, compl_le_comp_iff,
  2027 compl_sup_top, inf_idem, inf_left_idem, inf_sup_absorb, sup_idem,
  2028 sup_inf_absob, sup_left_idem are now declared as [simp].  Minor
  2029 INCOMPATIBILITY.
  2030 
  2031 * Added syntactic classes "inf" and "sup" for the respective
  2032 constants.  INCOMPATIBILITY: Changes in the argument order of the
  2033 (mostly internal) locale predicates for some derived classes.
  2034 
  2035 * Theorem collections ball_simps and bex_simps do not contain theorems
  2036 referring to UNION any longer; these have been moved to collection
  2037 UN_ball_bex_simps.  INCOMPATIBILITY.
  2038 
  2039 * Theory Archimedean_Field: floor now is defined as parameter of a
  2040 separate type class floor_ceiling.
  2041 
  2042 * Theory Finite_Set: more coherent development of fold_set locales:
  2043 
  2044     locale fun_left_comm ~> locale comp_fun_commute
  2045     locale fun_left_comm_idem ~> locale comp_fun_idem
  2046 
  2047 Both use point-free characterization; interpretation proofs may need
  2048 adjustment.  INCOMPATIBILITY.
  2049 
  2050 * Theory Limits: Type "'a net" has been renamed to "'a filter", in
  2051 accordance with standard mathematical terminology. INCOMPATIBILITY.
  2052 
  2053 * Theory Complex_Main: The locale interpretations for the
  2054 bounded_linear and bounded_bilinear locales have been removed, in
  2055 order to reduce the number of duplicate lemmas. Users must use the
  2056 original names for distributivity theorems, potential INCOMPATIBILITY.
  2057 
  2058   divide.add ~> add_divide_distrib
  2059   divide.diff ~> diff_divide_distrib
  2060   divide.setsum ~> setsum_divide_distrib
  2061   mult.add_right ~> right_distrib
  2062   mult.diff_right ~> right_diff_distrib
  2063   mult_right.setsum ~> setsum_right_distrib
  2064   mult_left.diff ~> left_diff_distrib
  2065 
  2066 * Theory Complex_Main: Several redundant theorems have been removed or
  2067 replaced by more general versions. INCOMPATIBILITY.
  2068 
  2069   real_diff_def ~> minus_real_def
  2070   real_divide_def ~> divide_real_def
  2071   real_less_def ~> less_le
  2072   real_abs_def ~> abs_real_def
  2073   real_sgn_def ~> sgn_real_def
  2074   real_mult_commute ~> mult_commute
  2075   real_mult_assoc ~> mult_assoc
  2076   real_mult_1 ~> mult_1_left
  2077   real_add_mult_distrib ~> left_distrib
  2078   real_zero_not_eq_one ~> zero_neq_one
  2079   real_mult_inverse_left ~> left_inverse
  2080   INVERSE_ZERO ~> inverse_zero
  2081   real_le_refl ~> order_refl
  2082   real_le_antisym ~> order_antisym
  2083   real_le_trans ~> order_trans
  2084   real_le_linear ~> linear
  2085   real_le_eq_diff ~> le_iff_diff_le_0
  2086   real_add_left_mono ~> add_left_mono
  2087   real_mult_order ~> mult_pos_pos
  2088   real_mult_less_mono2 ~> mult_strict_left_mono
  2089   real_of_int_real_of_nat ~> real_of_int_of_nat_eq
  2090   real_0_le_divide_iff ~> zero_le_divide_iff
  2091   realpow_two_disj ~> power2_eq_iff
  2092   real_squared_diff_one_factored ~> square_diff_one_factored
  2093   realpow_two_diff ~> square_diff_square_factored
  2094   reals_complete2 ~> complete_real
  2095   real_sum_squared_expand ~> power2_sum
  2096   exp_ln_eq ~> ln_unique
  2097   expi_add ~> exp_add
  2098   expi_zero ~> exp_zero
  2099   lemma_DERIV_subst ~> DERIV_cong
  2100   LIMSEQ_Zfun_iff ~> tendsto_Zfun_iff
  2101   LIMSEQ_const ~> tendsto_const
  2102   LIMSEQ_norm ~> tendsto_norm
  2103   LIMSEQ_add ~> tendsto_add
  2104   LIMSEQ_minus ~> tendsto_minus
  2105   LIMSEQ_minus_cancel ~> tendsto_minus_cancel
  2106   LIMSEQ_diff ~> tendsto_diff
  2107   bounded_linear.LIMSEQ ~> bounded_linear.tendsto
  2108   bounded_bilinear.LIMSEQ ~> bounded_bilinear.tendsto
  2109   LIMSEQ_mult ~> tendsto_mult
  2110   LIMSEQ_inverse ~> tendsto_inverse
  2111   LIMSEQ_divide ~> tendsto_divide
  2112   LIMSEQ_pow ~> tendsto_power
  2113   LIMSEQ_setsum ~> tendsto_setsum
  2114   LIMSEQ_setprod ~> tendsto_setprod
  2115   LIMSEQ_norm_zero ~> tendsto_norm_zero_iff
  2116   LIMSEQ_rabs_zero ~> tendsto_rabs_zero_iff
  2117   LIMSEQ_imp_rabs ~> tendsto_rabs
  2118   LIMSEQ_add_minus ~> tendsto_add [OF _ tendsto_minus]
  2119   LIMSEQ_add_const ~> tendsto_add [OF _ tendsto_const]
  2120   LIMSEQ_diff_const ~> tendsto_diff [OF _ tendsto_const]
  2121   LIMSEQ_Complex ~> tendsto_Complex
  2122   LIM_ident ~> tendsto_ident_at
  2123   LIM_const ~> tendsto_const
  2124   LIM_add ~> tendsto_add
  2125   LIM_add_zero ~> tendsto_add_zero
  2126   LIM_minus ~> tendsto_minus
  2127   LIM_diff ~> tendsto_diff
  2128   LIM_norm ~> tendsto_norm
  2129   LIM_norm_zero ~> tendsto_norm_zero
  2130   LIM_norm_zero_cancel ~> tendsto_norm_zero_cancel
  2131   LIM_norm_zero_iff ~> tendsto_norm_zero_iff
  2132   LIM_rabs ~> tendsto_rabs
  2133   LIM_rabs_zero ~> tendsto_rabs_zero
  2134   LIM_rabs_zero_cancel ~> tendsto_rabs_zero_cancel
  2135   LIM_rabs_zero_iff ~> tendsto_rabs_zero_iff
  2136   LIM_compose ~> tendsto_compose
  2137   LIM_mult ~> tendsto_mult
  2138   LIM_scaleR ~> tendsto_scaleR
  2139   LIM_of_real ~> tendsto_of_real
  2140   LIM_power ~> tendsto_power
  2141   LIM_inverse ~> tendsto_inverse
  2142   LIM_sgn ~> tendsto_sgn
  2143   isCont_LIM_compose ~> isCont_tendsto_compose
  2144   bounded_linear.LIM ~> bounded_linear.tendsto
  2145   bounded_linear.LIM_zero ~> bounded_linear.tendsto_zero
  2146   bounded_bilinear.LIM ~> bounded_bilinear.tendsto
  2147   bounded_bilinear.LIM_prod_zero ~> bounded_bilinear.tendsto_zero
  2148   bounded_bilinear.LIM_left_zero ~> bounded_bilinear.tendsto_left_zero
  2149   bounded_bilinear.LIM_right_zero ~> bounded_bilinear.tendsto_right_zero
  2150   LIM_inverse_fun ~> tendsto_inverse [OF tendsto_ident_at]
  2151 
  2152 * Theory Complex_Main: The definition of infinite series was
  2153 generalized.  Now it is defined on the type class {topological_space,
  2154 comm_monoid_add}.  Hence it is useable also for extended real numbers.
  2155 
  2156 * Theory Complex_Main: The complex exponential function "expi" is now
  2157 a type-constrained abbreviation for "exp :: complex => complex"; thus
  2158 several polymorphic lemmas about "exp" are now applicable to "expi".
  2159 
  2160 * Code generation:
  2161 
  2162   - Theory Library/Code_Char_ord provides native ordering of
  2163     characters in the target language.
  2164 
  2165   - Commands code_module and code_library are legacy, use export_code
  2166     instead.
  2167 
  2168   - Method "evaluation" is legacy, use method "eval" instead.
  2169 
  2170   - Legacy evaluator "SML" is deactivated by default.  May be
  2171     reactivated by the following theory command:
  2172 
  2173       setup {* Value.add_evaluator ("SML", Codegen.eval_term) *}
  2174 
  2175 * Declare ext [intro] by default.  Rare INCOMPATIBILITY.
  2176 
  2177 * New proof method "induction" that gives induction hypotheses the
  2178 name "IH", thus distinguishing them from further hypotheses that come
  2179 from rule induction.  The latter are still called "hyps".  Method
  2180 "induction" is a thin wrapper around "induct" and follows the same
  2181 syntax.
  2182 
  2183 * Method "fastsimp" has been renamed to "fastforce", but "fastsimp" is
  2184 still available as a legacy feature for some time.
  2185 
  2186 * Nitpick:
  2187   - Added "need" and "total_consts" options.
  2188   - Reintroduced "show_skolems" option by popular demand.
  2189   - Renamed attribute: nitpick_def ~> nitpick_unfold.
  2190     INCOMPATIBILITY.
  2191 
  2192 * Sledgehammer:
  2193   - Use quasi-sound (and efficient) translations by default.
  2194   - Added support for the following provers: E-ToFoF, LEO-II,
  2195     Satallax, SNARK, Waldmeister, and Z3 with TPTP syntax.
  2196   - Automatically preplay and minimize proofs before showing them if
  2197     this can be done within reasonable time.
  2198   - sledgehammer available_provers ~> sledgehammer supported_provers.
  2199     INCOMPATIBILITY.
  2200   - Added "preplay_timeout", "slicing", "type_enc", "sound",
  2201     "max_mono_iters", and "max_new_mono_instances" options.
  2202   - Removed "explicit_apply" and "full_types" options as well as "Full
  2203     Types" Proof General menu item. INCOMPATIBILITY.
  2204 
  2205 * Metis:
  2206   - Removed "metisF" -- use "metis" instead. INCOMPATIBILITY.
  2207   - Obsoleted "metisFT" -- use "metis (full_types)" instead.
  2208     INCOMPATIBILITY.
  2209 
  2210 * Command 'try':
  2211   - Renamed 'try_methods' and added "simp:", "intro:", "dest:", and
  2212     "elim:" options. INCOMPATIBILITY.
  2213   - Introduced 'try' that not only runs 'try_methods' but also
  2214     'solve_direct', 'sledgehammer', 'quickcheck', and 'nitpick'.
  2215 
  2216 * Quickcheck:
  2217   - Added "eval" option to evaluate terms for the found counterexample
  2218     (currently only supported by the default (exhaustive) tester).
  2219   - Added post-processing of terms to obtain readable counterexamples
  2220     (currently only supported by the default (exhaustive) tester).
  2221   - New counterexample generator quickcheck[narrowing] enables
  2222     narrowing-based testing.  Requires the Glasgow Haskell compiler
  2223     with its installation location defined in the Isabelle settings
  2224     environment as ISABELLE_GHC.
  2225   - Removed quickcheck tester "SML" based on the SML code generator
  2226     (formly in HOL/Library).
  2227 
  2228 * Function package: discontinued option "tailrec".  INCOMPATIBILITY,
  2229 use 'partial_function' instead.
  2230 
  2231 * Theory Library/Extended_Reals replaces now the positive extended
  2232 reals found in probability theory. This file is extended by
  2233 Multivariate_Analysis/Extended_Real_Limits.
  2234 
  2235 * Theory Library/Old_Recdef: old 'recdef' package has been moved here,
  2236 from where it must be imported explicitly if it is really required.
  2237 INCOMPATIBILITY.
  2238 
  2239 * Theory Library/Wfrec: well-founded recursion combinator "wfrec" has
  2240 been moved here.  INCOMPATIBILITY.
  2241 
  2242 * Theory Library/Saturated provides type of numbers with saturated
  2243 arithmetic.
  2244 
  2245 * Theory Library/Product_Lattice defines a pointwise ordering for the
  2246 product type 'a * 'b, and provides instance proofs for various order
  2247 and lattice type classes.
  2248 
  2249 * Theory Library/Countable now provides the "countable_datatype" proof
  2250 method for proving "countable" class instances for datatypes.
  2251 
  2252 * Theory Library/Cset_Monad allows do notation for computable sets
  2253 (cset) via the generic monad ad-hoc overloading facility.
  2254 
  2255 * Library: Theories of common data structures are split into theories
  2256 for implementation, an invariant-ensuring type, and connection to an
  2257 abstract type. INCOMPATIBILITY.
  2258 
  2259   - RBT is split into RBT and RBT_Mapping.
  2260   - AssocList is split and renamed into AList and AList_Mapping.
  2261   - DList is split into DList_Impl, DList, and DList_Cset.
  2262   - Cset is split into Cset and List_Cset.
  2263 
  2264 * Theory Library/Nat_Infinity has been renamed to
  2265 Library/Extended_Nat, with name changes of the following types and
  2266 constants:
  2267 
  2268   type inat   ~> type enat
  2269   Fin         ~> enat
  2270   Infty       ~> infinity (overloaded)
  2271   iSuc        ~> eSuc
  2272   the_Fin     ~> the_enat
  2273 
  2274 Every theorem name containing "inat", "Fin", "Infty", or "iSuc" has
  2275 been renamed accordingly. INCOMPATIBILITY.
  2276 
  2277 * Session Multivariate_Analysis: The euclidean_space type class now
  2278 fixes a constant "Basis :: 'a set" consisting of the standard
  2279 orthonormal basis for the type. Users now have the option of
  2280 quantifying over this set instead of using the "basis" function, e.g.
  2281 "ALL x:Basis. P x" vs "ALL i<DIM('a). P (basis i)".
  2282 
  2283 * Session Multivariate_Analysis: Type "('a, 'b) cart" has been renamed
  2284 to "('a, 'b) vec" (the syntax "'a ^ 'b" remains unaffected). Constants
  2285 "Cart_nth" and "Cart_lambda" have been respectively renamed to
  2286 "vec_nth" and "vec_lambda"; theorems mentioning those names have
  2287 changed to match. Definition theorems for overloaded constants now use
  2288 the standard "foo_vec_def" naming scheme. A few other theorems have
  2289 been renamed as follows (INCOMPATIBILITY):
  2290 
  2291   Cart_eq          ~> vec_eq_iff
  2292   dist_nth_le_cart ~> dist_vec_nth_le
  2293   tendsto_vector   ~> vec_tendstoI
  2294   Cauchy_vector    ~> vec_CauchyI
  2295 
  2296 * Session Multivariate_Analysis: Several duplicate theorems have been
  2297 removed, and other theorems have been renamed or replaced with more
  2298 general versions. INCOMPATIBILITY.
  2299 
  2300   finite_choice ~> finite_set_choice
  2301   eventually_conjI ~> eventually_conj
  2302   eventually_and ~> eventually_conj_iff
  2303   eventually_false ~> eventually_False
  2304   setsum_norm ~> norm_setsum
  2305   Lim_sequentially ~> LIMSEQ_def
  2306   Lim_ident_at ~> LIM_ident
  2307   Lim_const ~> tendsto_const
  2308   Lim_cmul ~> tendsto_scaleR [OF tendsto_const]
  2309   Lim_neg ~> tendsto_minus
  2310   Lim_add ~> tendsto_add
  2311   Lim_sub ~> tendsto_diff
  2312   Lim_mul ~> tendsto_scaleR
  2313   Lim_vmul ~> tendsto_scaleR [OF _ tendsto_const]
  2314   Lim_null_norm ~> tendsto_norm_zero_iff [symmetric]
  2315   Lim_linear ~> bounded_linear.tendsto
  2316   Lim_component ~> tendsto_euclidean_component
  2317   Lim_component_cart ~> tendsto_vec_nth
  2318   Lim_inner ~> tendsto_inner [OF tendsto_const]
  2319   dot_lsum ~> inner_setsum_left
  2320   dot_rsum ~> inner_setsum_right
  2321   continuous_cmul ~> continuous_scaleR [OF continuous_const]
  2322   continuous_neg ~> continuous_minus
  2323   continuous_sub ~> continuous_diff
  2324   continuous_vmul ~> continuous_scaleR [OF _ continuous_const]
  2325   continuous_mul ~> continuous_scaleR
  2326   continuous_inv ~> continuous_inverse
  2327   continuous_at_within_inv ~> continuous_at_within_inverse
  2328   continuous_at_inv ~> continuous_at_inverse
  2329   continuous_at_norm ~> continuous_norm [OF continuous_at_id]
  2330   continuous_at_infnorm ~> continuous_infnorm [OF continuous_at_id]
  2331   continuous_at_component ~> continuous_component [OF continuous_at_id]
  2332   continuous_on_neg ~> continuous_on_minus
  2333   continuous_on_sub ~> continuous_on_diff
  2334   continuous_on_cmul ~> continuous_on_scaleR [OF continuous_on_const]
  2335   continuous_on_vmul ~> continuous_on_scaleR [OF _ continuous_on_const]
  2336   continuous_on_mul ~> continuous_on_scaleR
  2337   continuous_on_mul_real ~> continuous_on_mult
  2338   continuous_on_inner ~> continuous_on_inner [OF continuous_on_const]
  2339   continuous_on_norm ~> continuous_on_norm [OF continuous_on_id]
  2340   continuous_on_inverse ~> continuous_on_inv
  2341   uniformly_continuous_on_neg ~> uniformly_continuous_on_minus
  2342   uniformly_continuous_on_sub ~> uniformly_continuous_on_diff
  2343   subset_interior ~> interior_mono
  2344   subset_closure ~> closure_mono
  2345   closure_univ ~> closure_UNIV
  2346   real_arch_lt ~> reals_Archimedean2
  2347   real_arch ~> reals_Archimedean3
  2348   real_abs_norm ~> abs_norm_cancel
  2349   real_abs_sub_norm ~> norm_triangle_ineq3
  2350   norm_cauchy_schwarz_abs ~> Cauchy_Schwarz_ineq2
  2351 
  2352 * Session HOL-Probability:
  2353   - Caratheodory's extension lemma is now proved for ring_of_sets.
  2354   - Infinite products of probability measures are now available.
  2355   - Sigma closure is independent, if the generator is independent
  2356   - Use extended reals instead of positive extended
  2357     reals. INCOMPATIBILITY.
  2358 
  2359 * Session HOLCF: Discontinued legacy theorem names, INCOMPATIBILITY.
  2360 
  2361   expand_fun_below ~> fun_below_iff
  2362   below_fun_ext ~> fun_belowI
  2363   expand_cfun_eq ~> cfun_eq_iff
  2364   ext_cfun ~> cfun_eqI
  2365   expand_cfun_below ~> cfun_below_iff
  2366   below_cfun_ext ~> cfun_belowI
  2367   monofun_fun_fun ~> fun_belowD
  2368   monofun_fun_arg ~> monofunE
  2369   monofun_lub_fun ~> adm_monofun [THEN admD]
  2370   cont_lub_fun ~> adm_cont [THEN admD]
  2371   cont2cont_Rep_CFun ~> cont2cont_APP
  2372   cont_Rep_CFun_app ~> cont_APP_app
  2373   cont_Rep_CFun_app_app ~> cont_APP_app_app
  2374   cont_cfun_fun ~> cont_Rep_cfun1 [THEN contE]
  2375   cont_cfun_arg ~> cont_Rep_cfun2 [THEN contE]
  2376   contlub_cfun ~> lub_APP [symmetric]
  2377   contlub_LAM ~> lub_LAM [symmetric]
  2378   thelubI ~> lub_eqI
  2379   UU_I ~> bottomI
  2380   lift_distinct1 ~> lift.distinct(1)
  2381   lift_distinct2 ~> lift.distinct(2)
  2382   Def_not_UU ~> lift.distinct(2)
  2383   Def_inject ~> lift.inject
  2384   below_UU_iff ~> below_bottom_iff
  2385   eq_UU_iff ~> eq_bottom_iff
  2386 
  2387 
  2388 *** Document preparation ***
  2389 
  2390 * Antiquotation @{rail} layouts railroad syntax diagrams, see also
  2391 isar-ref manual, both for description and actual application of the
  2392 same.
  2393 
  2394 * Antiquotation @{value} evaluates the given term and presents its
  2395 result.
  2396 
  2397 * Antiquotations: term style "isub" provides ad-hoc conversion of
  2398 variables x1, y23 into subscripted form x\<^isub>1,
  2399 y\<^isub>2\<^isub>3.
  2400 
  2401 * Predefined LaTeX macros for Isabelle symbols \<bind> and \<then>
  2402 (e.g. see ~~/src/HOL/Library/Monad_Syntax.thy).
  2403 
  2404 * Localized \isabellestyle switch can be used within blocks or groups
  2405 like this:
  2406 
  2407   \isabellestyle{it}  %preferred default
  2408   {\isabellestylett @{text "typewriter stuff"}}
  2409 
  2410 * Discontinued special treatment of hard tabulators.  Implicit
  2411 tab-width is now defined as 1.  Potential INCOMPATIBILITY for visual
  2412 layouts.
  2413 
  2414 
  2415 *** ML ***
  2416 
  2417 * The inner syntax of sort/type/term/prop supports inlined YXML
  2418 representations within quoted string tokens.  By encoding logical
  2419 entities via Term_XML (in ML or Scala) concrete syntax can be
  2420 bypassed, which is particularly useful for producing bits of text
  2421 under external program control.
  2422 
  2423 * Antiquotations for ML and document preparation are managed as theory
  2424 data, which requires explicit setup.
  2425 
  2426 * Isabelle_Process.is_active allows tools to check if the official
  2427 process wrapper is running (Isabelle/Scala/jEdit) or the old TTY loop
  2428 (better known as Proof General).
  2429 
  2430 * Structure Proof_Context follows standard naming scheme.  Old
  2431 ProofContext is still available for some time as legacy alias.
  2432 
  2433 * Structure Timing provides various operations for timing; supersedes
  2434 former start_timing/end_timing etc.
  2435 
  2436 * Path.print is the official way to show file-system paths to users
  2437 (including quotes etc.).
  2438 
  2439 * Inner syntax: identifiers in parse trees of generic categories
  2440 "logic", "aprop", "idt" etc. carry position information (disguised as
  2441 type constraints).  Occasional INCOMPATIBILITY with non-compliant
  2442 translations that choke on unexpected type constraints.  Positions can
  2443 be stripped in ML translations via Syntax.strip_positions /
  2444 Syntax.strip_positions_ast, or via the syntax constant
  2445 "_strip_positions" within parse trees.  As last resort, positions can
  2446 be disabled via the configuration option Syntax.positions, which is
  2447 called "syntax_positions" in Isar attribute syntax.
  2448 
  2449 * Discontinued special status of various ML structures that contribute
  2450 to structure Syntax (Ast, Lexicon, Mixfix, Parser, Printer etc.): less
  2451 pervasive content, no inclusion in structure Syntax.  INCOMPATIBILITY,
  2452 refer directly to Ast.Constant, Lexicon.is_identifier,
  2453 Syntax_Trans.mk_binder_tr etc.
  2454 
  2455 * Typed print translation: discontinued show_sorts argument, which is
  2456 already available via context of "advanced" translation.
  2457 
  2458 * Refined PARALLEL_GOALS tactical: degrades gracefully for schematic
  2459 goal states; body tactic needs to address all subgoals uniformly.
  2460 
  2461 * Slightly more special eq_list/eq_set, with shortcut involving
  2462 pointer equality (assumes that eq relation is reflexive).
  2463 
  2464 * Classical tactics use proper Proof.context instead of historic types
  2465 claset/clasimpset.  Old-style declarations like addIs, addEs, addDs
  2466 operate directly on Proof.context.  Raw type claset retains its use as
  2467 snapshot of the classical context, which can be recovered via
  2468 (put_claset HOL_cs) etc.  Type clasimpset has been discontinued.
  2469 INCOMPATIBILITY, classical tactics and derived proof methods require
  2470 proper Proof.context.
  2471 
  2472 
  2473 *** System ***
  2474 
  2475 * Discontinued support for Poly/ML 5.2, which was the last version
  2476 without proper multithreading and TimeLimit implementation.
  2477 
  2478 * Discontinued old lib/scripts/polyml-platform, which has been
  2479 obsolete since Isabelle2009-2.
  2480 
  2481 * Various optional external tools are referenced more robustly and
  2482 uniformly by explicit Isabelle settings as follows:
  2483 
  2484   ISABELLE_CSDP   (formerly CSDP_EXE)
  2485   ISABELLE_GHC    (formerly EXEC_GHC or GHC_PATH)
  2486   ISABELLE_OCAML  (formerly EXEC_OCAML)
  2487   ISABELLE_SWIPL  (formerly EXEC_SWIPL)
  2488   ISABELLE_YAP    (formerly EXEC_YAP)
  2489 
  2490 Note that automated detection from the file-system or search path has
  2491 been discontinued.  INCOMPATIBILITY.
  2492 
  2493 * Scala layer provides JVM method invocation service for static
  2494 methods of type (String)String, see Invoke_Scala.method in ML.  For
  2495 example:
  2496 
  2497   Invoke_Scala.method "java.lang.System.getProperty" "java.home"
  2498 
  2499 Together with YXML.string_of_body/parse_body and XML.Encode/Decode
  2500 this allows to pass structured values between ML and Scala.
  2501 
  2502 * The IsabelleText fonts includes some further glyphs to support the
  2503 Prover IDE.  Potential INCOMPATIBILITY: users who happen to have
  2504 installed a local copy (which is normally *not* required) need to
  2505 delete or update it from ~~/lib/fonts/.
  2506 
  2507 
  2508 
  2509 New in Isabelle2011 (January 2011)
  2510 ----------------------------------
  2511 
  2512 *** General ***
  2513 
  2514 * Experimental Prover IDE based on Isabelle/Scala and jEdit (see
  2515 src/Tools/jEdit).  This also serves as IDE for Isabelle/ML, with
  2516 useful tooltips and hyperlinks produced from its static analysis.  The
  2517 bundled component provides an executable Isabelle tool that can be run
  2518 like this:
  2519 
  2520   Isabelle2011/bin/isabelle jedit
  2521 
  2522 * Significantly improved Isabelle/Isar implementation manual.
  2523 
  2524 * System settings: ISABELLE_HOME_USER now includes ISABELLE_IDENTIFIER
  2525 (and thus refers to something like $HOME/.isabelle/Isabelle2011),
  2526 while the default heap location within that directory lacks that extra
  2527 suffix.  This isolates multiple Isabelle installations from each
  2528 other, avoiding problems with old settings in new versions.
  2529 INCOMPATIBILITY, need to copy/upgrade old user settings manually.
  2530 
  2531 * Source files are always encoded as UTF-8, instead of old-fashioned
  2532 ISO-Latin-1.  INCOMPATIBILITY.  Isabelle LaTeX documents might require
  2533 the following package declarations:
  2534 
  2535   \usepackage[utf8]{inputenc}
  2536   \usepackage{textcomp}
  2537 
  2538 * Explicit treatment of UTF-8 sequences as Isabelle symbols, such that
  2539 a Unicode character is treated as a single symbol, not a sequence of
  2540 non-ASCII bytes as before.  Since Isabelle/ML string literals may
  2541 contain symbols without further backslash escapes, Unicode can now be
  2542 used here as well.  Recall that Symbol.explode in ML provides a
  2543 consistent view on symbols, while raw explode (or String.explode)
  2544 merely give a byte-oriented representation.
  2545 
  2546 * Theory loader: source files are primarily located via the master
  2547 directory of each theory node (where the .thy file itself resides).
  2548 The global load path is still partially available as legacy feature.
  2549 Minor INCOMPATIBILITY due to subtle change in file lookup: use
  2550 explicit paths, relatively to the theory.
  2551 
  2552 * Special treatment of ML file names has been discontinued.
  2553 Historically, optional extensions .ML or .sml were added on demand --
  2554 at the cost of clarity of file dependencies.  Recall that Isabelle/ML
  2555 files exclusively use the .ML extension.  Minor INCOMPATIBILTY.
  2556 
  2557 * Various options that affect pretty printing etc. are now properly
  2558 handled within the context via configuration options, instead of
  2559 unsynchronized references or print modes.  There are both ML Config.T
  2560 entities and Isar declaration attributes to access these.
  2561 
  2562   ML (Config.T)                 Isar (attribute)
  2563 
  2564   eta_contract                  eta_contract
  2565   show_brackets                 show_brackets
  2566   show_sorts                    show_sorts
  2567   show_types                    show_types
  2568   show_question_marks           show_question_marks
  2569   show_consts                   show_consts
  2570   show_abbrevs                  show_abbrevs
  2571 
  2572   Syntax.ast_trace              syntax_ast_trace
  2573   Syntax.ast_stat               syntax_ast_stat
  2574   Syntax.ambiguity_level        syntax_ambiguity_level
  2575 
  2576   Goal_Display.goals_limit      goals_limit
  2577   Goal_Display.show_main_goal   show_main_goal
  2578 
  2579   Method.rule_trace             rule_trace
  2580 
  2581   Thy_Output.display            thy_output_display
  2582   Thy_Output.quotes             thy_output_quotes
  2583   Thy_Output.indent             thy_output_indent
  2584   Thy_Output.source             thy_output_source
  2585   Thy_Output.break              thy_output_break
  2586 
  2587 Note that corresponding "..._default" references in ML may only be
  2588 changed globally at the ROOT session setup, but *not* within a theory.
  2589 The option "show_abbrevs" supersedes the former print mode
  2590 "no_abbrevs" with inverted meaning.
  2591 
  2592 * More systematic naming of some configuration options.
  2593 INCOMPATIBILITY.
  2594 
  2595   trace_simp  ~>  simp_trace
  2596   debug_simp  ~>  simp_debug
  2597 
  2598 * Support for real valued configuration options, using simplistic
  2599 floating-point notation that coincides with the inner syntax for
  2600 float_token.
  2601 
  2602 * Support for real valued preferences (with approximative PGIP type):
  2603 front-ends need to accept "pgint" values in float notation.
  2604 INCOMPATIBILITY.
  2605 
  2606 * The IsabelleText font now includes Cyrillic, Hebrew, Arabic from
  2607 DejaVu Sans.
  2608 
  2609 * Discontinued support for Poly/ML 5.0 and 5.1 versions.
  2610 
  2611 
  2612 *** Pure ***
  2613 
  2614 * Command 'type_synonym' (with single argument) replaces somewhat
  2615 outdated 'types', which is still available as legacy feature for some
  2616 time.
  2617 
  2618 * Command 'nonterminal' (with 'and' separated list of arguments)
  2619 replaces somewhat outdated 'nonterminals'.  INCOMPATIBILITY.
  2620 
  2621 * Command 'notepad' replaces former 'example_proof' for
  2622 experimentation in Isar without any result.  INCOMPATIBILITY.
  2623 
  2624 * Locale interpretation commands 'interpret' and 'sublocale' accept
  2625 lists of equations to map definitions in a locale to appropriate
  2626 entities in the context of the interpretation.  The 'interpretation'
  2627 command already provided this functionality.
  2628 
  2629 * Diagnostic command 'print_dependencies' prints the locale instances
  2630 that would be activated if the specified expression was interpreted in
  2631 the current context.  Variant "print_dependencies!" assumes a context
  2632 without interpretations.
  2633 
  2634 * Diagnostic command 'print_interps' prints interpretations in proofs
  2635 in addition to interpretations in theories.
  2636 
  2637 * Discontinued obsolete 'global' and 'local' commands to manipulate
  2638 the theory name space.  Rare INCOMPATIBILITY.  The ML functions
  2639 Sign.root_path and Sign.local_path may be applied directly where this
  2640 feature is still required for historical reasons.
  2641 
  2642 * Discontinued obsolete 'constdefs' command.  INCOMPATIBILITY, use
  2643 'definition' instead.
  2644 
  2645 * The "prems" fact, which refers to the accidental collection of
  2646 foundational premises in the context, is now explicitly marked as
  2647 legacy feature and will be discontinued soon.  Consider using "assms"
  2648 of the head statement or reference facts by explicit names.
  2649 
  2650 * Document antiquotations @{class} and @{type} print classes and type
  2651 constructors.
  2652 
  2653 * Document antiquotation @{file} checks file/directory entries within
  2654 the local file system.
  2655 
  2656 
  2657 *** HOL ***
  2658 
  2659 * Coercive subtyping: functions can be declared as coercions and type
  2660 inference will add them as necessary upon input of a term.  Theory
  2661 Complex_Main declares real :: nat => real and real :: int => real as
  2662 coercions. A coercion function f is declared like this:
  2663 
  2664   declare [[coercion f]]
  2665 
  2666 To lift coercions through type constructors (e.g. from nat => real to
  2667 nat list => real list), map functions can be declared, e.g.
  2668 
  2669   declare [[coercion_map map]]
  2670 
  2671 Currently coercion inference is activated only in theories including
  2672 real numbers, i.e. descendants of Complex_Main.  This is controlled by
  2673 the configuration option "coercion_enabled", e.g. it can be enabled in
  2674 other theories like this:
  2675 
  2676   declare [[coercion_enabled]]
  2677 
  2678 * Command 'partial_function' provides basic support for recursive
  2679 function definitions over complete partial orders.  Concrete instances
  2680 are provided for i) the option type, ii) tail recursion on arbitrary
  2681 types, and iii) the heap monad of Imperative_HOL.  See
  2682 src/HOL/ex/Fundefs.thy and src/HOL/Imperative_HOL/ex/Linked_Lists.thy
  2683 for examples.
  2684 
  2685 * Function package: f.psimps rules are no longer implicitly declared
  2686 as [simp].  INCOMPATIBILITY.
  2687 
  2688 * Datatype package: theorems generated for executable equality (class
  2689 "eq") carry proper names and are treated as default code equations.
  2690 
  2691 * Inductive package: now offers command 'inductive_simps' to
  2692 automatically derive instantiated and simplified equations for
  2693 inductive predicates, similar to 'inductive_cases'.
  2694 
  2695 * Command 'enriched_type' allows to register properties of the
  2696 functorial structure of types.
  2697 
  2698 * Improved infrastructure for term evaluation using code generator
  2699 techniques, in particular static evaluation conversions.
  2700 
  2701 * Code generator: Scala (2.8 or higher) has been added to the target
  2702 languages.
  2703 
  2704 * Code generator: globbing constant expressions "*" and "Theory.*"
  2705 have been replaced by the more idiomatic "_" and "Theory._".
  2706 INCOMPATIBILITY.
  2707 
  2708 * Code generator: export_code without explicit file declaration prints
  2709 to standard output.  INCOMPATIBILITY.
  2710 
  2711 * Code generator: do not print function definitions for case
  2712 combinators any longer.
  2713 
  2714 * Code generator: simplification with rules determined with
  2715 src/Tools/Code/code_simp.ML and method "code_simp".
  2716 
  2717 * Code generator for records: more idiomatic representation of record
  2718 types.  Warning: records are not covered by ancient SML code
  2719 generation any longer.  INCOMPATIBILITY.  In cases of need, a suitable
  2720 rep_datatype declaration helps to succeed then:
  2721 
  2722   record 'a foo = ...
  2723   ...
  2724   rep_datatype foo_ext ...
  2725 
  2726 * Records: logical foundation type for records does not carry a
  2727 '_type' suffix any longer (obsolete due to authentic syntax).
  2728 INCOMPATIBILITY.
  2729 
  2730 * Quickcheck now by default uses exhaustive testing instead of random
  2731 testing.  Random testing can be invoked by "quickcheck [random]",
  2732 exhaustive testing by "quickcheck [exhaustive]".
  2733 
  2734 * Quickcheck instantiates polymorphic types with small finite
  2735 datatypes by default. This enables a simple execution mechanism to
  2736 handle quantifiers and function equality over the finite datatypes.
  2737 
  2738 * Quickcheck random generator has been renamed from "code" to
  2739 "random".  INCOMPATIBILITY.
  2740 
  2741 * Quickcheck now has a configurable time limit which is set to 30
  2742 seconds by default. This can be changed by adding [timeout = n] to the
  2743 quickcheck command. The time limit for Auto Quickcheck is still set
  2744 independently.
  2745 
  2746 * Quickcheck in locales considers interpretations of that locale for
  2747 counter example search.
  2748 
  2749 * Sledgehammer:
  2750   - Added "smt" and "remote_smt" provers based on the "smt" proof
  2751     method. See the Sledgehammer manual for details ("isabelle doc
  2752     sledgehammer").
  2753   - Renamed commands:
  2754     sledgehammer atp_info ~> sledgehammer running_provers
  2755     sledgehammer atp_kill ~> sledgehammer kill_provers
  2756     sledgehammer available_atps ~> sledgehammer available_provers
  2757     INCOMPATIBILITY.
  2758   - Renamed options:
  2759     sledgehammer [atps = ...] ~> sledgehammer [provers = ...]
  2760     sledgehammer [atp = ...] ~> sledgehammer [prover = ...]
  2761     sledgehammer [timeout = 77 s] ~> sledgehammer [timeout = 77]
  2762     (and "ms" and "min" are no longer supported)
  2763     INCOMPATIBILITY.
  2764 
  2765 * Nitpick:
  2766   - Renamed options:
  2767     nitpick [timeout = 77 s] ~> nitpick [timeout = 77]
  2768     nitpick [tac_timeout = 777 ms] ~> nitpick [tac_timeout = 0.777]
  2769     INCOMPATIBILITY.
  2770   - Added support for partial quotient types.
  2771   - Added local versions of the "Nitpick.register_xxx" functions.
  2772   - Added "whack" option.
  2773   - Allow registration of quotient types as codatatypes.
  2774   - Improved "merge_type_vars" option to merge more types.
  2775   - Removed unsound "fast_descrs" option.
  2776   - Added custom symmetry breaking for datatypes, making it possible to reach
  2777     higher cardinalities.
  2778   - Prevent the expansion of too large definitions.
  2779 
  2780 * Proof methods "metis" and "meson" now have configuration options
  2781 "meson_trace", "metis_trace", and "metis_verbose" that can be enabled
  2782 to diagnose these tools. E.g.
  2783 
  2784     using [[metis_trace = true]]
  2785 
  2786 * Auto Solve: Renamed "Auto Solve Direct".  The tool is now available
  2787 manually as command 'solve_direct'.
  2788 
  2789 * The default SMT solver Z3 must be enabled explicitly (due to
  2790 licensing issues) by setting the environment variable
  2791 Z3_NON_COMMERCIAL in etc/settings of the component, for example.  For
  2792 commercial applications, the SMT solver CVC3 is provided as fall-back;
  2793 changing the SMT solver is done via the configuration option
  2794 "smt_solver".
  2795 
  2796 * Remote SMT solvers need to be referred to by the "remote_" prefix,
  2797 i.e. "remote_cvc3" and "remote_z3".
  2798 
  2799 * Added basic SMT support for datatypes, records, and typedefs using
  2800 the oracle mode (no proofs).  Direct support of pairs has been dropped
  2801 in exchange (pass theorems fst_conv snd_conv pair_collapse to the SMT
  2802 support for a similar behavior).  Minor INCOMPATIBILITY.
  2803 
  2804 * Changed SMT configuration options:
  2805   - Renamed:
  2806     z3_proofs ~> smt_oracle (with inverted meaning)
  2807     z3_trace_assms ~> smt_trace_used_facts
  2808     INCOMPATIBILITY.
  2809   - Added:
  2810     smt_verbose
  2811     smt_random_seed
  2812     smt_datatypes
  2813     smt_infer_triggers
  2814     smt_monomorph_limit
  2815     cvc3_options
  2816     remote_cvc3_options
  2817     remote_z3_options
  2818     yices_options
  2819 
  2820 * Boogie output files (.b2i files) need to be declared in the theory
  2821 header.
  2822 
  2823 * Simplification procedure "list_to_set_comprehension" rewrites list
  2824 comprehensions applied to List.set to set comprehensions.  Occasional
  2825 INCOMPATIBILITY, may be deactivated like this:
  2826 
  2827   declare [[simproc del: list_to_set_comprehension]]
  2828 
  2829 * Removed old version of primrec package.  INCOMPATIBILITY.
  2830 
  2831 * Removed simplifier congruence rule of "prod_case", as has for long
  2832 been the case with "split".  INCOMPATIBILITY.
  2833 
  2834 * String.literal is a type, but not a datatype.  INCOMPATIBILITY.
  2835 
  2836 * Removed [split_format ... and ... and ...] version of
  2837 [split_format].  Potential INCOMPATIBILITY.
  2838 
  2839 * Predicate "sorted" now defined inductively, with nice induction
  2840 rules.  INCOMPATIBILITY: former sorted.simps now named sorted_simps.
  2841 
  2842 * Constant "contents" renamed to "the_elem", to free the generic name
  2843 contents for other uses.  INCOMPATIBILITY.
  2844 
  2845 * Renamed class eq and constant eq (for code generation) to class
  2846 equal and constant equal, plus renaming of related facts and various
  2847 tuning.  INCOMPATIBILITY.
  2848 
  2849 * Dropped type classes mult_mono and mult_mono1.  INCOMPATIBILITY.
  2850 
  2851 * Removed output syntax "'a ~=> 'b" for "'a => 'b option".
  2852 INCOMPATIBILITY.
  2853 
  2854 * Renamed theory Fset to Cset, type Fset.fset to Cset.set, in order to
  2855 avoid confusion with finite sets.  INCOMPATIBILITY.
  2856 
  2857 * Abandoned locales equiv, congruent and congruent2 for equivalence
  2858 relations.  INCOMPATIBILITY: use equivI rather than equiv_intro (same
  2859 for congruent(2)).
  2860 
  2861 * Some previously unqualified names have been qualified:
  2862 
  2863   types
  2864     bool ~> HOL.bool
  2865     nat ~> Nat.nat
  2866 
  2867   constants
  2868     Trueprop ~> HOL.Trueprop
  2869     True ~> HOL.True
  2870     False ~> HOL.False
  2871     op & ~> HOL.conj
  2872     op | ~> HOL.disj
  2873     op --> ~> HOL.implies
  2874     op = ~> HOL.eq
  2875     Not ~> HOL.Not
  2876     The ~> HOL.The
  2877     All ~> HOL.All
  2878     Ex ~> HOL.Ex
  2879     Ex1 ~> HOL.Ex1
  2880     Let ~> HOL.Let
  2881     If ~> HOL.If
  2882     Ball ~> Set.Ball
  2883     Bex ~> Set.Bex
  2884     Suc ~> Nat.Suc
  2885     Pair ~> Product_Type.Pair
  2886     fst ~> Product_Type.fst
  2887     snd ~> Product_Type.snd
  2888     curry ~> Product_Type.curry
  2889     op : ~> Set.member
  2890     Collect ~> Set.Collect
  2891 
  2892 INCOMPATIBILITY.
  2893 
  2894 * More canonical naming convention for some fundamental definitions:
  2895 
  2896     bot_bool_eq ~> bot_bool_def
  2897     top_bool_eq ~> top_bool_def
  2898     inf_bool_eq ~> inf_bool_def
  2899     sup_bool_eq ~> sup_bool_def
  2900     bot_fun_eq  ~> bot_fun_def
  2901     top_fun_eq  ~> top_fun_def
  2902     inf_fun_eq  ~> inf_fun_def
  2903     sup_fun_eq  ~> sup_fun_def
  2904 
  2905 INCOMPATIBILITY.
  2906 
  2907 * More stylized fact names:
  2908 
  2909   expand_fun_eq ~> fun_eq_iff
  2910   expand_set_eq ~> set_eq_iff
  2911   set_ext       ~> set_eqI
  2912   nat_number    ~> eval_nat_numeral
  2913 
  2914 INCOMPATIBILITY.
  2915 
  2916 * Refactoring of code-generation specific operations in theory List:
  2917 
  2918   constants
  2919     null ~> List.null
  2920 
  2921   facts
  2922     mem_iff ~> member_def
  2923     null_empty ~> null_def
  2924 
  2925 INCOMPATIBILITY.  Note that these were not supposed to be used
  2926 regularly unless for striking reasons; their main purpose was code
  2927 generation.
  2928 
  2929 Various operations from the Haskell prelude are used for generating
  2930 Haskell code.
  2931 
  2932 * Term "bij f" is now an abbreviation of "bij_betw f UNIV UNIV".  Term
  2933 "surj f" is now an abbreviation of "range f = UNIV".  The theorems
  2934 bij_def and surj_def are unchanged.  INCOMPATIBILITY.
  2935 
  2936 * Abolished some non-alphabetic type names: "prod" and "sum" replace
  2937 "*" and "+" respectively.  INCOMPATIBILITY.
  2938 
  2939 * Name "Plus" of disjoint sum operator "<+>" is now hidden.  Write
  2940 "Sum_Type.Plus" instead.
  2941 
  2942 * Constant "split" has been merged with constant "prod_case"; names of
  2943 ML functions, facts etc. involving split have been retained so far,
  2944 though.  INCOMPATIBILITY.
  2945 
  2946 * Dropped old infix syntax "_ mem _" for List.member; use "_ : set _"
  2947 instead.  INCOMPATIBILITY.
  2948 
  2949 * Removed lemma "Option.is_none_none" which duplicates "is_none_def".
  2950 INCOMPATIBILITY.
  2951 
  2952 * Former theory Library/Enum is now part of the HOL-Main image.
  2953 INCOMPATIBILITY: all constants of the Enum theory now have to be
  2954 referred to by its qualified name.
  2955 
  2956   enum    ~>  Enum.enum
  2957   nlists  ~>  Enum.nlists
  2958   product ~>  Enum.product
  2959 
  2960 * Theory Library/Monad_Syntax provides do-syntax for monad types.
  2961 Syntax in Library/State_Monad has been changed to avoid ambiguities.
  2962 INCOMPATIBILITY.
  2963 
  2964 * Theory Library/SetsAndFunctions has been split into
  2965 Library/Function_Algebras and Library/Set_Algebras; canonical names
  2966 for instance definitions for functions; various improvements.
  2967 INCOMPATIBILITY.
  2968 
  2969 * Theory Library/Multiset provides stable quicksort implementation of
  2970 sort_key.
  2971 
  2972 * Theory Library/Multiset: renamed empty_idemp ~> empty_neutral.
  2973 INCOMPATIBILITY.
  2974 
  2975 * Session Multivariate_Analysis: introduced a type class for euclidean
  2976 space.  Most theorems are now stated in terms of euclidean spaces
  2977 instead of finite cartesian products.
  2978 
  2979   types
  2980     real ^ 'n ~>  'a::real_vector
  2981               ~>  'a::euclidean_space
  2982               ~>  'a::ordered_euclidean_space
  2983         (depends on your needs)
  2984 
  2985   constants
  2986      _ $ _        ~> _ $$ _
  2987      \<chi> x. _  ~> \<chi>\<chi> x. _
  2988      CARD('n)     ~> DIM('a)
  2989 
  2990 Also note that the indices are now natural numbers and not from some
  2991 finite type. Finite cartesian products of euclidean spaces, products
  2992 of euclidean spaces the real and complex numbers are instantiated to
  2993 be euclidean_spaces.  INCOMPATIBILITY.
  2994 
  2995 * Session Probability: introduced pextreal as positive extended real
  2996 numbers.  Use pextreal as value for measures.  Introduce the
  2997 Radon-Nikodym derivative, product spaces and Fubini's theorem for
  2998 arbitrary sigma finite measures.  Introduces Lebesgue measure based on
  2999 the integral in Multivariate Analysis.  INCOMPATIBILITY.
  3000 
  3001 * Session Imperative_HOL: revamped, corrected dozens of inadequacies.
  3002 INCOMPATIBILITY.
  3003 
  3004 * Session SPARK (with image HOL-SPARK) provides commands to load and
  3005 prove verification conditions generated by the SPARK Ada program
  3006 verifier.  See also src/HOL/SPARK and src/HOL/SPARK/Examples.
  3007 
  3008 
  3009 *** HOL-Algebra ***
  3010 
  3011 * Theorems for additive ring operations (locale abelian_monoid and
  3012 descendants) are generated by interpretation from their multiplicative
  3013 counterparts.  Names (in particular theorem names) have the mandatory
  3014 qualifier 'add'.  Previous theorem names are redeclared for
  3015 compatibility.
  3016 
  3017 * Structure "int_ring" is now an abbreviation (previously a
  3018 definition).  This fits more natural with advanced interpretations.
  3019 
  3020 
  3021 *** HOLCF ***
  3022 
  3023 * The domain package now runs in definitional mode by default: The
  3024 former command 'new_domain' is now called 'domain'.  To use the domain
  3025 package in its original axiomatic mode, use 'domain (unsafe)'.
  3026 INCOMPATIBILITY.
  3027 
  3028 * The new class "domain" is now the default sort.  Class "predomain"
  3029 is an unpointed version of "domain". Theories can be updated by
  3030 replacing sort annotations as shown below.  INCOMPATIBILITY.
  3031 
  3032   'a::type ~> 'a::countable
  3033   'a::cpo  ~> 'a::predomain
  3034   'a::pcpo ~> 'a::domain
  3035 
  3036 * The old type class "rep" has been superseded by class "domain".
  3037 Accordingly, users of the definitional package must remove any
  3038 "default_sort rep" declarations.  INCOMPATIBILITY.
  3039 
  3040 * The domain package (definitional mode) now supports unpointed
  3041 predomain argument types, as long as they are marked 'lazy'. (Strict
  3042 arguments must be in class "domain".) For example, the following
  3043 domain definition now works:
  3044 
  3045   domain natlist = nil | cons (lazy "nat discr") (lazy "natlist")
  3046 
  3047 * Theory HOLCF/Library/HOL_Cpo provides cpo and predomain class
  3048 instances for types from main HOL: bool, nat, int, char, 'a + 'b,
  3049 'a option, and 'a list.  Additionally, it configures fixrec and the
  3050 domain package to work with these types.  For example:
  3051 
  3052   fixrec isInl :: "('a + 'b) u -> tr"
  3053     where "isInl$(up$(Inl x)) = TT" | "isInl$(up$(Inr y)) = FF"
  3054 
  3055   domain V = VFun (lazy "V -> V") | VCon (lazy "nat") (lazy "V list")
  3056 
  3057 * The "(permissive)" option of fixrec has been replaced with a
  3058 per-equation "(unchecked)" option. See
  3059 src/HOL/HOLCF/Tutorial/Fixrec_ex.thy for examples. INCOMPATIBILITY.
  3060 
  3061 * The "bifinite" class no longer fixes a constant "approx"; the class
  3062 now just asserts that such a function exists.  INCOMPATIBILITY.
  3063 
  3064 * Former type "alg_defl" has been renamed to "defl".  HOLCF no longer
  3065 defines an embedding of type 'a defl into udom by default; instances
  3066 of "bifinite" and "domain" classes are available in
  3067 src/HOL/HOLCF/Library/Defl_Bifinite.thy.
  3068 
  3069 * The syntax "REP('a)" has been replaced with "DEFL('a)".
  3070 
  3071 * The predicate "directed" has been removed.  INCOMPATIBILITY.
  3072 
  3073 * The type class "finite_po" has been removed.  INCOMPATIBILITY.
  3074 
  3075 * The function "cprod_map" has been renamed to "prod_map".
  3076 INCOMPATIBILITY.
  3077 
  3078 * The monadic bind operator on each powerdomain has new binder syntax
  3079 similar to sets, e.g. "\<Union>\<sharp>x\<in>xs. t" represents
  3080 "upper_bind\<cdot>xs\<cdot>(\<Lambda> x. t)".
  3081 
  3082 * The infix syntax for binary union on each powerdomain has changed
  3083 from e.g. "+\<sharp>" to "\<union>\<sharp>", for consistency with set
  3084 syntax.  INCOMPATIBILITY.
  3085 
  3086 * The constant "UU" has been renamed to "bottom".  The syntax "UU" is
  3087 still supported as an input translation.
  3088 
  3089 * Renamed some theorems (the original names are also still available).
  3090 
  3091   expand_fun_below   ~> fun_below_iff
  3092   below_fun_ext      ~> fun_belowI
  3093   expand_cfun_eq     ~> cfun_eq_iff
  3094   ext_cfun           ~> cfun_eqI
  3095   expand_cfun_below  ~> cfun_below_iff
  3096   below_cfun_ext     ~> cfun_belowI
  3097   cont2cont_Rep_CFun ~> cont2cont_APP
  3098 
  3099 * The Abs and Rep functions for various types have changed names.
  3100 Related theorem names have also changed to match. INCOMPATIBILITY.
  3101 
  3102   Rep_CFun  ~> Rep_cfun
  3103   Abs_CFun  ~> Abs_cfun
  3104   Rep_Sprod ~> Rep_sprod
  3105   Abs_Sprod ~> Abs_sprod
  3106   Rep_Ssum  ~> Rep_ssum
  3107   Abs_Ssum  ~> Abs_ssum
  3108 
  3109 * Lemmas with names of the form *_defined_iff or *_strict_iff have
  3110 been renamed to *_bottom_iff.  INCOMPATIBILITY.
  3111 
  3112 * Various changes to bisimulation/coinduction with domain package:
  3113 
  3114   - Definitions of "bisim" constants no longer mention definedness.
  3115   - With mutual recursion, "bisim" predicate is now curried.
  3116   - With mutual recursion, each type gets a separate coind theorem.
  3117   - Variable names in bisim_def and coinduct rules have changed.
  3118 
  3119 INCOMPATIBILITY.
  3120 
  3121 * Case combinators generated by the domain package for type "foo" are
  3122 now named "foo_case" instead of "foo_when".  INCOMPATIBILITY.
  3123 
  3124 * Several theorems have been renamed to more accurately reflect the
  3125 names of constants and types involved.  INCOMPATIBILITY.
  3126 
  3127   thelub_const    ~> lub_const
  3128   lub_const       ~> is_lub_const
  3129   thelubI         ~> lub_eqI
  3130   is_lub_lub      ~> is_lubD2
  3131   lubI            ~> is_lub_lub
  3132   unique_lub      ~> is_lub_unique
  3133   is_ub_lub       ~> is_lub_rangeD1
  3134   lub_bin_chain   ~> is_lub_bin_chain
  3135   lub_fun         ~> is_lub_fun
  3136   thelub_fun      ~> lub_fun
  3137   thelub_cfun     ~> lub_cfun
  3138   thelub_Pair     ~> lub_Pair
  3139   lub_cprod       ~> is_lub_prod
  3140   thelub_cprod    ~> lub_prod
  3141   minimal_cprod   ~> minimal_prod
  3142   inst_cprod_pcpo ~> inst_prod_pcpo
  3143   UU_I            ~> bottomI
  3144   compact_UU      ~> compact_bottom
  3145   deflation_UU    ~> deflation_bottom
  3146   finite_deflation_UU ~> finite_deflation_bottom
  3147 
  3148 * Many legacy theorem names have been discontinued.  INCOMPATIBILITY.
  3149 
  3150   sq_ord_less_eq_trans ~> below_eq_trans
  3151   sq_ord_eq_less_trans ~> eq_below_trans
  3152   refl_less            ~> below_refl
  3153   trans_less           ~> below_trans
  3154   antisym_less         ~> below_antisym
  3155   antisym_less_inverse ~> po_eq_conv [THEN iffD1]
  3156   box_less             ~> box_below
  3157   rev_trans_less       ~> rev_below_trans
  3158   not_less2not_eq      ~> not_below2not_eq
  3159   less_UU_iff          ~> below_UU_iff
  3160   flat_less_iff        ~> flat_below_iff
  3161   adm_less             ~> adm_below
  3162   adm_not_less         ~> adm_not_below
  3163   adm_compact_not_less ~> adm_compact_not_below
  3164   less_fun_def         ~> below_fun_def
  3165   expand_fun_less      ~> fun_below_iff
  3166   less_fun_ext         ~> fun_belowI
  3167   less_discr_def       ~> below_discr_def
  3168   discr_less_eq        ~> discr_below_eq
  3169   less_unit_def        ~> below_unit_def
  3170   less_cprod_def       ~> below_prod_def
  3171   prod_lessI           ~> prod_belowI
  3172   Pair_less_iff        ~> Pair_below_iff
  3173   fst_less_iff         ~> fst_below_iff
  3174   snd_less_iff         ~> snd_below_iff
  3175   expand_cfun_less     ~> cfun_below_iff
  3176   less_cfun_ext        ~> cfun_belowI
  3177   injection_less       ~> injection_below
  3178   less_up_def          ~> below_up_def
  3179   not_Iup_less         ~> not_Iup_below
  3180   Iup_less             ~> Iup_below
  3181   up_less              ~> up_below
  3182   Def_inject_less_eq   ~> Def_below_Def
  3183   Def_less_is_eq       ~> Def_below_iff
  3184   spair_less_iff       ~> spair_below_iff
  3185   less_sprod           ~> below_sprod
  3186   spair_less           ~> spair_below
  3187   sfst_less_iff        ~> sfst_below_iff
  3188   ssnd_less_iff        ~> ssnd_below_iff
  3189   fix_least_less       ~> fix_least_below
  3190   dist_less_one        ~> dist_below_one
  3191   less_ONE             ~> below_ONE
  3192   ONE_less_iff         ~> ONE_below_iff
  3193   less_sinlD           ~> below_sinlD
  3194   less_sinrD           ~> below_sinrD
  3195 
  3196 
  3197 *** FOL and ZF ***
  3198 
  3199 * All constant names are now qualified internally and use proper
  3200 identifiers, e.g. "IFOL.eq" instead of "op =".  INCOMPATIBILITY.
  3201 
  3202 
  3203 *** ML ***
  3204 
  3205 * Antiquotation @{assert} inlines a function bool -> unit that raises
  3206 Fail if the argument is false.  Due to inlining the source position of
  3207 failed assertions is included in the error output.
  3208 
  3209 * Discontinued antiquotation @{theory_ref}, which is obsolete since ML
  3210 text is in practice always evaluated with a stable theory checkpoint.
  3211 Minor INCOMPATIBILITY, use (Theory.check_thy @{theory}) instead.
  3212 
  3213 * Antiquotation @{theory A} refers to theory A from the ancestry of
  3214 the current context, not any accidental theory loader state as before.
  3215 Potential INCOMPATIBILITY, subtle change in semantics.
  3216 
  3217 * Syntax.pretty_priority (default 0) configures the required priority
  3218 of pretty-printed output and thus affects insertion of parentheses.
  3219 
  3220 * Syntax.default_root (default "any") configures the inner syntax
  3221 category (nonterminal symbol) for parsing of terms.
  3222 
  3223 * Former exception Library.UnequalLengths now coincides with
  3224 ListPair.UnequalLengths.
  3225 
  3226 * Renamed structure MetaSimplifier to Raw_Simplifier.  Note that the
  3227 main functionality is provided by structure Simplifier.
  3228 
  3229 * Renamed raw "explode" function to "raw_explode" to emphasize its
  3230 meaning.  Note that internally to Isabelle, Symbol.explode is used in
  3231 almost all situations.
  3232 
  3233 * Discontinued obsolete function sys_error and exception SYS_ERROR.
  3234 See implementation manual for further details on exceptions in
  3235 Isabelle/ML.
  3236 
  3237 * Renamed setmp_noncritical to Unsynchronized.setmp to emphasize its
  3238 meaning.
  3239 
  3240 * Renamed structure PureThy to Pure_Thy and moved most of its
  3241 operations to structure Global_Theory, to emphasize that this is
  3242 rarely-used global-only stuff.
  3243 
  3244 * Discontinued Output.debug.  Minor INCOMPATIBILITY, use plain writeln
  3245 instead (or tracing for high-volume output).
  3246 
  3247 * Configuration option show_question_marks only affects regular pretty
  3248 printing of types and terms, not raw Term.string_of_vname.
  3249 
  3250 * ML_Context.thm and ML_Context.thms are no longer pervasive.  Rare
  3251 INCOMPATIBILITY, superseded by static antiquotations @{thm} and
  3252 @{thms} for most purposes.
  3253 
  3254 * ML structure Unsynchronized is never opened, not even in Isar
  3255 interaction mode as before.  Old Unsynchronized.set etc. have been
  3256 discontinued -- use plain := instead.  This should be *rare* anyway,
  3257 since modern tools always work via official context data, notably
  3258 configuration options.
  3259 
  3260 * Parallel and asynchronous execution requires special care concerning
  3261 interrupts.  Structure Exn provides some convenience functions that
  3262 avoid working directly with raw Interrupt.  User code must not absorb
  3263 interrupts -- intermediate handling (for cleanup etc.) needs to be
  3264 followed by re-raising of the original exception.  Another common
  3265 source of mistakes are "handle _" patterns, which make the meaning of
  3266 the program subject to physical effects of the environment.
  3267 
  3268 
  3269 
  3270 New in Isabelle2009-2 (June 2010)
  3271 ---------------------------------
  3272 
  3273 *** General ***
  3274 
  3275 * Authentic syntax for *all* logical entities (type classes, type
  3276 constructors, term constants): provides simple and robust
  3277 correspondence between formal entities and concrete syntax.  Within
  3278 the parse tree / AST representations, "constants" are decorated by
  3279 their category (class, type, const) and spelled out explicitly with
  3280 their full internal name.
  3281 
  3282 Substantial INCOMPATIBILITY concerning low-level syntax declarations
  3283 and translations (translation rules and translation functions in ML).
  3284 Some hints on upgrading:
  3285 
  3286   - Many existing uses of 'syntax' and 'translations' can be replaced
  3287     by more modern 'type_notation', 'notation' and 'abbreviation',
  3288     which are independent of this issue.
  3289 
  3290   - 'translations' require markup within the AST; the term syntax
  3291     provides the following special forms:
  3292 
  3293       CONST c   -- produces syntax version of constant c from context
  3294       XCONST c  -- literally c, checked as constant from context
  3295       c         -- literally c, if declared by 'syntax'
  3296 
  3297     Plain identifiers are treated as AST variables -- occasionally the
  3298     system indicates accidental variables via the error "rhs contains
  3299     extra variables".
  3300 
  3301     Type classes and type constructors are marked according to their
  3302     concrete syntax.  Some old translations rules need to be written
  3303     for the "type" category, using type constructor application
  3304     instead of pseudo-term application of the default category
  3305     "logic".
  3306 
  3307   - 'parse_translation' etc. in ML may use the following
  3308     antiquotations:
  3309 
  3310       @{class_syntax c}   -- type class c within parse tree / AST
  3311       @{term_syntax c}    -- type constructor c within parse tree / AST
  3312       @{const_syntax c}   -- ML version of "CONST c" above
  3313       @{syntax_const c}   -- literally c (checked wrt. 'syntax' declarations)
  3314 
  3315   - Literal types within 'typed_print_translations', i.e. those *not*
  3316     represented as pseudo-terms are represented verbatim.  Use @{class
  3317     c} or @{type_name c} here instead of the above syntax
  3318     antiquotations.
  3319 
  3320 Note that old non-authentic syntax was based on unqualified base
  3321 names, so all of the above "constant" names would coincide.  Recall
  3322 that 'print_syntax' and ML_command "set Syntax.trace_ast" help to
  3323 diagnose syntax problems.
  3324 
  3325 * Type constructors admit general mixfix syntax, not just infix.
  3326 
  3327 * Concrete syntax may be attached to local entities without a proof
  3328 body, too.  This works via regular mixfix annotations for 'fix',
  3329 'def', 'obtain' etc. or via the explicit 'write' command, which is
  3330 similar to the 'notation' command in theory specifications.
  3331 
  3332 * Discontinued unnamed infix syntax (legacy feature for many years) --
  3333 need to specify constant name and syntax separately.  Internal ML
  3334 datatype constructors have been renamed from InfixName to Infix etc.
  3335 Minor INCOMPATIBILITY.
  3336 
  3337 * Schematic theorem statements need to be explicitly markup as such,
  3338 via commands 'schematic_lemma', 'schematic_theorem',
  3339 'schematic_corollary'.  Thus the relevance of the proof is made
  3340 syntactically clear, which impacts performance in a parallel or
  3341 asynchronous interactive environment.  Minor INCOMPATIBILITY.
  3342 
  3343 * Use of cumulative prems via "!" in some proof methods has been
  3344 discontinued (old legacy feature).
  3345 
  3346 * References 'trace_simp' and 'debug_simp' have been replaced by
  3347 configuration options stored in the context. Enabling tracing (the
  3348 case of debugging is similar) in proofs works via
  3349 
  3350   using [[trace_simp = true]]
  3351 
  3352 Tracing is then active for all invocations of the simplifier in
  3353 subsequent goal refinement steps. Tracing may also still be enabled or
  3354 disabled via the ProofGeneral settings menu.
  3355 
  3356 * Separate commands 'hide_class', 'hide_type', 'hide_const',
  3357 'hide_fact' replace the former 'hide' KIND command.  Minor
  3358 INCOMPATIBILITY.
  3359 
  3360 * Improved parallelism of proof term normalization: usedir -p2 -q0 is
  3361 more efficient than combinations with -q1 or -q2.
  3362 
  3363 
  3364 *** Pure ***
  3365 
  3366 * Proofterms record type-class reasoning explicitly, using the
  3367 "unconstrain" operation internally.  This eliminates all sort
  3368 constraints from a theorem and proof, introducing explicit
  3369 OFCLASS-premises.  On the proof term level, this operation is
  3370 automatically applied at theorem boundaries, such that closed proofs
  3371 are always free of sort constraints.  INCOMPATIBILITY for tools that
  3372 inspect proof terms.
  3373 
  3374 * Local theory specifications may depend on extra type variables that
  3375 are not present in the result type -- arguments TYPE('a) :: 'a itself
  3376 are added internally.  For example:
  3377 
  3378   definition unitary :: bool where "unitary = (ALL (x::'a) y. x = y)"
  3379 
  3380 * Predicates of locales introduced by classes carry a mandatory
  3381 "class" prefix.  INCOMPATIBILITY.
  3382 
  3383 * Vacuous class specifications observe default sort.  INCOMPATIBILITY.
  3384 
  3385 * Old 'axclass' command has been discontinued.  INCOMPATIBILITY, use
  3386 'class' instead.
  3387 
  3388 * Command 'code_reflect' allows to incorporate generated ML code into
  3389 runtime environment; replaces immature code_datatype antiquotation.
  3390 INCOMPATIBILITY.
  3391 
  3392 * Code generator: simple concept for abstract datatypes obeying
  3393 invariants.
  3394 
  3395 * Code generator: details of internal data cache have no impact on the
  3396 user space functionality any longer.
  3397 
  3398 * Methods "unfold_locales" and "intro_locales" ignore non-locale
  3399 subgoals.  This is more appropriate for interpretations with 'where'.
  3400 INCOMPATIBILITY.
  3401 
  3402 * Command 'example_proof' opens an empty proof body.  This allows to
  3403 experiment with Isar, without producing any persistent result.
  3404 
  3405 * Commands 'type_notation' and 'no_type_notation' declare type syntax
  3406 within a local theory context, with explicit checking of the
  3407 constructors involved (in contrast to the raw 'syntax' versions).
  3408 
  3409 * Commands 'types' and 'typedecl' now work within a local theory
  3410 context -- without introducing dependencies on parameters or
  3411 assumptions, which is not possible in Isabelle/Pure.
  3412 
  3413 * Command 'defaultsort' has been renamed to 'default_sort', it works
  3414 within a local theory context.  Minor INCOMPATIBILITY.
  3415 
  3416 
  3417 *** HOL ***
  3418 
  3419 * Command 'typedef' now works within a local theory context -- without
  3420 introducing dependencies on parameters or assumptions, which is not
  3421 possible in Isabelle/Pure/HOL.  Note that the logical environment may
  3422 contain multiple interpretations of local typedefs (with different
  3423 non-emptiness proofs), even in a global theory context.
  3424 
  3425 * New package for quotient types.  Commands 'quotient_type' and
  3426 'quotient_definition' may be used for defining types and constants by
  3427 quotient constructions.  An example is the type of integers created by
  3428 quotienting pairs of natural numbers:
  3429 
  3430   fun
  3431     intrel :: "(nat * nat) => (nat * nat) => bool"
  3432   where
  3433     "intrel (x, y) (u, v) = (x + v = u + y)"
  3434 
  3435   quotient_type int = "nat * nat" / intrel
  3436     by (auto simp add: equivp_def expand_fun_eq)
  3437 
  3438   quotient_definition
  3439     "0::int" is "(0::nat, 0::nat)"
  3440 
  3441 The method "lifting" can be used to lift of theorems from the
  3442 underlying "raw" type to the quotient type.  The example
  3443 src/HOL/Quotient_Examples/FSet.thy includes such a quotient
  3444 construction and provides a reasoning infrastructure for finite sets.
  3445 
  3446 * Renamed Library/Quotient.thy to Library/Quotient_Type.thy to avoid
  3447 clash with new theory Quotient in Main HOL.
  3448 
  3449 * Moved the SMT binding into the main HOL session, eliminating
  3450 separate HOL-SMT session.
  3451 
  3452 * List membership infix mem operation is only an input abbreviation.
  3453 INCOMPATIBILITY.
  3454 
  3455 * Theory Library/Word.thy has been removed.  Use library Word/Word.thy
  3456 for future developements; former Library/Word.thy is still present in
  3457 the AFP entry RSAPPS.
  3458 
  3459 * Theorem Int.int_induct renamed to Int.int_of_nat_induct and is no
  3460 longer shadowed.  INCOMPATIBILITY.
  3461 
  3462 * Dropped theorem duplicate comp_arith; use semiring_norm instead.
  3463 INCOMPATIBILITY.
  3464 
  3465 * Dropped theorem RealPow.real_sq_order; use power2_le_imp_le instead.
  3466 INCOMPATIBILITY.
  3467 
  3468 * Dropped normalizing_semiring etc; use the facts in semiring classes
  3469 instead.  INCOMPATIBILITY.
  3470 
  3471 * Dropped several real-specific versions of lemmas about floor and
  3472 ceiling; use the generic lemmas from theory "Archimedean_Field"
  3473 instead.  INCOMPATIBILITY.
  3474 
  3475   floor_number_of_eq         ~> floor_number_of
  3476   le_floor_eq_number_of      ~> number_of_le_floor
  3477   le_floor_eq_zero           ~> zero_le_floor
  3478   le_floor_eq_one            ~> one_le_floor
  3479   floor_less_eq_number_of    ~> floor_less_number_of
  3480   floor_less_eq_zero         ~> floor_less_zero
  3481   floor_less_eq_one          ~> floor_less_one
  3482   less_floor_eq_number_of    ~> number_of_less_floor
  3483   less_floor_eq_zero         ~> zero_less_floor
  3484   less_floor_eq_one          ~> one_less_floor
  3485   floor_le_eq_number_of      ~> floor_le_number_of
  3486   floor_le_eq_zero           ~> floor_le_zero
  3487   floor_le_eq_one            ~> floor_le_one
  3488   floor_subtract_number_of   ~> floor_diff_number_of
  3489   floor_subtract_one         ~> floor_diff_one
  3490   ceiling_number_of_eq       ~> ceiling_number_of
  3491   ceiling_le_eq_number_of    ~> ceiling_le_number_of
  3492   ceiling_le_zero_eq         ~> ceiling_le_zero
  3493   ceiling_le_eq_one          ~> ceiling_le_one
  3494   less_ceiling_eq_number_of  ~> number_of_less_ceiling
  3495   less_ceiling_eq_zero       ~> zero_less_ceiling
  3496   less_ceiling_eq_one        ~> one_less_ceiling
  3497   ceiling_less_eq_number_of  ~> ceiling_less_number_of
  3498   ceiling_less_eq_zero       ~> ceiling_less_zero
  3499   ceiling_less_eq_one        ~> ceiling_less_one
  3500   le_ceiling_eq_number_of    ~> number_of_le_ceiling
  3501   le_ceiling_eq_zero         ~> zero_le_ceiling
  3502   le_ceiling_eq_one          ~> one_le_ceiling
  3503   ceiling_subtract_number_of ~> ceiling_diff_number_of
  3504   ceiling_subtract_one       ~> ceiling_diff_one
  3505 
  3506 * Theory "Finite_Set": various folding_XXX locales facilitate the
  3507 application of the various fold combinators on finite sets.
  3508 
  3509 * Library theory "RBT" renamed to "RBT_Impl"; new library theory "RBT"
  3510 provides abstract red-black tree type which is backed by "RBT_Impl" as
  3511 implementation.  INCOMPATIBILTY.
  3512 
  3513 * Theory Library/Coinductive_List has been removed -- superseded by
  3514 AFP/thys/Coinductive.
  3515 
  3516 * Theory PReal, including the type "preal" and related operations, has
  3517 been removed.  INCOMPATIBILITY.
  3518 
  3519 * Real: new development using Cauchy Sequences.
  3520 
  3521 * Split off theory "Big_Operators" containing setsum, setprod,
  3522 Inf_fin, Sup_fin, Min, Max from theory Finite_Set.  INCOMPATIBILITY.
  3523 
  3524 * Theory "Rational" renamed to "Rat", for consistency with "Nat",
  3525 "Int" etc.  INCOMPATIBILITY.
  3526 
  3527 * Constant Rat.normalize needs to be qualified.  INCOMPATIBILITY.
  3528 
  3529 * New set of rules "ac_simps" provides combined assoc / commute
  3530 rewrites for all interpretations of the appropriate generic locales.
  3531 
  3532 * Renamed theory "OrderedGroup" to "Groups" and split theory
  3533 "Ring_and_Field" into theories "Rings" and "Fields"; for more
  3534 appropriate and more consistent names suitable for name prefixes
  3535 within the HOL theories.  INCOMPATIBILITY.
  3536 
  3537 * Some generic constants have been put to appropriate theories:
  3538   - less_eq, less: Orderings
  3539   - zero, one, plus, minus, uminus, times, abs, sgn: Groups
  3540   - inverse, divide: Rings
  3541 INCOMPATIBILITY.
  3542 
  3543 * More consistent naming of type classes involving orderings (and
  3544 lattices):
  3545 
  3546     lower_semilattice                   ~> semilattice_inf
  3547     upper_semilattice                   ~> semilattice_sup
  3548 
  3549     dense_linear_order                  ~> dense_linorder
  3550 
  3551     pordered_ab_group_add               ~> ordered_ab_group_add
  3552     pordered_ab_group_add_abs           ~> ordered_ab_group_add_abs
  3553     pordered_ab_semigroup_add           ~> ordered_ab_semigroup_add
  3554     pordered_ab_semigroup_add_imp_le    ~> ordered_ab_semigroup_add_imp_le
  3555     pordered_cancel_ab_semigroup_add    ~> ordered_cancel_ab_semigroup_add
  3556     pordered_cancel_comm_semiring       ~> ordered_cancel_comm_semiring
  3557     pordered_cancel_semiring            ~> ordered_cancel_semiring
  3558     pordered_comm_monoid_add            ~> ordered_comm_monoid_add
  3559     pordered_comm_ring                  ~> ordered_comm_ring
  3560     pordered_comm_semiring              ~> ordered_comm_semiring
  3561     pordered_ring                       ~> ordered_ring
  3562     pordered_ring_abs                   ~> ordered_ring_abs
  3563     pordered_semiring                   ~> ordered_semiring
  3564 
  3565     ordered_ab_group_add                ~> linordered_ab_group_add
  3566     ordered_ab_semigroup_add            ~> linordered_ab_semigroup_add
  3567     ordered_cancel_ab_semigroup_add     ~> linordered_cancel_ab_semigroup_add
  3568     ordered_comm_semiring_strict        ~> linordered_comm_semiring_strict
  3569     ordered_field                       ~> linordered_field
  3570     ordered_field_no_lb                 ~> linordered_field_no_lb
  3571     ordered_field_no_ub                 ~> linordered_field_no_ub
  3572     ordered_field_dense_linear_order    ~> dense_linordered_field
  3573     ordered_idom                        ~> linordered_idom
  3574     ordered_ring                        ~> linordered_ring
  3575     ordered_ring_le_cancel_factor       ~> linordered_ring_le_cancel_factor
  3576     ordered_ring_less_cancel_factor     ~> linordered_ring_less_cancel_factor
  3577     ordered_ring_strict                 ~> linordered_ring_strict
  3578     ordered_semidom                     ~> linordered_semidom
  3579     ordered_semiring                    ~> linordered_semiring
  3580     ordered_semiring_1                  ~> linordered_semiring_1
  3581     ordered_semiring_1_strict           ~> linordered_semiring_1_strict
  3582     ordered_semiring_strict             ~> linordered_semiring_strict
  3583 
  3584   The following slightly odd type classes have been moved to a
  3585   separate theory Library/Lattice_Algebras:
  3586 
  3587     lordered_ab_group_add               ~> lattice_ab_group_add
  3588     lordered_ab_group_add_abs           ~> lattice_ab_group_add_abs
  3589     lordered_ab_group_add_meet          ~> semilattice_inf_ab_group_add
  3590     lordered_ab_group_add_join          ~> semilattice_sup_ab_group_add
  3591     lordered_ring                       ~> lattice_ring
  3592 
  3593 INCOMPATIBILITY.
  3594 
  3595 * Refined field classes:
  3596   - classes division_ring_inverse_zero, field_inverse_zero,
  3597     linordered_field_inverse_zero include rule inverse 0 = 0 --
  3598     subsumes former division_by_zero class;
  3599   - numerous lemmas have been ported from field to division_ring.
  3600 INCOMPATIBILITY.
  3601 
  3602 * Refined algebra theorem collections:
  3603   - dropped theorem group group_simps, use algebra_simps instead;
  3604   - dropped theorem group ring_simps, use field_simps instead;
  3605   - proper theorem collection field_simps subsumes former theorem
  3606     groups field_eq_simps and field_simps;
  3607   - dropped lemma eq_minus_self_iff which is a duplicate for
  3608     equal_neg_zero.
  3609 INCOMPATIBILITY.
  3610 
  3611 * Theory Finite_Set and List: some lemmas have been generalized from
  3612 sets to lattices:
  3613 
  3614   fun_left_comm_idem_inter      ~> fun_left_comm_idem_inf
  3615   fun_left_comm_idem_union      ~> fun_left_comm_idem_sup
  3616   inter_Inter_fold_inter        ~> inf_Inf_fold_inf
  3617   union_Union_fold_union        ~> sup_Sup_fold_sup
  3618   Inter_fold_inter              ~> Inf_fold_inf
  3619   Union_fold_union              ~> Sup_fold_sup
  3620   inter_INTER_fold_inter        ~> inf_INFI_fold_inf
  3621   union_UNION_fold_union        ~> sup_SUPR_fold_sup
  3622   INTER_fold_inter              ~> INFI_fold_inf
  3623   UNION_fold_union              ~> SUPR_fold_sup
  3624 
  3625 * Theory "Complete_Lattice": lemmas top_def and bot_def have been
  3626 replaced by the more convenient lemmas Inf_empty and Sup_empty.
  3627 Dropped lemmas Inf_insert_simp and Sup_insert_simp, which are subsumed
  3628 by Inf_insert and Sup_insert.  Lemmas Inf_UNIV and Sup_UNIV replace
  3629 former Inf_Univ and Sup_Univ.  Lemmas inf_top_right and sup_bot_right
  3630 subsume inf_top and sup_bot respectively.  INCOMPATIBILITY.
  3631 
  3632 * Reorganized theory Multiset: swapped notation of pointwise and
  3633 multiset order:
  3634 
  3635   - pointwise ordering is instance of class order with standard syntax
  3636     <= and <;
  3637   - multiset ordering has syntax <=# and <#; partial order properties
  3638     are provided by means of interpretation with prefix
  3639     multiset_order;
  3640   - less duplication, less historical organization of sections,
  3641     conversion from associations lists to multisets, rudimentary code
  3642     generation;
  3643   - use insert_DiffM2 [symmetric] instead of elem_imp_eq_diff_union,
  3644     if needed.
  3645 
  3646 Renamed:
  3647 
  3648   multiset_eq_conv_count_eq  ~>  multiset_ext_iff
  3649   multi_count_ext  ~>  multiset_ext
  3650   diff_union_inverse2  ~>  diff_union_cancelR
  3651 
  3652 INCOMPATIBILITY.
  3653 
  3654 * Theory Permutation: replaced local "remove" by List.remove1.
  3655 
  3656 * Code generation: ML and OCaml code is decorated with signatures.
  3657 
  3658 * Theory List: added transpose.
  3659 
  3660 * Library/Nat_Bijection.thy is a collection of bijective functions
  3661 between nat and other types, which supersedes the older libraries
  3662 Library/Nat_Int_Bij.thy and HOLCF/NatIso.thy.  INCOMPATIBILITY.
  3663 
  3664   Constants:
  3665   Nat_Int_Bij.nat2_to_nat         ~> prod_encode
  3666   Nat_Int_Bij.nat_to_nat2         ~> prod_decode
  3667   Nat_Int_Bij.int_to_nat_bij      ~> int_encode
  3668   Nat_Int_Bij.nat_to_int_bij      ~> int_decode
  3669   Countable.pair_encode           ~> prod_encode
  3670   NatIso.prod2nat                 ~> prod_encode
  3671   NatIso.nat2prod                 ~> prod_decode
  3672   NatIso.sum2nat                  ~> sum_encode
  3673   NatIso.nat2sum                  ~> sum_decode
  3674   NatIso.list2nat                 ~> list_encode
  3675   NatIso.nat2list                 ~> list_decode
  3676   NatIso.set2nat                  ~> set_encode
  3677   NatIso.nat2set                  ~> set_decode
  3678 
  3679   Lemmas:
  3680   Nat_Int_Bij.bij_nat_to_int_bij  ~> bij_int_decode
  3681   Nat_Int_Bij.nat2_to_nat_inj     ~> inj_prod_encode
  3682   Nat_Int_Bij.nat2_to_nat_surj    ~> surj_prod_encode
  3683   Nat_Int_Bij.nat_to_nat2_inj     ~> inj_prod_decode
  3684   Nat_Int_Bij.nat_to_nat2_surj    ~> surj_prod_decode
  3685   Nat_Int_Bij.i2n_n2i_id          ~> int_encode_inverse
  3686   Nat_Int_Bij.n2i_i2n_id          ~> int_decode_inverse
  3687   Nat_Int_Bij.surj_nat_to_int_bij ~> surj_int_encode
  3688   Nat_Int_Bij.surj_int_to_nat_bij ~> surj_int_decode
  3689   Nat_Int_Bij.inj_nat_to_int_bij  ~> inj_int_encode
  3690   Nat_Int_Bij.inj_int_to_nat_bij  ~> inj_int_decode
  3691   Nat_Int_Bij.bij_nat_to_int_bij  ~> bij_int_encode
  3692   Nat_Int_Bij.bij_int_to_nat_bij  ~> bij_int_decode
  3693 
  3694 * Sledgehammer:
  3695   - Renamed ATP commands:
  3696     atp_info     ~> sledgehammer running_atps
  3697     atp_kill     ~> sledgehammer kill_atps
  3698     atp_messages ~> sledgehammer messages
  3699     atp_minimize ~> sledgehammer minimize
  3700     print_atps   ~> sledgehammer available_atps
  3701     INCOMPATIBILITY.
  3702   - Added user's manual ("isabelle doc sledgehammer").
  3703   - Added option syntax and "sledgehammer_params" to customize
  3704     Sledgehammer's behavior.  See the manual for details.
  3705   - Modified the Isar proof reconstruction code so that it produces
  3706     direct proofs rather than proofs by contradiction.  (This feature
  3707     is still experimental.)
  3708   - Made Isar proof reconstruction work for SPASS, remote ATPs, and in
  3709     full-typed mode.
  3710   - Added support for TPTP syntax for SPASS via the "spass_tptp" ATP.
  3711 
  3712 * Nitpick:
  3713   - Added and implemented "binary_ints" and "bits" options.
  3714   - Added "std" option and implemented support for nonstandard models.
  3715   - Added and implemented "finitize" option to improve the precision
  3716     of infinite datatypes based on a monotonicity analysis.
  3717   - Added support for quotient types.
  3718   - Added support for "specification" and "ax_specification"
  3719     constructs.
  3720   - Added support for local definitions (for "function" and
  3721     "termination" proofs).
  3722   - Added support for term postprocessors.
  3723   - Optimized "Multiset.multiset" and "FinFun.finfun".
  3724   - Improved efficiency of "destroy_constrs" optimization.
  3725   - Fixed soundness bugs related to "destroy_constrs" optimization and
  3726     record getters.
  3727   - Fixed soundness bug related to higher-order constructors.
  3728   - Fixed soundness bug when "full_descrs" is enabled.
  3729   - Improved precision of set constructs.
  3730   - Added "atoms" option.
  3731   - Added cache to speed up repeated Kodkod invocations on the same
  3732     problems.
  3733   - Renamed "MiniSatJNI", "zChaffJNI", "BerkMinAlloy", and
  3734     "SAT4JLight" to "MiniSat_JNI", "zChaff_JNI", "BerkMin_Alloy", and
  3735     "SAT4J_Light".  INCOMPATIBILITY.
  3736   - Removed "skolemize", "uncurry", "sym_break", "flatten_prop",
  3737     "sharing_depth", and "show_skolems" options.  INCOMPATIBILITY.
  3738   - Removed "nitpick_intro" attribute.  INCOMPATIBILITY.
  3739 
  3740 * Method "induct" now takes instantiations of the form t, where t is not
  3741   a variable, as a shorthand for "x == t", where x is a fresh variable.
  3742   If this is not intended, t has to be enclosed in parentheses.
  3743   By default, the equalities generated by definitional instantiations
  3744   are pre-simplified, which may cause parameters of inductive cases
  3745   to disappear, or may even delete some of the inductive cases.
  3746   Use "induct (no_simp)" instead of "induct" to restore the old
  3747   behaviour. The (no_simp) option is also understood by the "cases"
  3748   and "nominal_induct" methods, which now perform pre-simplification, too.
  3749   INCOMPATIBILITY.
  3750 
  3751 
  3752 *** HOLCF ***
  3753 
  3754 * Variable names in lemmas generated by the domain package have
  3755 changed; the naming scheme is now consistent with the HOL datatype
  3756 package.  Some proof scripts may be affected, INCOMPATIBILITY.
  3757 
  3758 * The domain package no longer defines the function "foo_copy" for
  3759 recursive domain "foo".  The reach lemma is now stated directly in
  3760 terms of "foo_take".  Lemmas and proofs that mention "foo_copy" must
  3761 be reformulated in terms of "foo_take", INCOMPATIBILITY.
  3762 
  3763 * Most definedness lemmas generated by the domain package (previously
  3764 of the form "x ~= UU ==> foo$x ~= UU") now have an if-and-only-if form
  3765 like "foo$x = UU <-> x = UU", which works better as a simp rule.
  3766 Proofs that used definedness lemmas as intro rules may break,
  3767 potential INCOMPATIBILITY.
  3768 
  3769 * Induction and casedist rules generated by the domain package now
  3770 declare proper case_names (one called "bottom", and one named for each
  3771 constructor).  INCOMPATIBILITY.
  3772 
  3773 * For mutually-recursive domains, separate "reach" and "take_lemma"
  3774 rules are generated for each domain, INCOMPATIBILITY.
  3775 
  3776   foo_bar.reach       ~> foo.reach  bar.reach
  3777   foo_bar.take_lemmas ~> foo.take_lemma  bar.take_lemma
  3778 
  3779 * Some lemmas generated by the domain package have been renamed for
  3780 consistency with the datatype package, INCOMPATIBILITY.
  3781 
  3782   foo.ind        ~> foo.induct
  3783   foo.finite_ind ~> foo.finite_induct
  3784   foo.coind      ~> foo.coinduct
  3785   foo.casedist   ~> foo.exhaust
  3786   foo.exhaust    ~> foo.nchotomy
  3787 
  3788 * For consistency with other definition packages, the fixrec package
  3789 now generates qualified theorem names, INCOMPATIBILITY.
  3790 
  3791   foo_simps  ~> foo.simps
  3792   foo_unfold ~> foo.unfold
  3793   foo_induct ~> foo.induct
  3794 
  3795 * The "fixrec_simp" attribute has been removed.  The "fixrec_simp"
  3796 method and internal fixrec proofs now use the default simpset instead.
  3797 INCOMPATIBILITY.
  3798 
  3799 * The "contlub" predicate has been removed.  Proof scripts should use
  3800 lemma contI2 in place of monocontlub2cont, INCOMPATIBILITY.
  3801 
  3802 * The "admw" predicate has been removed, INCOMPATIBILITY.
  3803 
  3804 * The constants cpair, cfst, and csnd have been removed in favor of
  3805 Pair, fst, and snd from Isabelle/HOL, INCOMPATIBILITY.
  3806 
  3807 
  3808 *** ML ***
  3809 
  3810 * Antiquotations for basic formal entities:
  3811 
  3812     @{class NAME}         -- type class
  3813     @{class_syntax NAME}  -- syntax representation of the above
  3814 
  3815     @{type_name NAME}     -- logical type
  3816     @{type_abbrev NAME}   -- type abbreviation
  3817     @{nonterminal NAME}   -- type of concrete syntactic category
  3818     @{type_syntax NAME}   -- syntax representation of any of the above
  3819 
  3820     @{const_name NAME}    -- logical constant (INCOMPATIBILITY)
  3821     @{const_abbrev NAME}  -- abbreviated constant
  3822     @{const_syntax NAME}  -- syntax representation of any of the above
  3823 
  3824 * Antiquotation @{syntax_const NAME} ensures that NAME refers to a raw
  3825 syntax constant (cf. 'syntax' command).
  3826 
  3827 * Antiquotation @{make_string} inlines a function to print arbitrary
  3828 values similar to the ML toplevel.  The result is compiler dependent
  3829 and may fall back on "?" in certain situations.
  3830 
  3831 * Diagnostic commands 'ML_val' and 'ML_command' may refer to
  3832 antiquotations @{Isar.state} and @{Isar.goal}.  This replaces impure
  3833 Isar.state() and Isar.goal(), which belong to the old TTY loop and do
  3834 not work with the asynchronous Isar document model.
  3835 
  3836 * Configuration options now admit dynamic default values, depending on
  3837 the context or even global references.
  3838 
  3839 * SHA1.digest digests strings according to SHA-1 (see RFC 3174).  It
  3840 uses an efficient external library if available (for Poly/ML).
  3841 
  3842 * Renamed some important ML structures, while keeping the old names
  3843 for some time as aliases within the structure Legacy:
  3844 
  3845   OuterKeyword  ~>  Keyword
  3846   OuterLex      ~>  Token
  3847   OuterParse    ~>  Parse
  3848   OuterSyntax   ~>  Outer_Syntax
  3849   PrintMode     ~>  Print_Mode
  3850   SpecParse     ~>  Parse_Spec
  3851   ThyInfo       ~>  Thy_Info
  3852   ThyLoad       ~>  Thy_Load
  3853   ThyOutput     ~>  Thy_Output
  3854   TypeInfer     ~>  Type_Infer
  3855 
  3856 Note that "open Legacy" simplifies porting of sources, but forgetting
  3857 to remove it again will complicate porting again in the future.
  3858 
  3859 * Most operations that refer to a global context are named
  3860 accordingly, e.g. Simplifier.global_context or
  3861 ProofContext.init_global.  There are some situations where a global
  3862 context actually works, but under normal circumstances one needs to
  3863 pass the proper local context through the code!
  3864 
  3865 * Discontinued old TheoryDataFun with its copy/init operation -- data
  3866 needs to be pure.  Functor Theory_Data_PP retains the traditional
  3867 Pretty.pp argument to merge, which is absent in the standard
  3868 Theory_Data version.
  3869 
  3870 * Sorts.certify_sort and derived "cert" operations for types and terms
  3871 no longer minimize sorts.  Thus certification at the boundary of the
  3872 inference kernel becomes invariant under addition of class relations,
  3873 which is an important monotonicity principle.  Sorts are now minimized
  3874 in the syntax layer only, at the boundary between the end-user and the
  3875 system.  Subtle INCOMPATIBILITY, may have to use Sign.minimize_sort
  3876 explicitly in rare situations.
  3877 
  3878 * Renamed old-style Drule.standard to Drule.export_without_context, to
  3879 emphasize that this is in no way a standard operation.
  3880 INCOMPATIBILITY.
  3881 
  3882 * Subgoal.FOCUS (and variants): resulting goal state is normalized as
  3883 usual for resolution.  Rare INCOMPATIBILITY.
  3884 
  3885 * Renamed varify/unvarify operations to varify_global/unvarify_global
  3886 to emphasize that these only work in a global situation (which is
  3887 quite rare).
  3888 
  3889 * Curried take and drop in library.ML; negative length is interpreted
  3890 as infinity (as in chop).  Subtle INCOMPATIBILITY.
  3891 
  3892 * Proof terms: type substitutions on proof constants now use canonical
  3893 order of type variables.  INCOMPATIBILITY for tools working with proof
  3894 terms.
  3895 
  3896 * Raw axioms/defs may no longer carry sort constraints, and raw defs
  3897 may no longer carry premises.  User-level specifications are
  3898 transformed accordingly by Thm.add_axiom/add_def.
  3899 
  3900 
  3901 *** System ***
  3902 
  3903 * Discontinued special HOL_USEDIR_OPTIONS for the main HOL image;
  3904 ISABELLE_USEDIR_OPTIONS applies uniformly to all sessions.  Note that
  3905 proof terms are enabled unconditionally in the new HOL-Proofs image.
  3906 
  3907 * Discontinued old ISABELLE and ISATOOL environment settings (legacy
  3908 feature since Isabelle2009).  Use ISABELLE_PROCESS and ISABELLE_TOOL,
  3909 respectively.
  3910 
  3911 * Old lib/scripts/polyml-platform is superseded by the
  3912 ISABELLE_PLATFORM setting variable, which defaults to the 32 bit
  3913 variant, even on a 64 bit machine.  The following example setting
  3914 prefers 64 bit if available:
  3915 
  3916   ML_PLATFORM="${ISABELLE_PLATFORM64:-$ISABELLE_PLATFORM}"
  3917 
  3918 * The preliminary Isabelle/jEdit application demonstrates the emerging
  3919 Isabelle/Scala layer for advanced prover interaction and integration.
  3920 See src/Tools/jEdit or "isabelle jedit" provided by the properly built
  3921 component.
  3922 
  3923 * "IsabelleText" is a Unicode font derived from Bitstream Vera Mono
  3924 and Bluesky TeX fonts.  It provides the usual Isabelle symbols,
  3925 similar to the default assignment of the document preparation system
  3926 (cf. isabellesym.sty).  The Isabelle/Scala class Isabelle_System
  3927 provides some operations for direct access to the font without asking
  3928 the user for manual installation.
  3929 
  3930 
  3931 
  3932 New in Isabelle2009-1 (December 2009)
  3933 -------------------------------------
  3934 
  3935 *** General ***
  3936 
  3937 * Discontinued old form of "escaped symbols" such as \\<forall>.  Only
  3938 one backslash should be used, even in ML sources.
  3939 
  3940 
  3941 *** Pure ***
  3942 
  3943 * Locale interpretation propagates mixins along the locale hierarchy.
  3944 The currently only available mixins are the equations used to map
  3945 local definitions to terms of the target domain of an interpretation.
  3946 
  3947 * Reactivated diagnostic command 'print_interps'.  Use "print_interps
  3948 loc" to print all interpretations of locale "loc" in the theory.
  3949 Interpretations in proofs are not shown.
  3950 
  3951 * Thoroughly revised locales tutorial.  New section on conditional
  3952 interpretation.
  3953 
  3954 * On instantiation of classes, remaining undefined class parameters
  3955 are formally declared.  INCOMPATIBILITY.
  3956 
  3957 
  3958 *** Document preparation ***
  3959 
  3960 * New generalized style concept for printing terms: @{foo (style) ...}
  3961 instead of @{foo_style style ...}  (old form is still retained for
  3962 backward compatibility).  Styles can be also applied for
  3963 antiquotations prop, term_type and typeof.
  3964 
  3965 
  3966 *** HOL ***
  3967 
  3968 * New proof method "smt" for a combination of first-order logic with
  3969 equality, linear and nonlinear (natural/integer/real) arithmetic, and
  3970 fixed-size bitvectors; there is also basic support for higher-order
  3971 features (esp. lambda abstractions).  It is an incomplete decision
  3972 procedure based on external SMT solvers using the oracle mechanism;
  3973 for the SMT solver Z3, this method is proof-producing.  Certificates
  3974 are provided to avoid calling the external solvers solely for
  3975 re-checking proofs.  Due to a remote SMT service there is no need for
  3976 installing SMT solvers locally.  See src/HOL/SMT.
  3977 
  3978 * New commands to load and prove verification conditions generated by
  3979 the Boogie program verifier or derived systems (e.g. the Verifying C
  3980 Compiler (VCC) or Spec#).  See src/HOL/Boogie.
  3981 
  3982 * New counterexample generator tool 'nitpick' based on the Kodkod
  3983 relational model finder.  See src/HOL/Tools/Nitpick and
  3984 src/HOL/Nitpick_Examples.
  3985 
  3986 * New commands 'code_pred' and 'values' to invoke the predicate
  3987 compiler and to enumerate values of inductive predicates.
  3988 
  3989 * A tabled implementation of the reflexive transitive closure.
  3990 
  3991 * New implementation of quickcheck uses generic code generator;
  3992 default generators are provided for all suitable HOL types, records
  3993 and datatypes.  Old quickcheck can be re-activated importing theory
  3994 Library/SML_Quickcheck.
  3995 
  3996 * New testing tool Mirabelle for automated proof tools.  Applies
  3997 several tools and tactics like sledgehammer, metis, or quickcheck, to
  3998 every proof step in a theory.  To be used in batch mode via the
  3999 "mirabelle" utility.
  4000 
  4001 * New proof method "sos" (sum of squares) for nonlinear real
  4002 arithmetic (originally due to John Harison). It requires theory
  4003 Library/Sum_Of_Squares.  It is not a complete decision procedure but
  4004 works well in practice on quantifier-free real arithmetic with +, -,
  4005 *, ^, =, <= and <, i.e. boolean combinations of equalities and
  4006 inequalities between polynomials.  It makes use of external
  4007 semidefinite programming solvers.  Method "sos" generates a
  4008 certificate that can be pasted into the proof thus avoiding the need
  4009 to call an external tool every time the proof is checked.  See
  4010 src/HOL/Library/Sum_Of_Squares.
  4011 
  4012 * New method "linarith" invokes existing linear arithmetic decision
  4013 procedure only.
  4014 
  4015 * New command 'atp_minimal' reduces result produced by Sledgehammer.
  4016 
  4017 * New Sledgehammer option "Full Types" in Proof General settings menu.
  4018 Causes full type information to be output to the ATPs.  This slows
  4019 ATPs down considerably but eliminates a source of unsound "proofs"
  4020 that fail later.
  4021 
  4022 * New method "metisFT": A version of metis that uses full type
  4023 information in order to avoid failures of proof reconstruction.
  4024 
  4025 * New evaluator "approximate" approximates an real valued term using
  4026 the same method as the approximation method.
  4027 
  4028 * Method "approximate" now supports arithmetic expressions as
  4029 boundaries of intervals and implements interval splitting and Taylor
  4030 series expansion.
  4031 
  4032 * ML antiquotation @{code_datatype} inserts definition of a datatype
  4033 generated by the code generator; e.g. see src/HOL/Predicate.thy.
  4034 
  4035 * New theory SupInf of the supremum and infimum operators for sets of
  4036 reals.
  4037 
  4038 * New theory Probability, which contains a development of measure
  4039 theory, eventually leading to Lebesgue integration and probability.
  4040 
  4041 * Extended Multivariate Analysis to include derivation and Brouwer's
  4042 fixpoint theorem.
  4043 
  4044 * Reorganization of number theory, INCOMPATIBILITY:
  4045   - new number theory development for nat and int, in theories Divides
  4046     and GCD as well as in new session Number_Theory
  4047   - some constants and facts now suffixed with _nat and _int
  4048     accordingly
  4049   - former session NumberTheory now named Old_Number_Theory, including
  4050     theories Legacy_GCD and Primes (prefer Number_Theory if possible)
  4051   - moved theory Pocklington from src/HOL/Library to
  4052     src/HOL/Old_Number_Theory
  4053 
  4054 * Theory GCD includes functions Gcd/GCD and Lcm/LCM for the gcd and
  4055 lcm of finite and infinite sets. It is shown that they form a complete
  4056 lattice.
  4057 
  4058 * Class semiring_div requires superclass no_zero_divisors and proof of
  4059 div_mult_mult1; theorems div_mult_mult1, div_mult_mult2,
  4060 div_mult_mult1_if, div_mult_mult1 and div_mult_mult2 have been
  4061 generalized to class semiring_div, subsuming former theorems
  4062 zdiv_zmult_zmult1, zdiv_zmult_zmult1_if, zdiv_zmult_zmult1 and
  4063 zdiv_zmult_zmult2.  div_mult_mult1 is now [simp] by default.
  4064 INCOMPATIBILITY.
  4065 
  4066 * Refinements to lattice classes and sets:
  4067   - less default intro/elim rules in locale variant, more default
  4068     intro/elim rules in class variant: more uniformity
  4069   - lemma ge_sup_conv renamed to le_sup_iff, in accordance with
  4070     le_inf_iff
  4071   - dropped lemma alias inf_ACI for inf_aci (same for sup_ACI and
  4072     sup_aci)
  4073   - renamed ACI to inf_sup_aci
  4074   - new class "boolean_algebra"
  4075   - class "complete_lattice" moved to separate theory
  4076     "Complete_Lattice"; corresponding constants (and abbreviations)
  4077     renamed and with authentic syntax:
  4078     Set.Inf ~>    Complete_Lattice.Inf
  4079     Set.Sup ~>    Complete_Lattice.Sup
  4080     Set.INFI ~>   Complete_Lattice.INFI
  4081     Set.SUPR ~>   Complete_Lattice.SUPR
  4082     Set.Inter ~>  Complete_Lattice.Inter
  4083     Set.Union ~>  Complete_Lattice.Union
  4084     Set.INTER ~>  Complete_Lattice.INTER
  4085     Set.UNION ~>  Complete_Lattice.UNION
  4086   - authentic syntax for
  4087     Set.Pow
  4088     Set.image
  4089   - mere abbreviations:
  4090     Set.empty               (for bot)
  4091     Set.UNIV                (for top)
  4092     Set.inter               (for inf, formerly Set.Int)
  4093     Set.union               (for sup, formerly Set.Un)
  4094     Complete_Lattice.Inter  (for Inf)
  4095     Complete_Lattice.Union  (for Sup)
  4096     Complete_Lattice.INTER  (for INFI)
  4097     Complete_Lattice.UNION  (for SUPR)
  4098   - object-logic definitions as far as appropriate
  4099 
  4100 INCOMPATIBILITY.  Care is required when theorems Int_subset_iff or
  4101 Un_subset_iff are explicitly deleted as default simp rules; then also
  4102 their lattice counterparts le_inf_iff and le_sup_iff have to be
  4103 deleted to achieve the desired effect.
  4104 
  4105 * Rules inf_absorb1, inf_absorb2, sup_absorb1, sup_absorb2 are no simp
  4106 rules by default any longer; the same applies to min_max.inf_absorb1
  4107 etc.  INCOMPATIBILITY.
  4108 
  4109 * Rules sup_Int_eq and sup_Un_eq are no longer declared as
  4110 pred_set_conv by default.  INCOMPATIBILITY.
  4111 
  4112 * Power operations on relations and functions are now one dedicated
  4113 constant "compow" with infix syntax "^^".  Power operation on
  4114 multiplicative monoids retains syntax "^" and is now defined generic
  4115 in class power.  INCOMPATIBILITY.
  4116 
  4117 * Relation composition "R O S" now has a more standard argument order:
  4118 "R O S = {(x, z). EX y. (x, y) : R & (y, z) : S}".  INCOMPATIBILITY,
  4119 rewrite propositions with "S O R" --> "R O S". Proofs may occasionally
  4120 break, since the O_assoc rule was not rewritten like this.  Fix using
  4121 O_assoc[symmetric].  The same applies to the curried version "R OO S".
  4122 
  4123 * Function "Inv" is renamed to "inv_into" and function "inv" is now an
  4124 abbreviation for "inv_into UNIV".  Lemmas are renamed accordingly.
  4125 INCOMPATIBILITY.
  4126 
  4127 * Most rules produced by inductive and datatype package have mandatory
  4128 prefixes.  INCOMPATIBILITY.
  4129 
  4130 * Changed "DERIV_intros" to a dynamic fact, which can be augmented by
  4131 the attribute of the same name.  Each of the theorems in the list
  4132 DERIV_intros assumes composition with an additional function and
  4133 matches a variable to the derivative, which has to be solved by the
  4134 Simplifier.  Hence (auto intro!: DERIV_intros) computes the derivative
  4135 of most elementary terms.  Former Maclauren.DERIV_tac and
  4136 Maclauren.deriv_tac should be replaced by (auto intro!: DERIV_intros).
  4137 INCOMPATIBILITY.
  4138 
  4139 * Code generator attributes follow the usual underscore convention:
  4140     code_unfold     replaces    code unfold
  4141     code_post       replaces    code post
  4142     etc.
  4143   INCOMPATIBILITY.
  4144 
  4145 * Renamed methods:
  4146     sizechange -> size_change
  4147     induct_scheme -> induction_schema
  4148   INCOMPATIBILITY.
  4149 
  4150 * Discontinued abbreviation "arbitrary" of constant "undefined".
  4151 INCOMPATIBILITY, use "undefined" directly.
  4152 
  4153 * Renamed theorems:
  4154     Suc_eq_add_numeral_1 -> Suc_eq_plus1
  4155     Suc_eq_add_numeral_1_left -> Suc_eq_plus1_left
  4156     Suc_plus1 -> Suc_eq_plus1
  4157     *anti_sym -> *antisym*
  4158     vector_less_eq_def -> vector_le_def
  4159   INCOMPATIBILITY.
  4160 
  4161 * Added theorem List.map_map as [simp].  Removed List.map_compose.
  4162 INCOMPATIBILITY.
  4163 
  4164 * Removed predicate "M hassize n" (<--> card M = n & finite M).
  4165 INCOMPATIBILITY.
  4166 
  4167 
  4168 *** HOLCF ***
  4169 
  4170 * Theory Representable defines a class "rep" of domains that are
  4171 representable (via an ep-pair) in the universal domain type "udom".
  4172 Instances are provided for all type constructors defined in HOLCF.
  4173 
  4174 * The 'new_domain' command is a purely definitional version of the
  4175 domain package, for representable domains.  Syntax is identical to the
  4176 old domain package.  The 'new_domain' package also supports indirect
  4177 recursion using previously-defined type constructors.  See
  4178 src/HOLCF/ex/New_Domain.thy for examples.
  4179 
  4180 * Method "fixrec_simp" unfolds one step of a fixrec-defined constant
  4181 on the left-hand side of an equation, and then performs
  4182 simplification.  Rewriting is done using rules declared with the
  4183 "fixrec_simp" attribute.  The "fixrec_simp" method is intended as a
  4184 replacement for "fixpat"; see src/HOLCF/ex/Fixrec_ex.thy for examples.
  4185 
  4186 * The pattern-match compiler in 'fixrec' can now handle constructors
  4187 with HOL function types.  Pattern-match combinators for the Pair
  4188 constructor are pre-configured.
  4189 
  4190 * The 'fixrec' package now produces better fixed-point induction rules
  4191 for mutually-recursive definitions:  Induction rules have conclusions
  4192 of the form "P foo bar" instead of "P <foo, bar>".
  4193 
  4194 * The constant "sq_le" (with infix syntax "<<" or "\<sqsubseteq>") has
  4195 been renamed to "below".  The name "below" now replaces "less" in many
  4196 theorem names.  (Legacy theorem names using "less" are still supported
  4197 as well.)
  4198 
  4199 * The 'fixrec' package now supports "bottom patterns".  Bottom
  4200 patterns can be used to generate strictness rules, or to make
  4201 functions more strict (much like the bang-patterns supported by the
  4202 Glasgow Haskell Compiler).  See src/HOLCF/ex/Fixrec_ex.thy for
  4203 examples.
  4204 
  4205 
  4206 *** ML ***
  4207 
  4208 * Support for Poly/ML 5.3.0, with improved reporting of compiler
  4209 errors and run-time exceptions, including detailed source positions.
  4210 
  4211 * Structure Name_Space (formerly NameSpace) now manages uniquely
  4212 identified entries, with some additional information such as source
  4213 position, logical grouping etc.
  4214 
  4215 * Theory and context data is now introduced by the simplified and
  4216 modernized functors Theory_Data, Proof_Data, Generic_Data.  Data needs
  4217 to be pure, but the old TheoryDataFun for mutable data (with explicit
  4218 copy operation) is still available for some time.
  4219 
  4220 * Structure Synchronized (cf. src/Pure/Concurrent/synchronized.ML)
  4221 provides a high-level programming interface to synchronized state
  4222 variables with atomic update.  This works via pure function
  4223 application within a critical section -- its runtime should be as
  4224 short as possible; beware of deadlocks if critical code is nested,
  4225 either directly or indirectly via other synchronized variables!
  4226 
  4227 * Structure Unsynchronized (cf. src/Pure/ML-Systems/unsynchronized.ML)
  4228 wraps raw ML references, explicitly indicating their non-thread-safe
  4229 behaviour.  The Isar toplevel keeps this structure open, to
  4230 accommodate Proof General as well as quick and dirty interactive
  4231 experiments with references.
  4232 
  4233 * PARALLEL_CHOICE and PARALLEL_GOALS provide basic support for
  4234 parallel tactical reasoning.
  4235 
  4236 * Tacticals Subgoal.FOCUS, Subgoal.FOCUS_PREMS, Subgoal.FOCUS_PARAMS
  4237 are similar to SUBPROOF, but are slightly more flexible: only the
  4238 specified parts of the subgoal are imported into the context, and the
  4239 body tactic may introduce new subgoals and schematic variables.
  4240 
  4241 * Old tactical METAHYPS, which does not observe the proof context, has
  4242 been renamed to Old_Goals.METAHYPS and awaits deletion.  Use SUBPROOF
  4243 or Subgoal.FOCUS etc.
  4244 
  4245 * Renamed functor TableFun to Table, and GraphFun to Graph.  (Since
  4246 functors have their own ML name space there is no point to mark them
  4247 separately.)  Minor INCOMPATIBILITY.
  4248 
  4249 * Renamed NamedThmsFun to Named_Thms.  INCOMPATIBILITY.
  4250 
  4251 * Renamed several structures FooBar to Foo_Bar.  Occasional,
  4252 INCOMPATIBILITY.
  4253 
  4254 * Operations of structure Skip_Proof no longer require quick_and_dirty
  4255 mode, which avoids critical setmp.
  4256 
  4257 * Eliminated old Attrib.add_attributes, Method.add_methods and related
  4258 combinators for "args".  INCOMPATIBILITY, need to use simplified
  4259 Attrib/Method.setup introduced in Isabelle2009.
  4260 
  4261 * Proper context for simpset_of, claset_of, clasimpset_of.  May fall
  4262 back on global_simpset_of, global_claset_of, global_clasimpset_of as
  4263 last resort.  INCOMPATIBILITY.
  4264 
  4265 * Display.pretty_thm now requires a proper context (cf. former
  4266 ProofContext.pretty_thm).  May fall back on Display.pretty_thm_global
  4267 or even Display.pretty_thm_without_context as last resort.
  4268 INCOMPATIBILITY.
  4269 
  4270 * Discontinued Display.pretty_ctyp/cterm etc.  INCOMPATIBILITY, use
  4271 Syntax.pretty_typ/term directly, preferably with proper context
  4272 instead of global theory.
  4273 
  4274 
  4275 *** System ***
  4276 
  4277 * Further fine tuning of parallel proof checking, scales up to 8 cores
  4278 (max. speedup factor 5.0).  See also Goal.parallel_proofs in ML and
  4279 usedir option -q.
  4280 
  4281 * Support for additional "Isabelle components" via etc/components, see
  4282 also the system manual.
  4283 
  4284 * The isabelle makeall tool now operates on all components with
  4285 IsaMakefile, not just hardwired "logics".
  4286 
  4287 * Removed "compress" option from isabelle-process and isabelle usedir;
  4288 this is always enabled.
  4289 
  4290 * Discontinued support for Poly/ML 4.x versions.
  4291 
  4292 * Isabelle tool "wwwfind" provides web interface for 'find_theorems'
  4293 on a given logic image.  This requires the lighttpd webserver and is
  4294 currently supported on Linux only.
  4295 
  4296 
  4297 
  4298 New in Isabelle2009 (April 2009)
  4299 --------------------------------
  4300 
  4301 *** General ***
  4302 
  4303 * Simplified main Isabelle executables, with less surprises on
  4304 case-insensitive file-systems (such as Mac OS).
  4305 
  4306   - The main Isabelle tool wrapper is now called "isabelle" instead of
  4307     "isatool."
  4308 
  4309   - The former "isabelle" alias for "isabelle-process" has been
  4310     removed (should rarely occur to regular users).
  4311 
  4312   - The former "isabelle-interface" and its alias "Isabelle" have been
  4313     removed (interfaces are now regular Isabelle tools).
  4314 
  4315 Within scripts and make files, the Isabelle environment variables
  4316 ISABELLE_TOOL and ISABELLE_PROCESS replace old ISATOOL and ISABELLE,
  4317 respectively.  (The latter are still available as legacy feature.)
  4318 
  4319 The old isabelle-interface wrapper could react in confusing ways if
  4320 the interface was uninstalled or changed otherwise.  Individual
  4321 interface tool configuration is now more explicit, see also the
  4322 Isabelle system manual.  In particular, Proof General is now available
  4323 via "isabelle emacs".
  4324 
  4325 INCOMPATIBILITY, need to adapt derivative scripts.  Users may need to
  4326 purge installed copies of Isabelle executables and re-run "isabelle
  4327 install -p ...", or use symlinks.
  4328 
  4329 * The default for ISABELLE_HOME_USER is now ~/.isabelle instead of the
  4330 old ~/isabelle, which was slightly non-standard and apt to cause
  4331 surprises on case-insensitive file-systems (such as Mac OS).
  4332 
  4333 INCOMPATIBILITY, need to move existing ~/isabelle/etc,
  4334 ~/isabelle/heaps, ~/isabelle/browser_info to the new place.  Special
  4335 care is required when using older releases of Isabelle.  Note that
  4336 ISABELLE_HOME_USER can be changed in Isabelle/etc/settings of any
  4337 Isabelle distribution, in order to use the new ~/.isabelle uniformly.
  4338 
  4339 * Proofs of fully specified statements are run in parallel on
  4340 multi-core systems.  A speedup factor of 2.5 to 3.2 can be expected on
  4341 a regular 4-core machine, if the initial heap space is made reasonably
  4342 large (cf. Poly/ML option -H).  (Requires Poly/ML 5.2.1 or later.)
  4343 
  4344 * The main reference manuals ("isar-ref", "implementation", and
  4345 "system") have been updated and extended.  Formally checked references
  4346 as hyperlinks are now available uniformly.
  4347 
  4348 
  4349 *** Pure ***
  4350 
  4351 * Complete re-implementation of locales.  INCOMPATIBILITY in several
  4352 respects.  The most important changes are listed below.  See the
  4353 Tutorial on Locales ("locales" manual) for details.
  4354 
  4355 - In locale expressions, instantiation replaces renaming.  Parameters
  4356 must be declared in a for clause.  To aid compatibility with previous
  4357 parameter inheritance, in locale declarations, parameters that are not
  4358 'touched' (instantiation position "_" or omitted) are implicitly added
  4359 with their syntax at the beginning of the for clause.
  4360 
  4361 - Syntax from abbreviations and definitions in locales is available in
  4362 locale expressions and context elements.  The latter is particularly
  4363 useful in locale declarations.
  4364 
  4365 - More flexible mechanisms to qualify names generated by locale
  4366 expressions.  Qualifiers (prefixes) may be specified in locale
  4367 expressions, and can be marked as mandatory (syntax: "name!:") or
  4368 optional (syntax "name?:").  The default depends for plain "name:"
  4369 depends on the situation where a locale expression is used: in
  4370 commands 'locale' and 'sublocale' prefixes are optional, in
  4371 'interpretation' and 'interpret' prefixes are mandatory.  The old
  4372 implicit qualifiers derived from the parameter names of a locale are
  4373 no longer generated.
  4374 
  4375 - Command "sublocale l < e" replaces "interpretation l < e".  The
  4376 instantiation clause in "interpretation" and "interpret" (square
  4377 brackets) is no longer available.  Use locale expressions.
  4378 
  4379 - When converting proof scripts, mandatory qualifiers in
  4380 'interpretation' and 'interpret' should be retained by default, even
  4381 if this is an INCOMPATIBILITY compared to former behavior.  In the
  4382 worst case, use the "name?:" form for non-mandatory ones.  Qualifiers
  4383 in locale expressions range over a single locale instance only.
  4384 
  4385 - Dropped locale element "includes".  This is a major INCOMPATIBILITY.
  4386 In existing theorem specifications replace the includes element by the
  4387 respective context elements of the included locale, omitting those
  4388 that are already present in the theorem specification.  Multiple
  4389 assume elements of a locale should be replaced by a single one
  4390 involving the locale predicate.  In the proof body, declarations (most
  4391 notably theorems) may be regained by interpreting the respective
  4392 locales in the proof context as required (command "interpret").
  4393 
  4394 If using "includes" in replacement of a target solely because the
  4395 parameter types in the theorem are not as general as in the target,
  4396 consider declaring a new locale with additional type constraints on
  4397 the parameters (context element "constrains").
  4398 
  4399 - Discontinued "locale (open)".  INCOMPATIBILITY.
  4400 
  4401 - Locale interpretation commands no longer attempt to simplify goal.
  4402 INCOMPATIBILITY: in rare situations the generated goal differs.  Use
  4403 methods intro_locales and unfold_locales to clarify.
  4404 
  4405 - Locale interpretation commands no longer accept interpretation
  4406 attributes.  INCOMPATIBILITY.
  4407 
  4408 * Class declaration: so-called "base sort" must not be given in import
  4409 list any longer, but is inferred from the specification.  Particularly
  4410 in HOL, write
  4411 
  4412     class foo = ...
  4413 
  4414 instead of
  4415 
  4416     class foo = type + ...
  4417 
  4418 * Class target: global versions of theorems stemming do not carry a
  4419 parameter prefix any longer.  INCOMPATIBILITY.
  4420 
  4421 * Class 'instance' command no longer accepts attached definitions.
  4422 INCOMPATIBILITY, use proper 'instantiation' target instead.
  4423 
  4424 * Recovered hiding of consts, which was accidentally broken in
  4425 Isabelle2007.  Potential INCOMPATIBILITY, ``hide const c'' really
  4426 makes c inaccessible; consider using ``hide (open) const c'' instead.
  4427 
  4428 * Slightly more coherent Pure syntax, with updated documentation in
  4429 isar-ref manual.  Removed locales meta_term_syntax and
  4430 meta_conjunction_syntax: TERM and &&& (formerly &&) are now permanent,
  4431 INCOMPATIBILITY in rare situations.  Note that &&& should not be used
  4432 directly in regular applications.
  4433 
  4434 * There is a new syntactic category "float_const" for signed decimal
  4435 fractions (e.g. 123.45 or -123.45).
  4436 
  4437 * Removed exotic 'token_translation' command.  INCOMPATIBILITY, use ML
  4438 interface with 'setup' command instead.
  4439 
  4440 * Command 'local_setup' is similar to 'setup', but operates on a local
  4441 theory context.
  4442 
  4443 * The 'axiomatization' command now only works within a global theory
  4444 context.  INCOMPATIBILITY.
  4445 
  4446 * Goal-directed proof now enforces strict proof irrelevance wrt. sort
  4447 hypotheses.  Sorts required in the course of reasoning need to be
  4448 covered by the constraints in the initial statement, completed by the
  4449 type instance information of the background theory.  Non-trivial sort
  4450 hypotheses, which rarely occur in practice, may be specified via
  4451 vacuous propositions of the form SORT_CONSTRAINT('a::c).  For example:
  4452 
  4453   lemma assumes "SORT_CONSTRAINT('a::empty)" shows False ...
  4454 
  4455 The result contains an implicit sort hypotheses as before --
  4456 SORT_CONSTRAINT premises are eliminated as part of the canonical rule
  4457 normalization.
  4458 
  4459 * Generalized Isar history, with support for linear undo, direct state
  4460 addressing etc.
  4461 
  4462 * Changed defaults for unify configuration options:
  4463 
  4464   unify_trace_bound = 50 (formerly 25)
  4465   unify_search_bound = 60 (formerly 30)
  4466 
  4467 * Different bookkeeping for code equations (INCOMPATIBILITY):
  4468 
  4469   a) On theory merge, the last set of code equations for a particular
  4470      constant is taken (in accordance with the policy applied by other
  4471      parts of the code generator framework).
  4472 
  4473   b) Code equations stemming from explicit declarations (e.g. code
  4474      attribute) gain priority over default code equations stemming
  4475      from definition, primrec, fun etc.
  4476 
  4477 * Keyword 'code_exception' now named 'code_abort'.  INCOMPATIBILITY.
  4478 
  4479 * Unified theorem tables for both code generators.  Thus [code
  4480 func] has disappeared and only [code] remains.  INCOMPATIBILITY.
  4481 
  4482 * Command 'find_consts' searches for constants based on type and name
  4483 patterns, e.g.
  4484 
  4485     find_consts "_ => bool"
  4486 
  4487 By default, matching is against subtypes, but it may be restricted to
  4488 the whole type.  Searching by name is possible.  Multiple queries are
  4489 conjunctive and queries may be negated by prefixing them with a
  4490 hyphen:
  4491 
  4492     find_consts strict: "_ => bool" name: "Int" -"int => int"
  4493 
  4494 * New 'find_theorems' criterion "solves" matches theorems that
  4495 directly solve the current goal (modulo higher-order unification).
  4496 
  4497 * Auto solve feature for main theorem statements: whenever a new goal
  4498 is stated, "find_theorems solves" is called; any theorems that could
  4499 solve the lemma directly are listed as part of the goal state.
  4500 Cf. associated options in Proof General Isabelle settings menu,
  4501 enabled by default, with reasonable timeout for pathological cases of
  4502 higher-order unification.
  4503 
  4504 
  4505 *** Document preparation ***
  4506 
  4507 * Antiquotation @{lemma} now imitates a regular terminal proof,
  4508 demanding keyword 'by' and supporting the full method expression
  4509 syntax just like the Isar command 'by'.
  4510 
  4511 
  4512 *** HOL ***
  4513 
  4514 * Integrated main parts of former image HOL-Complex with HOL.  Entry
  4515 points Main and Complex_Main remain as before.
  4516 
  4517 * Logic image HOL-Plain provides a minimal HOL with the most important
  4518 tools available (inductive, datatype, primrec, ...).  This facilitates
  4519 experimentation and tool development.  Note that user applications
  4520 (and library theories) should never refer to anything below theory
  4521 Main, as before.
  4522 
  4523 * Logic image HOL-Main stops at theory Main, and thus facilitates
  4524 experimentation due to shorter build times.
  4525 
  4526 * Logic image HOL-NSA contains theories of nonstandard analysis which
  4527 were previously part of former HOL-Complex.  Entry point Hyperreal
  4528 remains valid, but theories formerly using Complex_Main should now use
  4529 new entry point Hypercomplex.
  4530 
  4531 * Generic ATP manager for Sledgehammer, based on ML threads instead of
  4532 Posix processes.  Avoids potentially expensive forking of the ML
  4533 process.  New thread-based implementation also works on non-Unix
  4534 platforms (Cygwin).  Provers are no longer hardwired, but defined
  4535 within the theory via plain ML wrapper functions.  Basic Sledgehammer
  4536 commands are covered in the isar-ref manual.
  4537 
  4538 * Wrapper scripts for remote SystemOnTPTP service allows to use
  4539 sledgehammer without local ATP installation (Vampire etc.). Other
  4540 provers may be included via suitable ML wrappers, see also
  4541 src/HOL/ATP_Linkup.thy.
  4542 
  4543 * ATP selection (E/Vampire/Spass) is now via Proof General's settings
  4544 menu.
  4545 
  4546 * The metis method no longer fails because the theorem is too trivial
  4547 (contains the empty clause).
  4548 
  4549 * The metis method now fails in the usual manner, rather than raising
  4550 an exception, if it determines that it cannot prove the theorem.
  4551 
  4552 * Method "coherent" implements a prover for coherent logic (see also
  4553 src/Tools/coherent.ML).
  4554 
  4555 * Constants "undefined" and "default" replace "arbitrary".  Usually
  4556 "undefined" is the right choice to replace "arbitrary", though
  4557 logically there is no difference.  INCOMPATIBILITY.
  4558 
  4559 * Command "value" now integrates different evaluation mechanisms.  The
  4560 result of the first successful evaluation mechanism is printed.  In
  4561 square brackets a particular named evaluation mechanisms may be
  4562 specified (currently, [SML], [code] or [nbe]).  See further
  4563 src/HOL/ex/Eval_Examples.thy.
  4564 
  4565 * Normalization by evaluation now allows non-leftlinear equations.
  4566 Declare with attribute [code nbe].
  4567 
  4568 * Methods "case_tac" and "induct_tac" now refer to the very same rules
  4569 as the structured Isar versions "cases" and "induct", cf. the
  4570 corresponding "cases" and "induct" attributes.  Mutual induction rules
  4571 are now presented as a list of individual projections
  4572 (e.g. foo_bar.inducts for types foo and bar); the old format with
  4573 explicit HOL conjunction is no longer supported.  INCOMPATIBILITY, in
  4574 rare situations a different rule is selected --- notably nested tuple
  4575 elimination instead of former prod.exhaust: use explicit (case_tac t
  4576 rule: prod.exhaust) here.
  4577 
  4578 * Attributes "cases", "induct", "coinduct" support "del" option.
  4579 
  4580 * Removed fact "case_split_thm", which duplicates "case_split".
  4581 
  4582 * The option datatype has been moved to a new theory Option.  Renamed
  4583 option_map to Option.map, and o2s to Option.set, INCOMPATIBILITY.
  4584 
  4585 * New predicate "strict_mono" classifies strict functions on partial
  4586 orders.  With strict functions on linear orders, reasoning about
  4587 (in)equalities is facilitated by theorems "strict_mono_eq",
  4588 "strict_mono_less_eq" and "strict_mono_less".
  4589 
  4590 * Some set operations are now proper qualified constants with
  4591 authentic syntax.  INCOMPATIBILITY:
  4592 
  4593     op Int ~>   Set.Int
  4594     op Un ~>    Set.Un
  4595     INTER ~>    Set.INTER
  4596     UNION ~>    Set.UNION
  4597     Inter ~>    Set.Inter
  4598     Union ~>    Set.Union
  4599     {} ~>       Set.empty
  4600     UNIV ~>     Set.UNIV
  4601 
  4602 * Class complete_lattice with operations Inf, Sup, INFI, SUPR now in
  4603 theory Set.
  4604 
  4605 * Auxiliary class "itself" has disappeared -- classes without any
  4606 parameter are treated as expected by the 'class' command.
  4607 
  4608 * Leibnitz's Series for Pi and the arcus tangens and logarithm series.
  4609 
  4610 * Common decision procedures (Cooper, MIR, Ferrack, Approximation,
  4611 Dense_Linear_Order) are now in directory HOL/Decision_Procs.
  4612 
  4613 * Theory src/HOL/Decision_Procs/Approximation provides the new proof
  4614 method "approximation".  It proves formulas on real values by using
  4615 interval arithmetic.  In the formulas are also the transcendental
  4616 functions sin, cos, tan, atan, ln, exp and the constant pi are
  4617 allowed. For examples see
  4618 src/HOL/Descision_Procs/ex/Approximation_Ex.thy.
  4619 
  4620 * Theory "Reflection" now resides in HOL/Library.
  4621 
  4622 * Entry point to Word library now simply named "Word".
  4623 INCOMPATIBILITY.
  4624 
  4625 * Made source layout more coherent with logical distribution
  4626 structure:
  4627 
  4628     src/HOL/Library/RType.thy ~> src/HOL/Typerep.thy
  4629     src/HOL/Library/Code_Message.thy ~> src/HOL/
  4630     src/HOL/Library/GCD.thy ~> src/HOL/
  4631     src/HOL/Library/Order_Relation.thy ~> src/HOL/
  4632     src/HOL/Library/Parity.thy ~> src/HOL/
  4633     src/HOL/Library/Univ_Poly.thy ~> src/HOL/
  4634     src/HOL/Real/ContNotDenum.thy ~> src/HOL/Library/
  4635     src/HOL/Real/Lubs.thy ~> src/HOL/
  4636     src/HOL/Real/PReal.thy ~> src/HOL/
  4637     src/HOL/Real/Rational.thy ~> src/HOL/
  4638     src/HOL/Real/RComplete.thy ~> src/HOL/
  4639     src/HOL/Real/RealDef.thy ~> src/HOL/
  4640     src/HOL/Real/RealPow.thy ~> src/HOL/
  4641     src/HOL/Real/Real.thy ~> src/HOL/
  4642     src/HOL/Complex/Complex_Main.thy ~> src/HOL/
  4643     src/HOL/Complex/Complex.thy ~> src/HOL/
  4644     src/HOL/Complex/FrechetDeriv.thy ~> src/HOL/Library/
  4645     src/HOL/Complex/Fundamental_Theorem_Algebra.thy ~> src/HOL/Library/
  4646     src/HOL/Hyperreal/Deriv.thy ~> src/HOL/
  4647     src/HOL/Hyperreal/Fact.thy ~> src/HOL/
  4648     src/HOL/Hyperreal/Integration.thy ~> src/HOL/
  4649     src/HOL/Hyperreal/Lim.thy ~> src/HOL/
  4650     src/HOL/Hyperreal/Ln.thy ~> src/HOL/
  4651     src/HOL/Hyperreal/Log.thy ~> src/HOL/
  4652     src/HOL/Hyperreal/MacLaurin.thy ~> src/HOL/
  4653     src/HOL/Hyperreal/NthRoot.thy ~> src/HOL/
  4654     src/HOL/Hyperreal/Series.thy ~> src/HOL/
  4655     src/HOL/Hyperreal/SEQ.thy ~> src/HOL/
  4656     src/HOL/Hyperreal/Taylor.thy ~> src/HOL/
  4657     src/HOL/Hyperreal/Transcendental.thy ~> src/HOL/
  4658     src/HOL/Real/Float ~> src/HOL/Library/
  4659     src/HOL/Real/HahnBanach ~> src/HOL/HahnBanach
  4660     src/HOL/Real/RealVector.thy ~> src/HOL/
  4661 
  4662     src/HOL/arith_data.ML ~> src/HOL/Tools
  4663     src/HOL/hologic.ML ~> src/HOL/Tools
  4664     src/HOL/simpdata.ML ~> src/HOL/Tools
  4665     src/HOL/int_arith1.ML ~> src/HOL/Tools/int_arith.ML
  4666     src/HOL/int_factor_simprocs.ML ~> src/HOL/Tools
  4667     src/HOL/nat_simprocs.ML ~> src/HOL/Tools
  4668     src/HOL/Real/float_arith.ML ~> src/HOL/Tools
  4669     src/HOL/Real/float_syntax.ML ~> src/HOL/Tools
  4670     src/HOL/Real/rat_arith.ML ~> src/HOL/Tools
  4671     src/HOL/Real/real_arith.ML ~> src/HOL/Tools
  4672 
  4673     src/HOL/Library/Array.thy ~> src/HOL/Imperative_HOL
  4674     src/HOL/Library/Heap_Monad.thy ~> src/HOL/Imperative_HOL
  4675     src/HOL/Library/Heap.thy ~> src/HOL/Imperative_HOL
  4676     src/HOL/Library/Imperative_HOL.thy ~> src/HOL/Imperative_HOL
  4677     src/HOL/Library/Ref.thy ~> src/HOL/Imperative_HOL
  4678     src/HOL/Library/Relational.thy ~> src/HOL/Imperative_HOL
  4679 
  4680 * If methods "eval" and "evaluation" encounter a structured proof
  4681 state with !!/==>, only the conclusion is evaluated to True (if
  4682 possible), avoiding strange error messages.
  4683 
  4684 * Method "sizechange" automates termination proofs using (a
  4685 modification of) the size-change principle.  Requires SAT solver.  See
  4686 src/HOL/ex/Termination.thy for examples.
  4687 
  4688 * Simplifier: simproc for let expressions now unfolds if bound
  4689 variable occurs at most once in let expression body.  INCOMPATIBILITY.
  4690 
  4691 * Method "arith": Linear arithmetic now ignores all inequalities when
  4692 fast_arith_neq_limit is exceeded, instead of giving up entirely.
  4693 
  4694 * New attribute "arith" for facts that should always be used
  4695 automatically by arithmetic. It is intended to be used locally in
  4696 proofs, e.g.
  4697 
  4698   assumes [arith]: "x > 0"
  4699 
  4700 Global usage is discouraged because of possible performance impact.
  4701 
  4702 * New classes "top" and "bot" with corresponding operations "top" and
  4703 "bot" in theory Orderings; instantiation of class "complete_lattice"
  4704 requires instantiation of classes "top" and "bot".  INCOMPATIBILITY.
  4705 
  4706 * Changed definition lemma "less_fun_def" in order to provide an
  4707 instance for preorders on functions; use lemma "less_le" instead.
  4708 INCOMPATIBILITY.
  4709 
  4710 * Theory Orderings: class "wellorder" moved here, with explicit
  4711 induction rule "less_induct" as assumption.  For instantiation of
  4712 "wellorder" by means of predicate "wf", use rule wf_wellorderI.
  4713 INCOMPATIBILITY.
  4714 
  4715 * Theory Orderings: added class "preorder" as superclass of "order".
  4716 INCOMPATIBILITY: Instantiation proofs for order, linorder
  4717 etc. slightly changed.  Some theorems named order_class.* now named
  4718 preorder_class.*.
  4719 
  4720 * Theory Relation: renamed "refl" to "refl_on", "reflexive" to "refl,
  4721 "diag" to "Id_on".
  4722 
  4723 * Theory Finite_Set: added a new fold combinator of type
  4724 
  4725   ('a => 'b => 'b) => 'b => 'a set => 'b
  4726 
  4727 Occasionally this is more convenient than the old fold combinator
  4728 which is now defined in terms of the new one and renamed to
  4729 fold_image.
  4730 
  4731 * Theories Ring_and_Field and OrderedGroup: The lemmas "group_simps"
  4732 and "ring_simps" have been replaced by "algebra_simps" (which can be
  4733 extended with further lemmas!).  At the moment both still exist but
  4734 the former will disappear at some point.
  4735 
  4736 * Theory Power: Lemma power_Suc is now declared as a simp rule in
  4737 class recpower.  Type-specific simp rules for various recpower types
  4738 have been removed.  INCOMPATIBILITY, rename old lemmas as follows:
  4739 
  4740 rat_power_0    -> power_0
  4741 rat_power_Suc  -> power_Suc
  4742 realpow_0      -> power_0
  4743 realpow_Suc    -> power_Suc
  4744 complexpow_0   -> power_0
  4745 complexpow_Suc -> power_Suc
  4746 power_poly_0   -> power_0
  4747 power_poly_Suc -> power_Suc
  4748 
  4749 * Theories Ring_and_Field and Divides: Definition of "op dvd" has been
  4750 moved to separate class dvd in Ring_and_Field; a couple of lemmas on
  4751 dvd has been generalized to class comm_semiring_1.  Likewise a bunch
  4752 of lemmas from Divides has been generalized from nat to class
  4753 semiring_div.  INCOMPATIBILITY.  This involves the following theorem
  4754 renames resulting from duplicate elimination:
  4755 
  4756     dvd_def_mod ~>          dvd_eq_mod_eq_0
  4757     zero_dvd_iff ~>         dvd_0_left_iff
  4758     dvd_0 ~>                dvd_0_right
  4759     DIVISION_BY_ZERO_DIV ~> div_by_0
  4760     DIVISION_BY_ZERO_MOD ~> mod_by_0
  4761     mult_div ~>             div_mult_self2_is_id
  4762     mult_mod ~>             mod_mult_self2_is_0
  4763 
  4764 * Theory IntDiv: removed many lemmas that are instances of class-based
  4765 generalizations (from Divides and Ring_and_Field).  INCOMPATIBILITY,
  4766 rename old lemmas as follows:
  4767 
  4768 dvd_diff               -> nat_dvd_diff
  4769 dvd_zminus_iff         -> dvd_minus_iff
  4770 mod_add1_eq            -> mod_add_eq
  4771 mod_mult1_eq           -> mod_mult_right_eq
  4772 mod_mult1_eq'          -> mod_mult_left_eq
  4773 mod_mult_distrib_mod   -> mod_mult_eq
  4774 nat_mod_add_left_eq    -> mod_add_left_eq
  4775 nat_mod_add_right_eq   -> mod_add_right_eq
  4776 nat_mod_div_trivial    -> mod_div_trivial
  4777 nat_mod_mod_trivial    -> mod_mod_trivial
  4778 zdiv_zadd_self1        -> div_add_self1
  4779 zdiv_zadd_self2        -> div_add_self2
  4780 zdiv_zmult_self1       -> div_mult_self2_is_id
  4781 zdiv_zmult_self2       -> div_mult_self1_is_id
  4782 zdvd_triv_left         -> dvd_triv_left
  4783 zdvd_triv_right        -> dvd_triv_right
  4784 zdvd_zmult_cancel_disj -> dvd_mult_cancel_left
  4785 zmod_eq0_zdvd_iff      -> dvd_eq_mod_eq_0[symmetric]
  4786 zmod_zadd_left_eq      -> mod_add_left_eq
  4787 zmod_zadd_right_eq     -> mod_add_right_eq
  4788 zmod_zadd_self1        -> mod_add_self1
  4789 zmod_zadd_self2        -> mod_add_self2
  4790 zmod_zadd1_eq          -> mod_add_eq
  4791 zmod_zdiff1_eq         -> mod_diff_eq
  4792 zmod_zdvd_zmod         -> mod_mod_cancel
  4793 zmod_zmod_cancel       -> mod_mod_cancel
  4794 zmod_zmult_self1       -> mod_mult_self2_is_0
  4795 zmod_zmult_self2       -> mod_mult_self1_is_0
  4796 zmod_1                 -> mod_by_1
  4797 zdiv_1                 -> div_by_1
  4798 zdvd_abs1              -> abs_dvd_iff
  4799 zdvd_abs2              -> dvd_abs_iff
  4800 zdvd_refl              -> dvd_refl
  4801 zdvd_trans             -> dvd_trans
  4802 zdvd_zadd              -> dvd_add
  4803 zdvd_zdiff             -> dvd_diff
  4804 zdvd_zminus_iff        -> dvd_minus_iff
  4805 zdvd_zminus2_iff       -> minus_dvd_iff
  4806 zdvd_zmultD            -> dvd_mult_right
  4807 zdvd_zmultD2           -> dvd_mult_left
  4808 zdvd_zmult_mono        -> mult_dvd_mono
  4809 zdvd_0_right           -> dvd_0_right
  4810 zdvd_0_left            -> dvd_0_left_iff
  4811 zdvd_1_left            -> one_dvd
  4812 zminus_dvd_iff         -> minus_dvd_iff
  4813 
  4814 * Theory Rational: 'Fract k 0' now equals '0'.  INCOMPATIBILITY.
  4815 
  4816 * The real numbers offer decimal input syntax: 12.34 is translated
  4817 into 1234/10^2. This translation is not reversed upon output.
  4818 
  4819 * Theory Library/Polynomial defines an abstract type 'a poly of
  4820 univariate polynomials with coefficients of type 'a.  In addition to
  4821 the standard ring operations, it also supports div and mod.  Code
  4822 generation is also supported, using list-style constructors.
  4823 
  4824 * Theory Library/Inner_Product defines a class of real_inner for real
  4825 inner product spaces, with an overloaded operation inner :: 'a => 'a
  4826 => real.  Class real_inner is a subclass of real_normed_vector from
  4827 theory RealVector.
  4828 
  4829 * Theory Library/Product_Vector provides instances for the product
  4830 type 'a * 'b of several classes from RealVector and Inner_Product.
  4831 Definitions of addition, subtraction, scalar multiplication, norms,
  4832 and inner products are included.
  4833 
  4834 * Theory Library/Bit defines the field "bit" of integers modulo 2.  In
  4835 addition to the field operations, numerals and case syntax are also
  4836 supported.
  4837 
  4838 * Theory Library/Diagonalize provides constructive version of Cantor's
  4839 first diagonalization argument.
  4840 
  4841 * Theory Library/GCD: Curried operations gcd, lcm (for nat) and zgcd,
  4842 zlcm (for int); carried together from various gcd/lcm developements in
  4843 the HOL Distribution.  Constants zgcd and zlcm replace former igcd and
  4844 ilcm; corresponding theorems renamed accordingly.  INCOMPATIBILITY,
  4845 may recover tupled syntax as follows:
  4846 
  4847     hide (open) const gcd
  4848     abbreviation gcd where
  4849       "gcd == (%(a, b). GCD.gcd a b)"
  4850     notation (output)
  4851       GCD.gcd ("gcd '(_, _')")
  4852 
  4853 The same works for lcm, zgcd, zlcm.
  4854 
  4855 * Theory Library/Nat_Infinity: added addition, numeral syntax and more
  4856 instantiations for algebraic structures.  Removed some duplicate
  4857 theorems.  Changes in simp rules.  INCOMPATIBILITY.
  4858 
  4859 * ML antiquotation @{code} takes a constant as argument and generates
  4860 corresponding code in background and inserts name of the corresponding
  4861 resulting ML value/function/datatype constructor binding in place.
  4862 All occurrences of @{code} with a single ML block are generated
  4863 simultaneously.  Provides a generic and safe interface for
  4864 instrumentalizing code generation.  See
  4865 src/HOL/Decision_Procs/Ferrack.thy for a more ambitious application.
  4866 In future you ought to refrain from ad-hoc compiling generated SML
  4867 code on the ML toplevel.  Note that (for technical reasons) @{code}
  4868 cannot refer to constants for which user-defined serializations are
  4869 set.  Refer to the corresponding ML counterpart directly in that
  4870 cases.
  4871 
  4872 * Command 'rep_datatype': instead of theorem names the command now
  4873 takes a list of terms denoting the constructors of the type to be
  4874 represented as datatype.  The characteristic theorems have to be
  4875 proven.  INCOMPATIBILITY.  Also observe that the following theorems
  4876 have disappeared in favour of existing ones:
  4877 
  4878     unit_induct                 ~> unit.induct
  4879     prod_induct                 ~> prod.induct
  4880     sum_induct                  ~> sum.induct
  4881     Suc_Suc_eq                  ~> nat.inject
  4882     Suc_not_Zero Zero_not_Suc   ~> nat.distinct
  4883 
  4884 
  4885 *** HOL-Algebra ***
  4886 
  4887 * New locales for orders and lattices where the equivalence relation
  4888 is not restricted to equality.  INCOMPATIBILITY: all order and lattice
  4889 locales use a record structure with field eq for the equivalence.
  4890 
  4891 * New theory of factorial domains.
  4892 
  4893 * Units_l_inv and Units_r_inv are now simp rules by default.
  4894 INCOMPATIBILITY.  Simplifier proof that require deletion of l_inv
  4895 and/or r_inv will now also require deletion of these lemmas.
  4896 
  4897 * Renamed the following theorems, INCOMPATIBILITY:
  4898 
  4899 UpperD ~> Upper_memD
  4900 LowerD ~> Lower_memD
  4901 least_carrier ~> least_closed
  4902 greatest_carrier ~> greatest_closed
  4903 greatest_Lower_above ~> greatest_Lower_below
  4904 one_zero ~> carrier_one_zero
  4905 one_not_zero ~> carrier_one_not_zero  (collision with assumption)
  4906 
  4907 
  4908 *** HOL-Nominal ***
  4909 
  4910 * Nominal datatypes can now contain type-variables.
  4911 
  4912 * Commands 'nominal_inductive' and 'equivariance' work with local
  4913 theory targets.
  4914 
  4915 * Nominal primrec can now works with local theory targets and its
  4916 specification syntax now conforms to the general format as seen in
  4917 'inductive' etc.
  4918 
  4919 * Method "perm_simp" honours the standard simplifier attributes
  4920 (no_asm), (no_asm_use) etc.
  4921 
  4922 * The new predicate #* is defined like freshness, except that on the
  4923 left hand side can be a set or list of atoms.
  4924 
  4925 * Experimental command 'nominal_inductive2' derives strong induction
  4926 principles for inductive definitions.  In contrast to
  4927 'nominal_inductive', which can only deal with a fixed number of
  4928 binders, it can deal with arbitrary expressions standing for sets of
  4929 atoms to be avoided.  The only inductive definition we have at the
  4930 moment that needs this generalisation is the typing rule for Lets in
  4931 the algorithm W:
  4932 
  4933  Gamma |- t1 : T1   (x,close Gamma T1)::Gamma |- t2 : T2   x#Gamma
  4934  -----------------------------------------------------------------
  4935          Gamma |- Let x be t1 in t2 : T2
  4936 
  4937 In this rule one wants to avoid all the binders that are introduced by
  4938 "close Gamma T1".  We are looking for other examples where this
  4939 feature might be useful.  Please let us know.
  4940 
  4941 
  4942 *** HOLCF ***
  4943 
  4944 * Reimplemented the simplification procedure for proving continuity
  4945 subgoals.  The new simproc is extensible; users can declare additional
  4946 continuity introduction rules with the attribute [cont2cont].
  4947 
  4948 * The continuity simproc now uses a different introduction rule for
  4949 solving continuity subgoals on terms with lambda abstractions.  In
  4950 some rare cases the new simproc may fail to solve subgoals that the
  4951 old one could solve, and "simp add: cont2cont_LAM" may be necessary.
  4952 Potential INCOMPATIBILITY.
  4953 
  4954 * Command 'fixrec': specification syntax now conforms to the general
  4955 format as seen in 'inductive' etc.  See src/HOLCF/ex/Fixrec_ex.thy for
  4956 examples.  INCOMPATIBILITY.
  4957 
  4958 
  4959 *** ZF ***
  4960 
  4961 * Proof of Zorn's Lemma for partial orders.
  4962 
  4963 
  4964 *** ML ***
  4965 
  4966 * Multithreading for Poly/ML 5.1/5.2 is no longer supported, only for
  4967 Poly/ML 5.2.1 or later.  Important note: the TimeLimit facility
  4968 depends on multithreading, so timouts will not work before Poly/ML
  4969 5.2.1!
  4970 
  4971 * High-level support for concurrent ML programming, see
  4972 src/Pure/Cuncurrent.  The data-oriented model of "future values" is
  4973 particularly convenient to organize independent functional
  4974 computations.  The concept of "synchronized variables" provides a
  4975 higher-order interface for components with shared state, avoiding the
  4976 delicate details of mutexes and condition variables.  (Requires
  4977 Poly/ML 5.2.1 or later.)
  4978 
  4979 * ML bindings produced via Isar commands are stored within the Isar
  4980 context (theory or proof).  Consequently, commands like 'use' and 'ML'
  4981 become thread-safe and work with undo as expected (concerning
  4982 top-level bindings, not side-effects on global references).
  4983 INCOMPATIBILITY, need to provide proper Isar context when invoking the
  4984 compiler at runtime; really global bindings need to be given outside a
  4985 theory.  (Requires Poly/ML 5.2 or later.)
  4986 
  4987 * Command 'ML_prf' is analogous to 'ML' but works within a proof
  4988 context.  Top-level ML bindings are stored within the proof context in
  4989 a purely sequential fashion, disregarding the nested proof structure.
  4990 ML bindings introduced by 'ML_prf' are discarded at the end of the
  4991 proof.  (Requires Poly/ML 5.2 or later.)
  4992 
  4993 * Simplified ML attribute and method setup, cf. functions Attrib.setup
  4994 and Method.setup, as well as Isar commands 'attribute_setup' and
  4995 'method_setup'.  INCOMPATIBILITY for 'method_setup', need to simplify
  4996 existing code accordingly, or use plain 'setup' together with old
  4997 Method.add_method.
  4998 
  4999 * Simplified ML oracle interface Thm.add_oracle promotes 'a -> cterm
  5000 to 'a -> thm, while results are always tagged with an authentic oracle
  5001 name.  The Isar command 'oracle' is now polymorphic, no argument type
  5002 is specified.  INCOMPATIBILITY, need to simplify existing oracle code
  5003 accordingly.  Note that extra performance may be gained by producing
  5004 the cterm carefully, avoiding slow Thm.cterm_of.
  5005 
  5006 * Simplified interface for defining document antiquotations via
  5007 ThyOutput.antiquotation, ThyOutput.output, and optionally
  5008 ThyOutput.maybe_pretty_source.  INCOMPATIBILITY, need to simplify user
  5009 antiquotations accordingly, see src/Pure/Thy/thy_output.ML for common
  5010 examples.
  5011 
  5012 * More systematic treatment of long names, abstract name bindings, and
  5013 name space operations.  Basic operations on qualified names have been
  5014 move from structure NameSpace to Long_Name, e.g. Long_Name.base_name,
  5015 Long_Name.append.  Old type bstring has been mostly replaced by
  5016 abstract type binding (see structure Binding), which supports precise
  5017 qualification by packages and local theory targets, as well as proper
  5018 tracking of source positions.  INCOMPATIBILITY, need to wrap old
  5019 bstring values into Binding.name, or better pass through abstract
  5020 bindings everywhere.  See further src/Pure/General/long_name.ML,
  5021 src/Pure/General/binding.ML and src/Pure/General/name_space.ML
  5022 
  5023 * Result facts (from PureThy.note_thms, ProofContext.note_thms,
  5024 LocalTheory.note etc.) now refer to the *full* internal name, not the
  5025 bstring as before.  INCOMPATIBILITY, not detected by ML type-checking!
  5026 
  5027 * Disposed old type and term read functions (Sign.read_def_typ,
  5028 Sign.read_typ, Sign.read_def_terms, Sign.read_term,
  5029 Thm.read_def_cterms, Thm.read_cterm etc.).  INCOMPATIBILITY, should
  5030 use regular Syntax.read_typ, Syntax.read_term, Syntax.read_typ_global,
  5031 Syntax.read_term_global etc.; see also OldGoals.read_term as last
  5032 resort for legacy applications.
  5033 
  5034 * Disposed old declarations, tactics, tactic combinators that refer to
  5035 the simpset or claset of an implicit theory (such as Addsimps,
  5036 Simp_tac, SIMPSET).  INCOMPATIBILITY, should use @{simpset} etc. in
  5037 embedded ML text, or local_simpset_of with a proper context passed as
  5038 explicit runtime argument.
  5039 
  5040 * Rules and tactics that read instantiations (read_instantiate,
  5041 res_inst_tac, thin_tac, subgoal_tac etc.) now demand a proper proof
  5042 context, which is required for parsing and type-checking.  Moreover,
  5043 the variables are specified as plain indexnames, not string encodings
  5044 thereof.  INCOMPATIBILITY.
  5045 
  5046 * Generic Toplevel.add_hook interface allows to analyze the result of
  5047 transactions.  E.g. see src/Pure/ProofGeneral/proof_general_pgip.ML
  5048 for theorem dependency output of transactions resulting in a new
  5049 theory state.
  5050 
  5051 * ML antiquotations: block-structured compilation context indicated by
  5052 \<lbrace> ... \<rbrace>; additional antiquotation forms:
  5053 
  5054   @{binding name}                         - basic name binding
  5055   @{let ?pat = term}                      - term abbreviation (HO matching)
  5056   @{note name = fact}                     - fact abbreviation
  5057   @{thm fact}                             - singleton fact (with attributes)
  5058   @{thms fact}                            - general fact (with attributes)
  5059   @{lemma prop by method}                 - singleton goal
  5060   @{lemma prop by meth1 meth2}            - singleton goal
  5061   @{lemma prop1 ... propN by method}      - general goal
  5062   @{lemma prop1 ... propN by meth1 meth2} - general goal
  5063   @{lemma (open) ...}                     - open derivation
  5064 
  5065 
  5066 *** System ***
  5067 
  5068 * The Isabelle "emacs" tool provides a specific interface to invoke
  5069 Proof General / Emacs, with more explicit failure if that is not
  5070 installed (the old isabelle-interface script silently falls back on
  5071 isabelle-process).  The PROOFGENERAL_HOME setting determines the
  5072 installation location of the Proof General distribution.
  5073 
  5074 * Isabelle/lib/classes/Pure.jar provides basic support to integrate
  5075 the Isabelle process into a JVM/Scala application.  See
  5076 Isabelle/lib/jedit/plugin for a minimal example.  (The obsolete Java
  5077 process wrapper has been discontinued.)
  5078 
  5079 * Added homegrown Isabelle font with unicode layout, see lib/fonts.
  5080 
  5081 * Various status messages (with exact source position information) are
  5082 emitted, if proper markup print mode is enabled.  This allows
  5083 user-interface components to provide detailed feedback on internal
  5084 prover operations.
  5085 
  5086 
  5087 
  5088 New in Isabelle2008 (June 2008)
  5089 -------------------------------
  5090 
  5091 *** General ***
  5092 
  5093 * The Isabelle/Isar Reference Manual (isar-ref) has been reorganized
  5094 and updated, with formally checked references as hyperlinks.
  5095 
  5096 * Theory loader: use_thy (and similar operations) no longer set the
  5097 implicit ML context, which was occasionally hard to predict and in
  5098 conflict with concurrency.  INCOMPATIBILITY, use ML within Isar which
  5099 provides a proper context already.
  5100 
  5101 * Theory loader: old-style ML proof scripts being *attached* to a thy
  5102 file are no longer supported.  INCOMPATIBILITY, regular 'uses' and
  5103 'use' within a theory file will do the job.
  5104 
  5105 * Name space merge now observes canonical order, i.e. the second space
  5106 is inserted into the first one, while existing entries in the first
  5107 space take precedence.  INCOMPATIBILITY in rare situations, may try to
  5108 swap theory imports.
  5109 
  5110 * Syntax: symbol \<chi> is now considered a letter.  Potential
  5111 INCOMPATIBILITY in identifier syntax etc.
  5112 
  5113 * Outer syntax: string tokens no longer admit escaped white space,
  5114 which was an accidental (undocumented) feature.  INCOMPATIBILITY, use
  5115 white space without escapes.
  5116 
  5117 * Outer syntax: string tokens may contain arbitrary character codes
  5118 specified via 3 decimal digits (as in SML).  E.g. "foo\095bar" for
  5119 "foo_bar".
  5120 
  5121 
  5122 *** Pure ***
  5123 
  5124 * Context-dependent token translations.  Default setup reverts locally
  5125 fixed variables, and adds hilite markup for undeclared frees.
  5126 
  5127 * Unused theorems can be found using the new command 'unused_thms'.
  5128 There are three ways of invoking it:
  5129 
  5130 (1) unused_thms
  5131      Only finds unused theorems in the current theory.
  5132 
  5133 (2) unused_thms thy_1 ... thy_n -
  5134      Finds unused theorems in the current theory and all of its ancestors,
  5135      excluding the theories thy_1 ... thy_n and all of their ancestors.
  5136 
  5137 (3) unused_thms thy_1 ... thy_n - thy'_1 ... thy'_m
  5138      Finds unused theorems in the theories thy'_1 ... thy'_m and all of
  5139      their ancestors, excluding the theories thy_1 ... thy_n and all of
  5140      their ancestors.
  5141 
  5142 In order to increase the readability of the list produced by
  5143 unused_thms, theorems that have been created by a particular instance
  5144 of a theory command such as 'inductive' or 'function' are considered
  5145 to belong to the same "group", meaning that if at least one theorem in
  5146 this group is used, the other theorems in the same group are no longer
  5147 reported as unused.  Moreover, if all theorems in the group are
  5148 unused, only one theorem in the group is displayed.
  5149 
  5150 Note that proof objects have to be switched on in order for
  5151 unused_thms to work properly (i.e. !proofs must be >= 1, which is
  5152 usually the case when using Proof General with the default settings).
  5153 
  5154 * Authentic naming of facts disallows ad-hoc overwriting of previous
  5155 theorems within the same name space.  INCOMPATIBILITY, need to remove
  5156 duplicate fact bindings, or even accidental fact duplications.  Note
  5157 that tools may maintain dynamically scoped facts systematically, using
  5158 PureThy.add_thms_dynamic.
  5159 
  5160 * Command 'hide' now allows to hide from "fact" name space as well.
  5161 
  5162 * Eliminated destructive theorem database, simpset, claset, and
  5163 clasimpset.  Potential INCOMPATIBILITY, really need to observe linear
  5164 update of theories within ML code.
  5165 
  5166 * Eliminated theory ProtoPure and CPure, leaving just one Pure theory.
  5167 INCOMPATIBILITY, object-logics depending on former Pure require
  5168 additional setup PureThy.old_appl_syntax_setup; object-logics
  5169 depending on former CPure need to refer to Pure.
  5170 
  5171 * Commands 'use' and 'ML' are now purely functional, operating on
  5172 theory/local_theory.  Removed former 'ML_setup' (on theory), use 'ML'
  5173 instead.  Added 'ML_val' as mere diagnostic replacement for 'ML'.
  5174 INCOMPATIBILITY.
  5175 
  5176 * Command 'setup': discontinued implicit version with ML reference.
  5177 
  5178 * Instantiation target allows for simultaneous specification of class
  5179 instance operations together with an instantiation proof.
  5180 Type-checking phase allows to refer to class operations uniformly.
  5181 See src/HOL/Complex/Complex.thy for an Isar example and
  5182 src/HOL/Library/Eval.thy for an ML example.
  5183 
  5184 * Indexing of literal facts: be more serious about including only
  5185 facts from the visible specification/proof context, but not the
  5186 background context (locale etc.).  Affects `prop` notation and method
  5187 "fact".  INCOMPATIBILITY: need to name facts explicitly in rare
  5188 situations.
  5189 
  5190 * Method "cases", "induct", "coinduct": removed obsolete/undocumented
  5191 "(open)" option, which used to expose internal bound variables to the
  5192 proof text.
  5193 
  5194 * Isar statements: removed obsolete case "rule_context".
  5195 INCOMPATIBILITY, better use explicit fixes/assumes.
  5196 
  5197 * Locale proofs: default proof step now includes 'unfold_locales';
  5198 hence 'proof' without argument may be used to unfold locale
  5199 predicates.
  5200 
  5201 
  5202 *** Document preparation ***
  5203 
  5204 * Simplified pdfsetup.sty: color/hyperref is used unconditionally for
  5205 both pdf and dvi (hyperlinks usually work in xdvi as well); removed
  5206 obsolete thumbpdf setup (contemporary PDF viewers do this on the
  5207 spot); renamed link color from "darkblue" to "linkcolor" (default
  5208 value unchanged, can be redefined via \definecolor); no longer sets
  5209 "a4paper" option (unnecessary or even intrusive).
  5210 
  5211 * Antiquotation @{lemma A method} proves proposition A by the given
  5212 method (either a method name or a method name plus (optional) method
  5213 arguments in parentheses) and prints A just like @{prop A}.
  5214 
  5215 
  5216 *** HOL ***
  5217 
  5218 * New primrec package.  Specification syntax conforms in style to
  5219 definition/function/....  No separate induction rule is provided.  The
  5220 "primrec" command distinguishes old-style and new-style specifications
  5221 by syntax.  The former primrec package is now named OldPrimrecPackage.
  5222 When adjusting theories, beware: constants stemming from new-style
  5223 primrec specifications have authentic syntax.
  5224 
  5225 * Metis prover is now an order of magnitude faster, and also works
  5226 with multithreading.
  5227 
  5228 * Metis: the maximum number of clauses that can be produced from a
  5229 theorem is now given by the attribute max_clauses.  Theorems that
  5230 exceed this number are ignored, with a warning printed.
  5231 
  5232 * Sledgehammer no longer produces structured proofs by default. To
  5233 enable, declare [[sledgehammer_full = true]].  Attributes
  5234 reconstruction_modulus, reconstruction_sorts renamed
  5235 sledgehammer_modulus, sledgehammer_sorts.  INCOMPATIBILITY.
  5236 
  5237 * Method "induct_scheme" derives user-specified induction rules
  5238 from well-founded induction and completeness of patterns. This factors
  5239 out some operations that are done internally by the function package
  5240 and makes them available separately.  See
  5241 src/HOL/ex/Induction_Scheme.thy for examples.
  5242 
  5243 * More flexible generation of measure functions for termination
  5244 proofs: Measure functions can be declared by proving a rule of the
  5245 form "is_measure f" and giving it the [measure_function] attribute.
  5246 The "is_measure" predicate is logically meaningless (always true), and
  5247 just guides the heuristic.  To find suitable measure functions, the
  5248 termination prover sets up the goal "is_measure ?f" of the appropriate
  5249 type and generates all solutions by prolog-style backwards proof using
  5250 the declared rules.
  5251 
  5252 This setup also deals with rules like 
  5253 
  5254   "is_measure f ==> is_measure (list_size f)"
  5255 
  5256 which accommodates nested datatypes that recurse through lists.
  5257 Similar rules are predeclared for products and option types.
  5258 
  5259 * Turned the type of sets "'a set" into an abbreviation for "'a => bool"
  5260 
  5261   INCOMPATIBILITIES:
  5262 
  5263   - Definitions of overloaded constants on sets have to be replaced by
  5264     definitions on => and bool.
  5265 
  5266   - Some definitions of overloaded operators on sets can now be proved
  5267     using the definitions of the operators on => and bool.  Therefore,
  5268     the following theorems have been renamed:
  5269 
  5270       subset_def   -> subset_eq
  5271       psubset_def  -> psubset_eq
  5272       set_diff_def -> set_diff_eq
  5273       Compl_def    -> Compl_eq
  5274       Sup_set_def  -> Sup_set_eq
  5275       Inf_set_def  -> Inf_set_eq
  5276       sup_set_def  -> sup_set_eq
  5277       inf_set_def  -> inf_set_eq
  5278 
  5279   - Due to the incompleteness of the HO unification algorithm, some
  5280     rules such as subst may require manual instantiation, if some of
  5281     the unknowns in the rule is a set.
  5282 
  5283   - Higher order unification and forward proofs:
  5284     The proof pattern
  5285 
  5286       have "P (S::'a set)" <...>
  5287       then have "EX S. P S" ..
  5288 
  5289     no longer works (due to the incompleteness of the HO unification
  5290     algorithm) and must be replaced by the pattern
  5291 
  5292       have "EX S. P S"
  5293       proof
  5294         show "P S" <...>
  5295       qed
  5296 
  5297   - Calculational reasoning with subst (or similar rules):
  5298     The proof pattern
  5299 
  5300       have "P (S::'a set)" <...>
  5301       also have "S = T" <...>
  5302       finally have "P T" .
  5303 
  5304     no longer works (for similar reasons as the previous example) and
  5305     must be replaced by something like
  5306 
  5307       have "P (S::'a set)" <...>
  5308       moreover have "S = T" <...>
  5309       ultimately have "P T" by simp
  5310 
  5311   - Tactics or packages written in ML code:
  5312     Code performing pattern matching on types via
  5313 
  5314       Type ("set", [T]) => ...
  5315 
  5316     must be rewritten. Moreover, functions like strip_type or
  5317     binder_types no longer return the right value when applied to a
  5318     type of the form
  5319 
  5320       T1 => ... => Tn => U => bool
  5321 
  5322     rather than
  5323 
  5324       T1 => ... => Tn => U set
  5325 
  5326 * Merged theories Wellfounded_Recursion, Accessible_Part and
  5327 Wellfounded_Relations to theory Wellfounded.
  5328 
  5329 * Explicit class "eq" for executable equality.  INCOMPATIBILITY.
  5330 
  5331 * Class finite no longer treats UNIV as class parameter.  Use class
  5332 enum from theory Library/Enum instead to achieve a similar effect.
  5333 INCOMPATIBILITY.
  5334 
  5335 * Theory List: rule list_induct2 now has explicitly named cases "Nil"
  5336 and "Cons".  INCOMPATIBILITY.
  5337 
  5338 * HOL (and FOL): renamed variables in rules imp_elim and swap.
  5339 Potential INCOMPATIBILITY.
  5340 
  5341 * Theory Product_Type: duplicated lemmas split_Pair_apply and
  5342 injective_fst_snd removed, use split_eta and prod_eqI instead.
  5343 Renamed upd_fst to apfst and upd_snd to apsnd.  INCOMPATIBILITY.
  5344 
  5345 * Theory Nat: removed redundant lemmas that merely duplicate lemmas of
  5346 the same name in theory Orderings:
  5347 
  5348   less_trans
  5349   less_linear
  5350   le_imp_less_or_eq
  5351   le_less_trans
  5352   less_le_trans
  5353   less_not_sym
  5354   less_asym
  5355 
  5356 Renamed less_imp_le to less_imp_le_nat, and less_irrefl to
  5357 less_irrefl_nat.  Potential INCOMPATIBILITY due to more general types
  5358 and different variable names.
  5359 
  5360 * Library/Option_ord.thy: Canonical order on option type.
  5361 
  5362 * Library/RBT.thy: Red-black trees, an efficient implementation of
  5363 finite maps.
  5364 
  5365 * Library/Countable.thy: Type class for countable types.
  5366 
  5367 * Theory Int: The representation of numerals has changed.  The infix
  5368 operator BIT and the bit datatype with constructors B0 and B1 have
  5369 disappeared.  INCOMPATIBILITY, use "Int.Bit0 x" and "Int.Bit1 y" in
  5370 place of "x BIT bit.B0" and "y BIT bit.B1", respectively.  Theorems
  5371 involving BIT, B0, or B1 have been renamed with "Bit0" or "Bit1"
  5372 accordingly.
  5373 
  5374 * Theory Nat: definition of <= and < on natural numbers no longer
  5375 depend on well-founded relations.  INCOMPATIBILITY.  Definitions
  5376 le_def and less_def have disappeared.  Consider lemmas not_less
  5377 [symmetric, where ?'a = nat] and less_eq [symmetric] instead.
  5378 
  5379 * Theory Finite_Set: locales ACf, ACe, ACIf, ACIfSL and ACIfSLlin
  5380 (whose purpose mainly is for various fold_set functionals) have been
  5381 abandoned in favor of the existing algebraic classes
  5382 ab_semigroup_mult, comm_monoid_mult, ab_semigroup_idem_mult,
  5383 lower_semilattice (resp. upper_semilattice) and linorder.
  5384 INCOMPATIBILITY.
  5385 
  5386 * Theory Transitive_Closure: induct and cases rules now declare proper
  5387 case_names ("base" and "step").  INCOMPATIBILITY.
  5388 
  5389 * Theorem Inductive.lfp_ordinal_induct generalized to complete
  5390 lattices.  The form set-specific version is available as
  5391 Inductive.lfp_ordinal_induct_set.
  5392 
  5393 * Renamed theorems "power.simps" to "power_int.simps".
  5394 INCOMPATIBILITY.
  5395 
  5396 * Class semiring_div provides basic abstract properties of semirings
  5397 with division and modulo operations.  Subsumes former class dvd_mod.
  5398 
  5399 * Merged theories IntDef, Numeral and IntArith into unified theory
  5400 Int.  INCOMPATIBILITY.
  5401 
  5402 * Theory Library/Code_Index: type "index" now represents natural
  5403 numbers rather than integers.  INCOMPATIBILITY.
  5404 
  5405 * New class "uminus" with operation "uminus" (split of from class
  5406 "minus" which now only has operation "minus", binary).
  5407 INCOMPATIBILITY.
  5408 
  5409 * Constants "card", "internal_split", "option_map" now with authentic
  5410 syntax.  INCOMPATIBILITY.
  5411 
  5412 * Definitions subset_def, psubset_def, set_diff_def, Compl_def,
  5413 le_bool_def, less_bool_def, le_fun_def, less_fun_def, inf_bool_def,
  5414 sup_bool_def, Inf_bool_def, Sup_bool_def, inf_fun_def, sup_fun_def,
  5415 Inf_fun_def, Sup_fun_def, inf_set_def, sup_set_def, Inf_set_def,
  5416 Sup_set_def, le_def, less_def, option_map_def now with object
  5417 equality.  INCOMPATIBILITY.
  5418 
  5419 * Records. Removed K_record, and replaced it by pure lambda term
  5420 %x. c. The simplifier setup is now more robust against eta expansion.
  5421 INCOMPATIBILITY: in cases explicitly referring to K_record.
  5422 
  5423 * Library/Multiset: {#a, b, c#} abbreviates {#a#} + {#b#} + {#c#}.
  5424 
  5425 * Library/ListVector: new theory of arithmetic vector operations.
  5426 
  5427 * Library/Order_Relation: new theory of various orderings as sets of
  5428 pairs.  Defines preorders, partial orders, linear orders and
  5429 well-orders on sets and on types.
  5430 
  5431 
  5432 *** ZF ***
  5433 
  5434 * Renamed some theories to allow to loading both ZF and HOL in the
  5435 same session:
  5436 
  5437   Datatype  -> Datatype_ZF
  5438   Inductive -> Inductive_ZF
  5439   Int       -> Int_ZF
  5440   IntDiv    -> IntDiv_ZF
  5441   Nat       -> Nat_ZF
  5442   List      -> List_ZF
  5443   Main      -> Main_ZF
  5444 
  5445 INCOMPATIBILITY: ZF theories that import individual theories below
  5446 Main might need to be adapted.  Regular theory Main is still
  5447 available, as trivial extension of Main_ZF.
  5448 
  5449 
  5450 *** ML ***
  5451 
  5452 * ML within Isar: antiquotation @{const name} or @{const
  5453 name(typargs)} produces statically-checked Const term.
  5454 
  5455 * Functor NamedThmsFun: data is available to the user as dynamic fact
  5456 (of the same name).  Removed obsolete print command.
  5457 
  5458 * Removed obsolete "use_legacy_bindings" function.
  5459 
  5460 * The ``print mode'' is now a thread-local value derived from a global
  5461 template (the former print_mode reference), thus access becomes
  5462 non-critical.  The global print_mode reference is for session
  5463 management only; user-code should use print_mode_value,
  5464 print_mode_active, PrintMode.setmp etc.  INCOMPATIBILITY.
  5465 
  5466 * Functions system/system_out provide a robust way to invoke external
  5467 shell commands, with propagation of interrupts (requires Poly/ML
  5468 5.2.1).  Do not use OS.Process.system etc. from the basis library!
  5469 
  5470 
  5471 *** System ***
  5472 
  5473 * Default settings: PROOFGENERAL_OPTIONS no longer impose xemacs ---
  5474 in accordance with Proof General 3.7, which prefers GNU emacs.
  5475 
  5476 * isatool tty runs Isabelle process with plain tty interaction;
  5477 optional line editor may be specified via ISABELLE_LINE_EDITOR
  5478 setting, the default settings attempt to locate "ledit" and "rlwrap".
  5479 
  5480 * isatool browser now works with Cygwin as well, using general
  5481 "javapath" function defined in Isabelle process environment.
  5482 
  5483 * YXML notation provides a simple and efficient alternative to
  5484 standard XML transfer syntax.  See src/Pure/General/yxml.ML and
  5485 isatool yxml as described in the Isabelle system manual.
  5486 
  5487 * JVM class isabelle.IsabelleProcess (located in Isabelle/lib/classes)
  5488 provides general wrapper for managing an Isabelle process in a robust
  5489 fashion, with ``cooked'' output from stdin/stderr.
  5490 
  5491 * Rudimentary Isabelle plugin for jEdit (see Isabelle/lib/jedit),
  5492 based on Isabelle/JVM process wrapper (see Isabelle/lib/classes).
  5493 
  5494 * Removed obsolete THIS_IS_ISABELLE_BUILD feature.  NB: the documented
  5495 way of changing the user's settings is via
  5496 ISABELLE_HOME_USER/etc/settings, which is a fully featured bash
  5497 script.
  5498 
  5499 * Multithreading.max_threads := 0 refers to the number of actual CPU
  5500 cores of the underlying machine, which is a good starting point for
  5501 optimal performance tuning.  The corresponding usedir option -M allows
  5502 "max" as an alias for "0".  WARNING: does not work on certain versions
  5503 of Mac OS (with Poly/ML 5.1).
  5504 
  5505 * isabelle-process: non-ML sessions are run with "nice", to reduce the
  5506 adverse effect of Isabelle flooding interactive front-ends (notably
  5507 ProofGeneral / XEmacs).
  5508 
  5509 
  5510 
  5511 New in Isabelle2007 (November 2007)
  5512 -----------------------------------
  5513 
  5514 *** General ***
  5515 
  5516 * More uniform information about legacy features, notably a
  5517 warning/error of "Legacy feature: ...", depending on the state of the
  5518 tolerate_legacy_features flag (default true). FUTURE INCOMPATIBILITY:
  5519 legacy features will disappear eventually.
  5520 
  5521 * Theory syntax: the header format ``theory A = B + C:'' has been
  5522 discontinued in favour of ``theory A imports B C begin''.  Use isatool
  5523 fixheaders to convert existing theory files.  INCOMPATIBILITY.
  5524 
  5525 * Theory syntax: the old non-Isar theory file format has been
  5526 discontinued altogether.  Note that ML proof scripts may still be used
  5527 with Isar theories; migration is usually quite simple with the ML
  5528 function use_legacy_bindings.  INCOMPATIBILITY.
  5529 
  5530 * Theory syntax: some popular names (e.g. 'class', 'declaration',
  5531 'fun', 'help', 'if') are now keywords.  INCOMPATIBILITY, use double
  5532 quotes.
  5533 
  5534 * Theory loader: be more serious about observing the static theory
  5535 header specifications (including optional directories), but not the
  5536 accidental file locations of previously successful loads.  The strict
  5537 update policy of former update_thy is now already performed by
  5538 use_thy, so the former has been removed; use_thys updates several
  5539 theories simultaneously, just as 'imports' within a theory header
  5540 specification, but without merging the results.  Potential
  5541 INCOMPATIBILITY: may need to refine theory headers and commands
  5542 ROOT.ML which depend on load order.
  5543 
  5544 * Theory loader: optional support for content-based file
  5545 identification, instead of the traditional scheme of full physical
  5546 path plus date stamp; configured by the ISABELLE_FILE_IDENT setting
  5547 (cf. the system manual).  The new scheme allows to work with
  5548 non-finished theories in persistent session images, such that source
  5549 files may be moved later on without requiring reloads.
  5550 
  5551 * Theory loader: old-style ML proof scripts being *attached* to a thy
  5552 file (with the same base name as the theory) are considered a legacy
  5553 feature, which will disappear eventually. Even now, the theory loader
  5554 no longer maintains dependencies on such files.
  5555 
  5556 * Syntax: the scope for resolving ambiguities via type-inference is
  5557 now limited to individual terms, instead of whole simultaneous
  5558 specifications as before. This greatly reduces the complexity of the
  5559 syntax module and improves flexibility by separating parsing and
  5560 type-checking. INCOMPATIBILITY: additional type-constraints (explicit
  5561 'fixes' etc.) are required in rare situations.
  5562 
  5563 * Syntax: constants introduced by new-style packages ('definition',
  5564 'abbreviation' etc.) are passed through the syntax module in
  5565 ``authentic mode''. This means that associated mixfix annotations
  5566 really stick to such constants, independently of potential name space
  5567 ambiguities introduced later on. INCOMPATIBILITY: constants in parse
  5568 trees are represented slightly differently, may need to adapt syntax
  5569 translations accordingly. Use CONST marker in 'translations' and
  5570 @{const_syntax} antiquotation in 'parse_translation' etc.
  5571 
  5572 * Legacy goal package: reduced interface to the bare minimum required
  5573 to keep existing proof scripts running.  Most other user-level
  5574 functions are now part of the OldGoals structure, which is *not* open
  5575 by default (consider isatool expandshort before open OldGoals).
  5576 Removed top_sg, prin, printyp, pprint_term/typ altogether, because
  5577 these tend to cause confusion about the actual goal (!) context being
  5578 used here, which is not necessarily the same as the_context().
  5579 
  5580 * Command 'find_theorems': supports "*" wild-card in "name:"
  5581 criterion; "with_dups" option.  Certain ProofGeneral versions might
  5582 support a specific search form (see ProofGeneral/CHANGES).
  5583 
  5584 * The ``prems limit'' option (cf. ProofContext.prems_limit) is now -1
  5585 by default, which means that "prems" (and also "fixed variables") are
  5586 suppressed from proof state output.  Note that the ProofGeneral
  5587 settings mechanism allows to change and save options persistently, but
  5588 older versions of Isabelle will fail to start up if a negative prems
  5589 limit is imposed.
  5590 
  5591 * Local theory targets may be specified by non-nested blocks of
  5592 ``context/locale/class ... begin'' followed by ``end''.  The body may
  5593 contain definitions, theorems etc., including any derived mechanism
  5594 that has been implemented on top of these primitives.  This concept
  5595 generalizes the existing ``theorem (in ...)'' towards more versatility
  5596 and scalability.
  5597 
  5598 * Proof General interface: proper undo of final 'end' command;
  5599 discontinued Isabelle/classic mode (ML proof scripts).
  5600 
  5601 
  5602 *** Document preparation ***
  5603 
  5604 * Added antiquotation @{theory name} which prints the given name,
  5605 after checking that it refers to a valid ancestor theory in the
  5606 current context.
  5607 
  5608 * Added antiquotations @{ML_type text} and @{ML_struct text} which
  5609 check the given source text as ML type/structure, printing verbatim.
  5610 
  5611 * Added antiquotation @{abbrev "c args"} which prints the abbreviation
  5612 "c args == rhs" given in the current context.  (Any number of
  5613 arguments may be given on the LHS.)
  5614 
  5615 
  5616 *** Pure ***
  5617 
  5618 * The 'class' package offers a combination of axclass and locale to
  5619 achieve Haskell-like type classes in Isabelle.  Definitions and
  5620 theorems within a class context produce both relative results (with
  5621 implicit parameters according to the locale context), and polymorphic
  5622 constants with qualified polymorphism (according to the class
  5623 context).  Within the body context of a 'class' target, a separate
  5624 syntax layer ("user space type system") takes care of converting
  5625 between global polymorphic consts and internal locale representation.
  5626 See src/HOL/ex/Classpackage.thy for examples (as well as main HOL).
  5627 "isatool doc classes" provides a tutorial.
  5628 
  5629 * Generic code generator framework allows to generate executable
  5630 code for ML and Haskell (including Isabelle classes).  A short usage
  5631 sketch:
  5632 
  5633     internal compilation:
  5634         export_code <list of constants (term syntax)> in SML
  5635     writing SML code to a file:
  5636         export_code <list of constants (term syntax)> in SML <filename>
  5637     writing OCaml code to a file:
  5638         export_code <list of constants (term syntax)> in OCaml <filename>
  5639     writing Haskell code to a bunch of files:
  5640         export_code <list of constants (term syntax)> in Haskell <filename>
  5641 
  5642     evaluating closed propositions to True/False using code generation:
  5643         method ``eval''
  5644 
  5645 Reasonable default setup of framework in HOL.
  5646 
  5647 Theorem attributs for selecting and transforming function equations theorems:
  5648 
  5649     [code fun]:        select a theorem as function equation for a specific constant
  5650     [code fun del]:    deselect a theorem as function equation for a specific constant
  5651     [code inline]:     select an equation theorem for unfolding (inlining) in place
  5652     [code inline del]: deselect an equation theorem for unfolding (inlining) in place
  5653 
  5654 User-defined serializations (target in {SML, OCaml, Haskell}):
  5655 
  5656     code_const <and-list of constants (term syntax)>
  5657       {(target) <and-list of const target syntax>}+
  5658 
  5659     code_type <and-list of type constructors>
  5660       {(target) <and-list of type target syntax>}+
  5661 
  5662     code_instance <and-list of instances>
  5663       {(target)}+
  5664         where instance ::= <type constructor> :: <class>
  5665 
  5666     code_class <and_list of classes>
  5667       {(target) <and-list of class target syntax>}+
  5668         where class target syntax ::= <class name> {where {<classop> == <target syntax>}+}?
  5669 
  5670 code_instance and code_class only are effective to target Haskell.
  5671 
  5672 For example usage see src/HOL/ex/Codegenerator.thy and
  5673 src/HOL/ex/Codegenerator_Pretty.thy.  A separate tutorial on code
  5674 generation from Isabelle/HOL theories is available via "isatool doc
  5675 codegen".
  5676 
  5677 * Code generator: consts in 'consts_code' Isar commands are now
  5678 referred to by usual term syntax (including optional type
  5679 annotations).
  5680 
  5681 * Command 'no_translations' removes translation rules from theory
  5682 syntax.
  5683 
  5684 * Overloaded definitions are now actually checked for acyclic
  5685 dependencies.  The overloading scheme is slightly more general than
  5686 that of Haskell98, although Isabelle does not demand an exact
  5687 correspondence to type class and instance declarations.
  5688 INCOMPATIBILITY, use ``defs (unchecked overloaded)'' to admit more
  5689 exotic versions of overloading -- at the discretion of the user!
  5690 
  5691 Polymorphic constants are represented via type arguments, i.e. the
  5692 instantiation that matches an instance against the most general
  5693 declaration given in the signature.  For example, with the declaration
  5694 c :: 'a => 'a => 'a, an instance c :: nat => nat => nat is represented
  5695 as c(nat).  Overloading is essentially simultaneous structural
  5696 recursion over such type arguments.  Incomplete specification patterns
  5697 impose global constraints on all occurrences, e.g. c('a * 'a) on the
  5698 LHS means that more general c('a * 'b) will be disallowed on any RHS.
  5699 Command 'print_theory' outputs the normalized system of recursive
  5700 equations, see section "definitions".
  5701 
  5702 * Configuration options are maintained within the theory or proof
  5703 context (with name and type bool/int/string), providing a very simple
  5704 interface to a poor-man's version of general context data.  Tools may
  5705 declare options in ML (e.g. using Attrib.config_int) and then refer to
  5706 these values using Config.get etc.  Users may change options via an
  5707 associated attribute of the same name.  This form of context
  5708 declaration works particularly well with commands 'declare' or
  5709 'using', for example ``declare [[foo = 42]]''.  Thus it has become
  5710 very easy to avoid global references, which would not observe Isar
  5711 toplevel undo/redo and fail to work with multithreading.
  5712 
  5713 Various global ML references of Pure and HOL have been turned into
  5714 configuration options:
  5715 
  5716   Unify.search_bound		unify_search_bound
  5717   Unify.trace_bound		unify_trace_bound
  5718   Unify.trace_simp		unify_trace_simp
  5719   Unify.trace_types		unify_trace_types
  5720   Simplifier.simp_depth_limit	simp_depth_limit
  5721   Blast.depth_limit		blast_depth_limit
  5722   DatatypeProp.dtK		datatype_distinctness_limit
  5723   fast_arith_neq_limit  	fast_arith_neq_limit
  5724   fast_arith_split_limit	fast_arith_split_limit
  5725 
  5726 * Named collections of theorems may be easily installed as context
  5727 data using the functor NamedThmsFun (see also
  5728 src/Pure/Tools/named_thms.ML).  The user may add or delete facts via
  5729 attributes; there is also a toplevel print command.  This facility is
  5730 just a common case of general context data, which is the preferred way
  5731 for anything more complex than just a list of facts in canonical
  5732 order.
  5733 
  5734 * Isar: command 'declaration' augments a local theory by generic
  5735 declaration functions written in ML.  This enables arbitrary content
  5736 being added to the context, depending on a morphism that tells the
  5737 difference of the original declaration context wrt. the application
  5738 context encountered later on.
  5739 
  5740 * Isar: proper interfaces for simplification procedures.  Command
  5741 'simproc_setup' declares named simprocs (with match patterns, and body
  5742 text in ML).  Attribute "simproc" adds/deletes simprocs in the current
  5743 context.  ML antiquotation @{simproc name} retrieves named simprocs.
  5744 
  5745 * Isar: an extra pair of brackets around attribute declarations
  5746 abbreviates a theorem reference involving an internal dummy fact,
  5747 which will be ignored later --- only the effect of the attribute on
  5748 the background context will persist.  This form of in-place
  5749 declarations is particularly useful with commands like 'declare' and
  5750 'using', for example ``have A using [[simproc a]] by simp''.
  5751 
  5752 * Isar: method "assumption" (and implicit closing of subproofs) now
  5753 takes simple non-atomic goal assumptions into account: after applying
  5754 an assumption as a rule the resulting subgoals are solved by atomic
  5755 assumption steps.  This is particularly useful to finish 'obtain'
  5756 goals, such as "!!x. (!!x. P x ==> thesis) ==> P x ==> thesis",
  5757 without referring to the original premise "!!x. P x ==> thesis" in the
  5758 Isar proof context.  POTENTIAL INCOMPATIBILITY: method "assumption" is
  5759 more permissive.
  5760 
  5761 * Isar: implicit use of prems from the Isar proof context is
  5762 considered a legacy feature.  Common applications like ``have A .''
  5763 may be replaced by ``have A by fact'' or ``note `A`''.  In general,
  5764 referencing facts explicitly here improves readability and
  5765 maintainability of proof texts.
  5766 
  5767 * Isar: improper proof element 'guess' is like 'obtain', but derives
  5768 the obtained context from the course of reasoning!  For example:
  5769 
  5770   assume "EX x y. A x & B y"   -- "any previous fact"
  5771   then guess x and y by clarify
  5772 
  5773 This technique is potentially adventurous, depending on the facts and
  5774 proof tools being involved here.
  5775 
  5776 * Isar: known facts from the proof context may be specified as literal
  5777 propositions, using ASCII back-quote syntax.  This works wherever
  5778 named facts used to be allowed so far, in proof commands, proof
  5779 methods, attributes etc.  Literal facts are retrieved from the context
  5780 according to unification of type and term parameters.  For example,
  5781 provided that "A" and "A ==> B" and "!!x. P x ==> Q x" are known
  5782 theorems in the current context, then these are valid literal facts:
  5783 `A` and `A ==> B` and `!!x. P x ==> Q x" as well as `P a ==> Q a` etc.
  5784 
  5785 There is also a proof method "fact" which does the same composition
  5786 for explicit goal states, e.g. the following proof texts coincide with
  5787 certain special cases of literal facts:
  5788 
  5789   have "A" by fact                 ==  note `A`
  5790   have "A ==> B" by fact           ==  note `A ==> B`
  5791   have "!!x. P x ==> Q x" by fact  ==  note `!!x. P x ==> Q x`
  5792   have "P a ==> Q a" by fact       ==  note `P a ==> Q a`
  5793 
  5794 * Isar: ":" (colon) is no longer a symbolic identifier character in
  5795 outer syntax.  Thus symbolic identifiers may be used without
  5796 additional white space in declarations like this: ``assume *: A''.
  5797 
  5798 * Isar: 'print_facts' prints all local facts of the current context,
  5799 both named and unnamed ones.
  5800 
  5801 * Isar: 'def' now admits simultaneous definitions, e.g.:
  5802 
  5803   def x == "t" and y == "u"
  5804 
  5805 * Isar: added command 'unfolding', which is structurally similar to
  5806 'using', but affects both the goal state and facts by unfolding given
  5807 rewrite rules.  Thus many occurrences of the 'unfold' method or
  5808 'unfolded' attribute may be replaced by first-class proof text.
  5809 
  5810 * Isar: methods 'unfold' / 'fold', attributes 'unfolded' / 'folded',
  5811 and command 'unfolding' now all support object-level equalities
  5812 (potentially conditional).  The underlying notion of rewrite rule is
  5813 analogous to the 'rule_format' attribute, but *not* that of the
  5814 Simplifier (which is usually more generous).
  5815 
  5816 * Isar: the new attribute [rotated n] (default n = 1) rotates the
  5817 premises of a theorem by n. Useful in conjunction with drule.
  5818 
  5819 * Isar: the goal restriction operator [N] (default N = 1) evaluates a
  5820 method expression within a sandbox consisting of the first N
  5821 sub-goals, which need to exist.  For example, ``simp_all [3]''
  5822 simplifies the first three sub-goals, while (rule foo, simp_all)[]
  5823 simplifies all new goals that emerge from applying rule foo to the
  5824 originally first one.
  5825 
  5826 * Isar: schematic goals are no longer restricted to higher-order
  5827 patterns; e.g. ``lemma "?P(?x)" by (rule TrueI)'' now works as
  5828 expected.
  5829 
  5830 * Isar: the conclusion of a long theorem statement is now either
  5831 'shows' (a simultaneous conjunction, as before), or 'obtains'
  5832 (essentially a disjunction of cases with local parameters and
  5833 assumptions).  The latter allows to express general elimination rules
  5834 adequately; in this notation common elimination rules look like this:
  5835 
  5836   lemma exE:    -- "EX x. P x ==> (!!x. P x ==> thesis) ==> thesis"
  5837     assumes "EX x. P x"
  5838     obtains x where "P x"
  5839 
  5840   lemma conjE:  -- "A & B ==> (A ==> B ==> thesis) ==> thesis"
  5841     assumes "A & B"
  5842     obtains A and B
  5843 
  5844   lemma disjE:  -- "A | B ==> (A ==> thesis) ==> (B ==> thesis) ==> thesis"
  5845     assumes "A | B"
  5846     obtains
  5847       A
  5848     | B
  5849 
  5850 The subsequent classical rules even refer to the formal "thesis"
  5851 explicitly:
  5852 
  5853   lemma classical:     -- "(~ thesis ==> thesis) ==> thesis"
  5854     obtains "~ thesis"
  5855 
  5856   lemma Peirce's_Law:  -- "((thesis ==> something) ==> thesis) ==> thesis"
  5857     obtains "thesis ==> something"
  5858 
  5859 The actual proof of an 'obtains' statement is analogous to that of the
  5860 Isar proof element 'obtain', only that there may be several cases.
  5861 Optional case names may be specified in parentheses; these will be
  5862 available both in the present proof and as annotations in the
  5863 resulting rule, for later use with the 'cases' method (cf. attribute
  5864 case_names).
  5865 
  5866 * Isar: the assumptions of a long theorem statement are available as
  5867 "assms" fact in the proof context.  This is more appropriate than the
  5868 (historical) "prems", which refers to all assumptions of the current
  5869 context, including those from the target locale, proof body etc.
  5870 
  5871 * Isar: 'print_statement' prints theorems from the current theory or
  5872 proof context in long statement form, according to the syntax of a
  5873 top-level lemma.
  5874 
  5875 * Isar: 'obtain' takes an optional case name for the local context
  5876 introduction rule (default "that").
  5877 
  5878 * Isar: removed obsolete 'concl is' patterns.  INCOMPATIBILITY, use
  5879 explicit (is "_ ==> ?foo") in the rare cases where this still happens
  5880 to occur.
  5881 
  5882 * Pure: syntax "CONST name" produces a fully internalized constant
  5883 according to the current context.  This is particularly useful for
  5884 syntax translations that should refer to internal constant
  5885 representations independently of name spaces.
  5886 
  5887 * Pure: syntax constant for foo (binder "FOO ") is called "foo_binder"
  5888 instead of "FOO ". This allows multiple binder declarations to coexist
  5889 in the same context.  INCOMPATIBILITY.
  5890 
  5891 * Isar/locales: 'notation' provides a robust interface to the 'syntax'
  5892 primitive that also works in a locale context (both for constants and
  5893 fixed variables). Type declaration and internal syntactic representation
  5894 of given constants retrieved from the context. Likewise, the
  5895 'no_notation' command allows to remove given syntax annotations from the
  5896 current context.
  5897 
  5898 * Isar/locales: new derived specification elements 'axiomatization',
  5899 'definition', 'abbreviation', which support type-inference, admit
  5900 object-level specifications (equality, equivalence).  See also the
  5901 isar-ref manual.  Examples:
  5902 
  5903   axiomatization
  5904     eq  (infix "===" 50) where
  5905     eq_refl: "x === x" and eq_subst: "x === y ==> P x ==> P y"
  5906 
  5907   definition "f x y = x + y + 1"
  5908   definition g where "g x = f x x"
  5909 
  5910   abbreviation
  5911     neq  (infix "=!=" 50) where
  5912     "x =!= y == ~ (x === y)"
  5913 
  5914 These specifications may be also used in a locale context.  Then the
  5915 constants being introduced depend on certain fixed parameters, and the
  5916 constant name is qualified by the locale base name.  An internal
  5917 abbreviation takes care for convenient input and output, making the
  5918 parameters implicit and using the original short name.  See also
  5919 src/HOL/ex/Abstract_NAT.thy for an example of deriving polymorphic
  5920 entities from a monomorphic theory.
  5921 
  5922 Presently, abbreviations are only available 'in' a target locale, but
  5923 not inherited by general import expressions.  Also note that
  5924 'abbreviation' may be used as a type-safe replacement for 'syntax' +
  5925 'translations' in common applications.  The "no_abbrevs" print mode
  5926 prevents folding of abbreviations in term output.
  5927 
  5928 Concrete syntax is attached to specified constants in internal form,
  5929 independently of name spaces.  The parse tree representation is
  5930 slightly different -- use 'notation' instead of raw 'syntax', and
  5931 'translations' with explicit "CONST" markup to accommodate this.
  5932 
  5933 * Pure/Isar: unified syntax for new-style specification mechanisms
  5934 (e.g.  'definition', 'abbreviation', or 'inductive' in HOL) admits
  5935 full type inference and dummy patterns ("_").  For example:
  5936 
  5937   definition "K x _ = x"
  5938 
  5939   inductive conj for A B
  5940   where "A ==> B ==> conj A B"
  5941 
  5942 * Pure: command 'print_abbrevs' prints all constant abbreviations of
  5943 the current context.  Print mode "no_abbrevs" prevents inversion of
  5944 abbreviations on output.
  5945 
  5946 * Isar/locales: improved parameter handling: use of locales "var" and
  5947 "struct" no longer necessary; - parameter renamings are no longer
  5948 required to be injective.  For example, this allows to define
  5949 endomorphisms as locale endom = homom mult mult h.
  5950 
  5951 * Isar/locales: changed the way locales with predicates are defined.
  5952 Instead of accumulating the specification, the imported expression is
  5953 now an interpretation.  INCOMPATIBILITY: different normal form of
  5954 locale expressions.  In particular, in interpretations of locales with
  5955 predicates, goals repesenting already interpreted fragments are not
  5956 removed automatically.  Use methods `intro_locales' and
  5957 `unfold_locales'; see below.
  5958 
  5959 * Isar/locales: new methods `intro_locales' and `unfold_locales'
  5960 provide backward reasoning on locales predicates.  The methods are
  5961 aware of interpretations and discharge corresponding goals.
  5962 `intro_locales' is less aggressive then `unfold_locales' and does not
  5963 unfold predicates to assumptions.
  5964 
  5965 * Isar/locales: the order in which locale fragments are accumulated
  5966 has changed.  This enables to override declarations from fragments due
  5967 to interpretations -- for example, unwanted simp rules.
  5968 
  5969 * Isar/locales: interpretation in theories and proof contexts has been
  5970 extended.  One may now specify (and prove) equations, which are
  5971 unfolded in interpreted theorems.  This is useful for replacing
  5972 defined concepts (constants depending on locale parameters) by
  5973 concepts already existing in the target context.  Example:
  5974 
  5975   interpretation partial_order ["op <= :: [int, int] => bool"]
  5976     where "partial_order.less (op <=) (x::int) y = (x < y)"
  5977 
  5978 Typically, the constant `partial_order.less' is created by a
  5979 definition specification element in the context of locale
  5980 partial_order.
  5981 
  5982 * Method "induct": improved internal context management to support
  5983 local fixes and defines on-the-fly. Thus explicit meta-level
  5984 connectives !!  and ==> are rarely required anymore in inductive goals
  5985 (using object-logic connectives for this purpose has been long
  5986 obsolete anyway). Common proof patterns are explained in
  5987 src/HOL/Induct/Common_Patterns.thy, see also
  5988 src/HOL/Isar_examples/Puzzle.thy and src/HOL/Lambda for realistic
  5989 examples.
  5990 
  5991 * Method "induct": improved handling of simultaneous goals. Instead of
  5992 introducing object-level conjunction, the statement is now split into
  5993 several conclusions, while the corresponding symbolic cases are nested
  5994 accordingly. INCOMPATIBILITY, proofs need to be structured explicitly,
  5995 see src/HOL/Induct/Common_Patterns.thy, for example.
  5996 
  5997 * Method "induct": mutual induction rules are now specified as a list
  5998 of rule sharing the same induction cases. HOL packages usually provide
  5999 foo_bar.inducts for mutually defined items foo and bar (e.g. inductive
  6000 predicates/sets or datatypes). INCOMPATIBILITY, users need to specify
  6001 mutual induction rules differently, i.e. like this:
  6002 
  6003   (induct rule: foo_bar.inducts)
  6004   (induct set: foo bar)
  6005   (induct pred: foo bar)
  6006   (induct type: foo bar)
  6007 
  6008 The ML function ProjectRule.projections turns old-style rules into the
  6009 new format.
  6010 
  6011 * Method "coinduct": dual of induction, see
  6012 src/HOL/Library/Coinductive_List.thy for various examples.
  6013 
  6014 * Method "cases", "induct", "coinduct": the ``(open)'' option is
  6015 considered a legacy feature.
  6016 
  6017 * Attribute "symmetric" produces result with standardized schematic
  6018 variables (index 0).  Potential INCOMPATIBILITY.
  6019 
  6020 * Simplifier: by default the simplifier trace only shows top level
  6021 rewrites now. That is, trace_simp_depth_limit is set to 1 by
  6022 default. Thus there is less danger of being flooded by the trace. The
  6023 trace indicates where parts have been suppressed.
  6024   
  6025 * Provers/classical: removed obsolete classical version of elim_format
  6026 attribute; classical elim/dest rules are now treated uniformly when
  6027 manipulating the claset.
  6028 
  6029 * Provers/classical: stricter checks to ensure that supplied intro,
  6030 dest and elim rules are well-formed; dest and elim rules must have at
  6031 least one premise.
  6032 
  6033 * Provers/classical: attributes dest/elim/intro take an optional
  6034 weight argument for the rule (just as the Pure versions).  Weights are
  6035 ignored by automated tools, but determine the search order of single
  6036 rule steps.
  6037 
  6038 * Syntax: input syntax now supports dummy variable binding "%_. b",
  6039 where the body does not mention the bound variable.  Note that dummy
  6040 patterns implicitly depend on their context of bounds, which makes
  6041 "{_. _}" match any set comprehension as expected.  Potential
  6042 INCOMPATIBILITY -- parse translations need to cope with syntactic
  6043 constant "_idtdummy" in the binding position.
  6044 
  6045 * Syntax: removed obsolete syntactic constant "_K" and its associated
  6046 parse translation.  INCOMPATIBILITY -- use dummy abstraction instead,
  6047 for example "A -> B" => "Pi A (%_. B)".
  6048 
  6049 * Pure: 'class_deps' command visualizes the subclass relation, using
  6050 the graph browser tool.
  6051 
  6052 * Pure: 'print_theory' now suppresses certain internal declarations by
  6053 default; use '!' option for full details.
  6054 
  6055 
  6056 *** HOL ***
  6057 
  6058 * Method "metis" proves goals by applying the Metis general-purpose
  6059 resolution prover (see also http://gilith.com/software/metis/).
  6060 Examples are in the directory MetisExamples.  WARNING: the
  6061 Isabelle/HOL-Metis integration does not yet work properly with
  6062 multi-threading.
  6063   
  6064 * Command 'sledgehammer' invokes external automatic theorem provers as
  6065 background processes.  It generates calls to the "metis" method if
  6066 successful. These can be pasted into the proof.  Users do not have to
  6067 wait for the automatic provers to return.  WARNING: does not really
  6068 work with multi-threading.
  6069 
  6070 * New "auto_quickcheck" feature tests outermost goal statements for
  6071 potential counter-examples.  Controlled by ML references
  6072 auto_quickcheck (default true) and auto_quickcheck_time_limit (default
  6073 5000 milliseconds).  Fails silently if statements is outside of
  6074 executable fragment, or any other codgenerator problem occurs.
  6075 
  6076 * New constant "undefined" with axiom "undefined x = undefined".
  6077 
  6078 * Added class "HOL.eq", allowing for code generation with polymorphic
  6079 equality.
  6080 
  6081 * Some renaming of class constants due to canonical name prefixing in
  6082 the new 'class' package:
  6083 
  6084     HOL.abs ~> HOL.abs_class.abs
  6085     HOL.divide ~> HOL.divide_class.divide
  6086     0 ~> HOL.zero_class.zero
  6087     1 ~> HOL.one_class.one
  6088     op + ~> HOL.plus_class.plus
  6089     op - ~> HOL.minus_class.minus
  6090     uminus ~> HOL.minus_class.uminus
  6091     op * ~> HOL.times_class.times
  6092     op < ~> HOL.ord_class.less
  6093     op <= > HOL.ord_class.less_eq
  6094     Nat.power ~> Power.power_class.power
  6095     Nat.size ~> Nat.size_class.size
  6096     Numeral.number_of ~> Numeral.number_class.number_of
  6097     FixedPoint.Inf ~> Lattices.complete_lattice_class.Inf
  6098     FixedPoint.Sup ~> Lattices.complete_lattice_class.Sup
  6099     Orderings.min ~> Orderings.ord_class.min
  6100     Orderings.max ~> Orderings.ord_class.max
  6101     Divides.op div ~> Divides.div_class.div
  6102     Divides.op mod ~> Divides.div_class.mod
  6103     Divides.op dvd ~> Divides.div_class.dvd
  6104 
  6105 INCOMPATIBILITY.  Adaptions may be required in the following cases:
  6106 
  6107 a) User-defined constants using any of the names "plus", "minus",
  6108 "times", "less" or "less_eq". The standard syntax translations for
  6109 "+", "-" and "*" may go wrong.  INCOMPATIBILITY: use more specific
  6110 names.
  6111 
  6112 b) Variables named "plus", "minus", "times", "less", "less_eq"
  6113 INCOMPATIBILITY: use more specific names.
  6114 
  6115 c) Permutative equations (e.g. "a + b = b + a")
  6116 Since the change of names also changes the order of terms, permutative
  6117 rewrite rules may get applied in a different order. Experience shows
  6118 that this is rarely the case (only two adaptions in the whole Isabelle
  6119 distribution).  INCOMPATIBILITY: rewrite proofs
  6120 
  6121 d) ML code directly refering to constant names
  6122 This in general only affects hand-written proof tactics, simprocs and
  6123 so on.  INCOMPATIBILITY: grep your sourcecode and replace names.
  6124 Consider using @{const_name} antiquotation.
  6125 
  6126 * New class "default" with associated constant "default".
  6127 
  6128 * Function "sgn" is now overloaded and available on int, real, complex
  6129 (and other numeric types), using class "sgn".  Two possible defs of
  6130 sgn are given as equational assumptions in the classes sgn_if and
  6131 sgn_div_norm; ordered_idom now also inherits from sgn_if.
  6132 INCOMPATIBILITY.
  6133 
  6134 * Locale "partial_order" now unified with class "order" (cf. theory
  6135 Orderings), added parameter "less".  INCOMPATIBILITY.
  6136 
  6137 * Renamings in classes "order" and "linorder": facts "refl", "trans" and
  6138 "cases" to "order_refl", "order_trans" and "linorder_cases", to avoid
  6139 clashes with HOL "refl" and "trans".  INCOMPATIBILITY.
  6140 
  6141 * Classes "order" and "linorder": potential INCOMPATIBILITY due to
  6142 changed order of proof goals in instance proofs.
  6143 
  6144 * The transitivity reasoner for partial and linear orders is set up
  6145 for classes "order" and "linorder".  Instances of the reasoner are available
  6146 in all contexts importing or interpreting the corresponding locales.
  6147 Method "order" invokes the reasoner separately; the reasoner
  6148 is also integrated with the Simplifier as a solver.  Diagnostic
  6149 command 'print_orders' shows the available instances of the reasoner
  6150 in the current context.
  6151 
  6152 * Localized monotonicity predicate in theory "Orderings"; integrated
  6153 lemmas max_of_mono and min_of_mono with this predicate.
  6154 INCOMPATIBILITY.
  6155 
  6156 * Formulation of theorem "dense" changed slightly due to integration
  6157 with new class dense_linear_order.
  6158 
  6159 * Uniform lattice theory development in HOL.
  6160 
  6161     constants "meet" and "join" now named "inf" and "sup"
  6162     constant "Meet" now named "Inf"
  6163 
  6164     classes "meet_semilorder" and "join_semilorder" now named
  6165       "lower_semilattice" and "upper_semilattice"
  6166     class "lorder" now named "lattice"
  6167     class "comp_lat" now named "complete_lattice"
  6168 
  6169     Instantiation of lattice classes allows explicit definitions
  6170     for "inf" and "sup" operations (or "Inf" and "Sup" for complete lattices).
  6171 
  6172   INCOMPATIBILITY.  Theorem renames:
  6173 
  6174     meet_left_le            ~> inf_le1
  6175     meet_right_le           ~> inf_le2
  6176     join_left_le            ~> sup_ge1
  6177     join_right_le           ~> sup_ge2
  6178     meet_join_le            ~> inf_sup_ord
  6179     le_meetI                ~> le_infI
  6180     join_leI                ~> le_supI
  6181     le_meet                 ~> le_inf_iff
  6182     le_join                 ~> ge_sup_conv
  6183     meet_idempotent         ~> inf_idem
  6184     join_idempotent         ~> sup_idem
  6185     meet_comm               ~> inf_commute
  6186     join_comm               ~> sup_commute
  6187     meet_leI1               ~> le_infI1
  6188     meet_leI2               ~> le_infI2
  6189     le_joinI1               ~> le_supI1
  6190     le_joinI2               ~> le_supI2
  6191     meet_assoc              ~> inf_assoc
  6192     join_assoc              ~> sup_assoc
  6193     meet_left_comm          ~> inf_left_commute
  6194     meet_left_idempotent    ~> inf_left_idem
  6195     join_left_comm          ~> sup_left_commute
  6196     join_left_idempotent    ~> sup_left_idem
  6197     meet_aci                ~> inf_aci
  6198     join_aci                ~> sup_aci
  6199     le_def_meet             ~> le_iff_inf
  6200     le_def_join             ~> le_iff_sup
  6201     join_absorp2            ~> sup_absorb2
  6202     join_absorp1            ~> sup_absorb1
  6203     meet_absorp1            ~> inf_absorb1
  6204     meet_absorp2            ~> inf_absorb2
  6205     meet_join_absorp        ~> inf_sup_absorb
  6206     join_meet_absorp        ~> sup_inf_absorb
  6207     distrib_join_le         ~> distrib_sup_le
  6208     distrib_meet_le         ~> distrib_inf_le
  6209 
  6210     add_meet_distrib_left   ~> add_inf_distrib_left
  6211     add_join_distrib_left   ~> add_sup_distrib_left
  6212     is_join_neg_meet        ~> is_join_neg_inf
  6213     is_meet_neg_join        ~> is_meet_neg_sup
  6214     add_meet_distrib_right  ~> add_inf_distrib_right
  6215     add_join_distrib_right  ~> add_sup_distrib_right
  6216     add_meet_join_distribs  ~> add_sup_inf_distribs
  6217     join_eq_neg_meet        ~> sup_eq_neg_inf
  6218     meet_eq_neg_join        ~> inf_eq_neg_sup
  6219     add_eq_meet_join        ~> add_eq_inf_sup
  6220     meet_0_imp_0            ~> inf_0_imp_0
  6221     join_0_imp_0            ~> sup_0_imp_0
  6222     meet_0_eq_0             ~> inf_0_eq_0
  6223     join_0_eq_0             ~> sup_0_eq_0
  6224     neg_meet_eq_join        ~> neg_inf_eq_sup
  6225     neg_join_eq_meet        ~> neg_sup_eq_inf
  6226     join_eq_if              ~> sup_eq_if
  6227 
  6228     mono_meet               ~> mono_inf
  6229     mono_join               ~> mono_sup
  6230     meet_bool_eq            ~> inf_bool_eq
  6231     join_bool_eq            ~> sup_bool_eq
  6232     meet_fun_eq             ~> inf_fun_eq
  6233     join_fun_eq             ~> sup_fun_eq
  6234     meet_set_eq             ~> inf_set_eq
  6235     join_set_eq             ~> sup_set_eq
  6236     meet1_iff               ~> inf1_iff
  6237     meet2_iff               ~> inf2_iff
  6238     meet1I                  ~> inf1I
  6239     meet2I                  ~> inf2I
  6240     meet1D1                 ~> inf1D1
  6241     meet2D1                 ~> inf2D1
  6242     meet1D2                 ~> inf1D2
  6243     meet2D2                 ~> inf2D2
  6244     meet1E                  ~> inf1E
  6245     meet2E                  ~> inf2E
  6246     join1_iff               ~> sup1_iff
  6247     join2_iff               ~> sup2_iff
  6248     join1I1                 ~> sup1I1
  6249     join2I1                 ~> sup2I1
  6250     join1I1                 ~> sup1I1
  6251     join2I2                 ~> sup1I2
  6252     join1CI                 ~> sup1CI
  6253     join2CI                 ~> sup2CI
  6254     join1E                  ~> sup1E
  6255     join2E                  ~> sup2E
  6256 
  6257     is_meet_Meet            ~> is_meet_Inf
  6258     Meet_bool_def           ~> Inf_bool_def
  6259     Meet_fun_def            ~> Inf_fun_def
  6260     Meet_greatest           ~> Inf_greatest
  6261     Meet_lower              ~> Inf_lower
  6262     Meet_set_def            ~> Inf_set_def
  6263 
  6264     Sup_def                 ~> Sup_Inf
  6265     Sup_bool_eq             ~> Sup_bool_def
  6266     Sup_fun_eq              ~> Sup_fun_def
  6267     Sup_set_eq              ~> Sup_set_def
  6268 
  6269     listsp_meetI            ~> listsp_infI
  6270     listsp_meet_eq          ~> listsp_inf_eq
  6271 
  6272     meet_min                ~> inf_min
  6273     join_max                ~> sup_max
  6274 
  6275 * Added syntactic class "size"; overloaded constant "size" now has
  6276 type "'a::size ==> bool"
  6277 
  6278 * Internal reorganisation of `size' of datatypes: size theorems
  6279 "foo.size" are no longer subsumed by "foo.simps" (but are still
  6280 simplification rules by default!); theorems "prod.size" now named
  6281 "*.size".
  6282 
  6283 * Class "div" now inherits from class "times" rather than "type".
  6284 INCOMPATIBILITY.
  6285 
  6286 * HOL/Finite_Set: "name-space" locales Lattice, Distrib_lattice,
  6287 Linorder etc.  have disappeared; operations defined in terms of
  6288 fold_set now are named Inf_fin, Sup_fin.  INCOMPATIBILITY.
  6289 
  6290 * HOL/Nat: neq0_conv no longer declared as iff.  INCOMPATIBILITY.
  6291 
  6292 * HOL-Word: New extensive library and type for generic, fixed size
  6293 machine words, with arithmetic, bit-wise, shifting and rotating
  6294 operations, reflection into int, nat, and bool lists, automation for
  6295 linear arithmetic (by automatic reflection into nat or int), including
  6296 lemmas on overflow and monotonicity.  Instantiated to all appropriate
  6297 arithmetic type classes, supporting automatic simplification of
  6298 numerals on all operations.
  6299 
  6300 * Library/Boolean_Algebra: locales for abstract boolean algebras.
  6301 
  6302 * Library/Numeral_Type: numbers as types, e.g. TYPE(32).
  6303 
  6304 * Code generator library theories:
  6305   - Code_Integer represents HOL integers by big integer literals in target
  6306     languages.
  6307   - Code_Char represents HOL characters by character literals in target
  6308     languages.
  6309   - Code_Char_chr like Code_Char, but also offers treatment of character
  6310     codes; includes Code_Integer.
  6311   - Executable_Set allows to generate code for finite sets using lists.
  6312   - Executable_Rat implements rational numbers as triples (sign, enumerator,
  6313     denominator).
  6314   - Executable_Real implements a subset of real numbers, namly those
  6315     representable by rational numbers.
  6316   - Efficient_Nat implements natural numbers by integers, which in general will
  6317     result in higher efficency; pattern matching with 0/Suc is eliminated;
  6318     includes Code_Integer.
  6319   - Code_Index provides an additional datatype index which is mapped to
  6320     target-language built-in integers.
  6321   - Code_Message provides an additional datatype message_string which is isomorphic to
  6322     strings; messages are mapped to target-language strings.
  6323 
  6324 * New package for inductive predicates
  6325 
  6326   An n-ary predicate p with m parameters z_1, ..., z_m can now be defined via
  6327 
  6328     inductive
  6329       p :: "U_1 => ... => U_m => T_1 => ... => T_n => bool"
  6330       for z_1 :: U_1 and ... and z_n :: U_m
  6331     where
  6332       rule_1: "... ==> p z_1 ... z_m t_1_1 ... t_1_n"
  6333     | ...
  6334 
  6335   with full support for type-inference, rather than
  6336 
  6337     consts s :: "U_1 => ... => U_m => (T_1 * ... * T_n) set"
  6338 
  6339     abbreviation p :: "U_1 => ... => U_m => T_1 => ... => T_n => bool"
  6340     where "p z_1 ... z_m x_1 ... x_n == (x_1, ..., x_n) : s z_1 ... z_m"
  6341 
  6342     inductive "s z_1 ... z_m"
  6343     intros
  6344       rule_1: "... ==> (t_1_1, ..., t_1_n) : s z_1 ... z_m"
  6345       ...
  6346 
  6347   For backward compatibility, there is a wrapper allowing inductive
  6348   sets to be defined with the new package via
  6349 
  6350     inductive_set
  6351       s :: "U_1 => ... => U_m => (T_1 * ... * T_n) set"
  6352       for z_1 :: U_1 and ... and z_n :: U_m
  6353     where
  6354       rule_1: "... ==> (t_1_1, ..., t_1_n) : s z_1 ... z_m"
  6355     | ...
  6356 
  6357   or
  6358 
  6359     inductive_set
  6360       s :: "U_1 => ... => U_m => (T_1 * ... * T_n) set"
  6361       and p :: "U_1 => ... => U_m => T_1 => ... => T_n => bool"
  6362       for z_1 :: U_1 and ... and z_n :: U_m
  6363     where
  6364       "p z_1 ... z_m x_1 ... x_n == (x_1, ..., x_n) : s z_1 ... z_m"
  6365     | rule_1: "... ==> p z_1 ... z_m t_1_1 ... t_1_n"
  6366     | ...
  6367 
  6368   if the additional syntax "p ..." is required.
  6369 
  6370   Numerous examples can be found in the subdirectories src/HOL/Auth,
  6371   src/HOL/Bali, src/HOL/Induct, and src/HOL/MicroJava.
  6372 
  6373   INCOMPATIBILITIES:
  6374 
  6375   - Since declaration and definition of inductive sets or predicates
  6376     is no longer separated, abbreviations involving the newly
  6377     introduced sets or predicates must be specified together with the
  6378     introduction rules after the 'where' keyword (see above), rather
  6379     than before the actual inductive definition.
  6380 
  6381   - The variables in induction and elimination rules are now
  6382     quantified in the order of their occurrence in the introduction
  6383     rules, rather than in alphabetical order. Since this may break
  6384     some proofs, these proofs either have to be repaired, e.g. by
  6385     reordering the variables a_i_1 ... a_i_{k_i} in Isar 'case'
  6386     statements of the form
  6387 
  6388       case (rule_i a_i_1 ... a_i_{k_i})
  6389 
  6390     or the old order of quantification has to be restored by explicitly adding
  6391     meta-level quantifiers in the introduction rules, i.e.
  6392 
  6393       | rule_i: "!!a_i_1 ... a_i_{k_i}. ... ==> p z_1 ... z_m t_i_1 ... t_i_n"
  6394 
  6395   - The format of the elimination rules is now
  6396 
  6397       p z_1 ... z_m x_1 ... x_n ==>
  6398         (!!a_1_1 ... a_1_{k_1}. x_1 = t_1_1 ==> ... ==> x_n = t_1_n ==> ... ==> P)
  6399         ==> ... ==> P
  6400 
  6401     for predicates and
  6402 
  6403       (x_1, ..., x_n) : s z_1 ... z_m ==>
  6404         (!!a_1_1 ... a_1_{k_1}. x_1 = t_1_1 ==> ... ==> x_n = t_1_n ==> ... ==> P)
  6405         ==> ... ==> P
  6406 
  6407     for sets rather than
  6408 
  6409       x : s z_1 ... z_m ==>
  6410         (!!a_1_1 ... a_1_{k_1}. x = (t_1_1, ..., t_1_n) ==> ... ==> P)
  6411         ==> ... ==> P
  6412 
  6413     This may require terms in goals to be expanded to n-tuples
  6414     (e.g. using case_tac or simplification with the split_paired_all
  6415     rule) before the above elimination rule is applicable.
  6416 
  6417   - The elimination or case analysis rules for (mutually) inductive
  6418     sets or predicates are now called "p_1.cases" ... "p_k.cases". The
  6419     list of rules "p_1_..._p_k.elims" is no longer available.
  6420 
  6421 * New package "function"/"fun" for general recursive functions,
  6422 supporting mutual and nested recursion, definitions in local contexts,
  6423 more general pattern matching and partiality. See HOL/ex/Fundefs.thy
  6424 for small examples, and the separate tutorial on the function
  6425 package. The old recdef "package" is still available as before, but
  6426 users are encouraged to use the new package.
  6427 
  6428 * Method "lexicographic_order" automatically synthesizes termination
  6429 relations as lexicographic combinations of size measures. 
  6430 
  6431 * Case-expressions allow arbitrary constructor-patterns (including
  6432 "_") and take their order into account, like in functional
  6433 programming.  Internally, this is translated into nested
  6434 case-expressions; missing cases are added and mapped to the predefined
  6435 constant "undefined". In complicated cases printing may no longer show
  6436 the original input but the internal form. Lambda-abstractions allow
  6437 the same form of pattern matching: "% pat1 => e1 | ..." is an
  6438 abbreviation for "%x. case x of pat1 => e1 | ..." where x is a new
  6439 variable.
  6440 
  6441 * IntDef: The constant "int :: nat => int" has been removed; now "int"
  6442 is an abbreviation for "of_nat :: nat => int". The simplification
  6443 rules for "of_nat" have been changed to work like "int" did
  6444 previously.  Potential INCOMPATIBILITY:
  6445   - "of_nat (Suc m)" simplifies to "1 + of_nat m" instead of "of_nat m + 1"
  6446   - of_nat_diff and of_nat_mult are no longer default simp rules
  6447 
  6448 * Method "algebra" solves polynomial equations over (semi)rings using
  6449 Groebner bases. The (semi)ring structure is defined by locales and the
  6450 tool setup depends on that generic context. Installing the method for
  6451 a specific type involves instantiating the locale and possibly adding
  6452 declarations for computation on the coefficients.  The method is
  6453 already instantiated for natural numbers and for the axiomatic class
  6454 of idoms with numerals.  See also the paper by Chaieb and Wenzel at
  6455 CALCULEMUS 2007 for the general principles underlying this
  6456 architecture of context-aware proof-tools.
  6457 
  6458 * Method "ferrack" implements quantifier elimination over
  6459 special-purpose dense linear orders using locales (analogous to
  6460 "algebra"). The method is already installed for class
  6461 {ordered_field,recpower,number_ring} which subsumes real, hyperreal,
  6462 rat, etc.
  6463 
  6464 * Former constant "List.op @" now named "List.append".  Use ML
  6465 antiquotations @{const_name List.append} or @{term " ... @ ... "} to
  6466 circumvent possible incompatibilities when working on ML level.
  6467 
  6468 * primrec: missing cases mapped to "undefined" instead of "arbitrary".
  6469 
  6470 * New function listsum :: 'a list => 'a for arbitrary monoids.
  6471 Special syntax: "SUM x <- xs. f x" (and latex variants)
  6472 
  6473 * New syntax for Haskell-like list comprehension (input only), eg.
  6474 [(x,y). x <- xs, y <- ys, x ~= y], see also src/HOL/List.thy.
  6475 
  6476 * The special syntax for function "filter" has changed from [x :
  6477 xs. P] to [x <- xs. P] to avoid an ambiguity caused by list
  6478 comprehension syntax, and for uniformity.  INCOMPATIBILITY.
  6479 
  6480 * [a..b] is now defined for arbitrary linear orders.  It used to be
  6481 defined on nat only, as an abbreviation for [a..<Suc b]
  6482 INCOMPATIBILITY.
  6483 
  6484 * Renamed lemma "set_take_whileD"  to "set_takeWhileD".
  6485 
  6486 * New functions "sorted" and "sort" in src/HOL/List.thy.
  6487 
  6488 * New lemma collection field_simps (an extension of ring_simps) for
  6489 manipulating (in)equations involving division. Multiplies with all
  6490 denominators that can be proved to be non-zero (in equations) or
  6491 positive/negative (in inequations).
  6492 
  6493 * Lemma collections ring_eq_simps, group_eq_simps and ring_distrib
  6494 have been improved and renamed to ring_simps, group_simps and
  6495 ring_distribs.  Removed lemmas field_xyz in theory Ring_and_Field
  6496 because they were subsumed by lemmas xyz.  INCOMPATIBILITY.
  6497 
  6498 * Theory Library/Commutative_Ring: switched from recdef to function
  6499 package; constants add, mul, pow now curried.  Infix syntax for
  6500 algebraic operations.
  6501 
  6502 * Dropped redundant lemma def_imp_eq in favor of meta_eq_to_obj_eq.
  6503 INCOMPATIBILITY.
  6504 
  6505 * Dropped redundant lemma if_def2 in favor of if_bool_eq_conj.
  6506 INCOMPATIBILITY.
  6507 
  6508 * HOL/records: generalised field-update to take a function on the
  6509 field rather than the new value: r(|A := x|) is translated to A_update
  6510 (K x) r The K-combinator that is internally used is called K_record.
  6511 INCOMPATIBILITY: Usage of the plain update functions has to be
  6512 adapted.
  6513  
  6514 * Class "semiring_0" now contains annihilation axioms x * 0 = 0 and 0
  6515 * x = 0, which are required for a semiring.  Richer structures do not
  6516 inherit from semiring_0 anymore, because this property is a theorem
  6517 there, not an axiom.  INCOMPATIBILITY: In instances of semiring_0,
  6518 there is more to prove, but this is mostly trivial.
  6519 
  6520 * Class "recpower" is generalized to arbitrary monoids, not just
  6521 commutative semirings.  INCOMPATIBILITY: may need to incorporate
  6522 commutativity or semiring properties additionally.
  6523 
  6524 * Constant "List.list_all2" in List.thy now uses authentic syntax.
  6525 INCOMPATIBILITY: translations containing list_all2 may go wrong,
  6526 better use 'abbreviation'.
  6527 
  6528 * Renamed constant "List.op mem" to "List.member".  INCOMPATIBILITY.
  6529 
  6530 * Numeral syntax: type 'bin' which was a mere type copy of 'int' has
  6531 been abandoned in favour of plain 'int'.  INCOMPATIBILITY --
  6532 significant changes for setting up numeral syntax for types:
  6533   - New constants Numeral.pred and Numeral.succ instead
  6534       of former Numeral.bin_pred and Numeral.bin_succ.
  6535   - Use integer operations instead of bin_add, bin_mult and so on.
  6536   - Numeral simplification theorems named Numeral.numeral_simps instead of Bin_simps.
  6537   - ML structure Bin_Simprocs now named Int_Numeral_Base_Simprocs.
  6538 
  6539 See src/HOL/Integ/IntArith.thy for an example setup.
  6540 
  6541 * Command 'normal_form' computes the normal form of a term that may
  6542 contain free variables.  For example ``normal_form "rev [a, b, c]"''
  6543 produces ``[b, c, a]'' (without proof).  This command is suitable for
  6544 heavy-duty computations because the functions are compiled to ML
  6545 first.  Correspondingly, a method "normalization" is provided.  See
  6546 further src/HOL/ex/NormalForm.thy and src/Tools/nbe.ML.
  6547 
  6548 * Alternative iff syntax "A <-> B" for equality on bool (with priority
  6549 25 like -->); output depends on the "iff" print_mode, the default is
  6550 "A = B" (with priority 50).
  6551 
  6552 * Relations less (<) and less_eq (<=) are also available on type bool.
  6553 Modified syntax to disallow nesting without explicit parentheses,
  6554 e.g. "(x < y) < z" or "x < (y < z)", but NOT "x < y < z".  Potential
  6555 INCOMPATIBILITY.
  6556 
  6557 * "LEAST x:A. P" expands to "LEAST x. x:A & P" (input only).
  6558 
  6559 * Relation composition operator "op O" now has precedence 75 and binds
  6560 stronger than union and intersection. INCOMPATIBILITY.
  6561 
  6562 * The old set interval syntax "{m..n(}" (and relatives) has been
  6563 removed.  Use "{m..<n}" (and relatives) instead.
  6564 
  6565 * In the context of the assumption "~(s = t)" the Simplifier rewrites
  6566 "t = s" to False (by simproc "neq").  INCOMPATIBILITY, consider using
  6567 ``declare [[simproc del: neq]]''.
  6568 
  6569 * Simplifier: "m dvd n" where m and n are numbers is evaluated to
  6570 True/False.
  6571 
  6572 * Theorem Cons_eq_map_conv no longer declared as "simp".
  6573 
  6574 * Theorem setsum_mult renamed to setsum_right_distrib.
  6575 
  6576 * Prefer ex1I over ex_ex1I in single-step reasoning, e.g. by the
  6577 ``rule'' method.
  6578 
  6579 * Reimplemented methods "sat" and "satx", with several improvements:
  6580 goals no longer need to be stated as "<prems> ==> False", equivalences
  6581 (i.e. "=" on type bool) are handled, variable names of the form
  6582 "lit_<n>" are no longer reserved, significant speedup.
  6583 
  6584 * Methods "sat" and "satx" can now replay MiniSat proof traces.
  6585 zChaff is still supported as well.
  6586 
  6587 * 'inductive' and 'datatype': provide projections of mutual rules,
  6588 bundled as foo_bar.inducts;
  6589 
  6590 * Library: moved theories Parity, GCD, Binomial, Infinite_Set to
  6591 Library.
  6592 
  6593 * Library: moved theory Accessible_Part to main HOL.
  6594 
  6595 * Library: added theory Coinductive_List of potentially infinite lists
  6596 as greatest fixed-point.
  6597 
  6598 * Library: added theory AssocList which implements (finite) maps as
  6599 association lists.
  6600 
  6601 * Method "evaluation" solves goals (i.e. a boolean expression)
  6602 efficiently by compiling it to ML.  The goal is "proved" (via an
  6603 oracle) if it evaluates to True.
  6604 
  6605 * Linear arithmetic now splits certain operators (e.g. min, max, abs)
  6606 also when invoked by the simplifier.  This results in the Simplifier
  6607 being more powerful on arithmetic goals.  INCOMPATIBILITY.
  6608 Configuration option fast_arith_split_limit=0 recovers the old
  6609 behavior.
  6610 
  6611 * Support for hex (0x20) and binary (0b1001) numerals.
  6612 
  6613 * New method: reify eqs (t), where eqs are equations for an
  6614 interpretation I :: 'a list => 'b => 'c and t::'c is an optional
  6615 parameter, computes a term s::'b and a list xs::'a list and proves the
  6616 theorem I xs s = t. This is also known as reification or quoting. The
  6617 resulting theorem is applied to the subgoal to substitute t with I xs
  6618 s.  If t is omitted, the subgoal itself is reified.
  6619 
  6620 * New method: reflection corr_thm eqs (t). The parameters eqs and (t)
  6621 are as explained above. corr_thm is a theorem for I vs (f t) = I vs t,
  6622 where f is supposed to be a computable function (in the sense of code
  6623 generattion). The method uses reify to compute s and xs as above then
  6624 applies corr_thm and uses normalization by evaluation to "prove" f s =
  6625 r and finally gets the theorem t = r, which is again applied to the
  6626 subgoal. An Example is available in src/HOL/ex/ReflectionEx.thy.
  6627 
  6628 * Reflection: Automatic reification now handels binding, an example is
  6629 available in src/HOL/ex/ReflectionEx.thy
  6630 
  6631 * HOL-Statespace: ``State Spaces: The Locale Way'' introduces a
  6632 command 'statespace' that is similar to 'record', but introduces an
  6633 abstract specification based on the locale infrastructure instead of
  6634 HOL types.  This leads to extra flexibility in composing state spaces,
  6635 in particular multiple inheritance and renaming of components.
  6636 
  6637 
  6638 *** HOL-Complex ***
  6639 
  6640 * Hyperreal: Functions root and sqrt are now defined on negative real
  6641 inputs so that root n (- x) = - root n x and sqrt (- x) = - sqrt x.
  6642 Nonnegativity side conditions have been removed from many lemmas, so
  6643 that more subgoals may now be solved by simplification; potential
  6644 INCOMPATIBILITY.
  6645 
  6646 * Real: new type classes formalize real normed vector spaces and
  6647 algebras, using new overloaded constants scaleR :: real => 'a => 'a
  6648 and norm :: 'a => real.
  6649 
  6650 * Real: constant of_real :: real => 'a::real_algebra_1 injects from
  6651 reals into other types. The overloaded constant Reals :: 'a set is now
  6652 defined as range of_real; potential INCOMPATIBILITY.
  6653 
  6654 * Real: proper support for ML code generation, including 'quickcheck'.
  6655 Reals are implemented as arbitrary precision rationals.
  6656 
  6657 * Hyperreal: Several constants that previously worked only for the
  6658 reals have been generalized, so they now work over arbitrary vector
  6659 spaces. Type annotations may need to be added in some cases; potential
  6660 INCOMPATIBILITY.
  6661 
  6662   Infinitesimal  :: ('a::real_normed_vector) star set
  6663   HFinite        :: ('a::real_normed_vector) star set
  6664   HInfinite      :: ('a::real_normed_vector) star set
  6665   approx         :: ('a::real_normed_vector) star => 'a star => bool
  6666   monad          :: ('a::real_normed_vector) star => 'a star set
  6667   galaxy         :: ('a::real_normed_vector) star => 'a star set
  6668   (NS)LIMSEQ     :: [nat => 'a::real_normed_vector, 'a] => bool
  6669   (NS)convergent :: (nat => 'a::real_normed_vector) => bool
  6670   (NS)Bseq       :: (nat => 'a::real_normed_vector) => bool
  6671   (NS)Cauchy     :: (nat => 'a::real_normed_vector) => bool
  6672   (NS)LIM        :: ['a::real_normed_vector => 'b::real_normed_vector, 'a, 'b] => bool
  6673   is(NS)Cont     :: ['a::real_normed_vector => 'b::real_normed_vector, 'a] => bool
  6674   deriv          :: ['a::real_normed_field => 'a, 'a, 'a] => bool
  6675   sgn            :: 'a::real_normed_vector => 'a
  6676   exp            :: 'a::{recpower,real_normed_field,banach} => 'a
  6677 
  6678 * Complex: Some complex-specific constants are now abbreviations for
  6679 overloaded ones: complex_of_real = of_real, cmod = norm, hcmod =
  6680 hnorm.  Other constants have been entirely removed in favor of the
  6681 polymorphic versions (INCOMPATIBILITY):
  6682 
  6683   approx        <-- capprox
  6684   HFinite       <-- CFinite
  6685   HInfinite     <-- CInfinite
  6686   Infinitesimal <-- CInfinitesimal
  6687   monad         <-- cmonad
  6688   galaxy        <-- cgalaxy
  6689   (NS)LIM       <-- (NS)CLIM, (NS)CRLIM
  6690   is(NS)Cont    <-- is(NS)Contc, is(NS)contCR
  6691   (ns)deriv     <-- (ns)cderiv
  6692 
  6693 
  6694 *** HOL-Algebra ***
  6695 
  6696 * Formalisation of ideals and the quotient construction over rings.
  6697 
  6698 * Order and lattice theory no longer based on records.
  6699 INCOMPATIBILITY.
  6700 
  6701 * Renamed lemmas least_carrier -> least_closed and greatest_carrier ->
  6702 greatest_closed.  INCOMPATIBILITY.
  6703 
  6704 * Method algebra is now set up via an attribute.  For examples see
  6705 Ring.thy.  INCOMPATIBILITY: the method is now weaker on combinations
  6706 of algebraic structures.
  6707 
  6708 * Renamed theory CRing to Ring.
  6709 
  6710 
  6711 *** HOL-Nominal ***
  6712 
  6713 * Substantial, yet incomplete support for nominal datatypes (binding
  6714 structures) based on HOL-Nominal logic.  See src/HOL/Nominal and
  6715 src/HOL/Nominal/Examples.  Prospective users should consult
  6716 http://isabelle.in.tum.de/nominal/
  6717 
  6718 
  6719 *** ML ***
  6720 
  6721 * ML basics: just one true type int, which coincides with IntInf.int
  6722 (even on SML/NJ).
  6723 
  6724 * ML within Isar: antiquotations allow to embed statically-checked
  6725 formal entities in the source, referring to the context available at
  6726 compile-time.  For example:
  6727 
  6728 ML {* @{sort "{zero,one}"} *}
  6729 ML {* @{typ "'a => 'b"} *}
  6730 ML {* @{term "%x. x"} *}
  6731 ML {* @{prop "x == y"} *}
  6732 ML {* @{ctyp "'a => 'b"} *}
  6733 ML {* @{cterm "%x. x"} *}
  6734 ML {* @{cprop "x == y"} *}
  6735 ML {* @{thm asm_rl} *}
  6736 ML {* @{thms asm_rl} *}
  6737 ML {* @{type_name c} *}
  6738 ML {* @{type_syntax c} *}
  6739 ML {* @{const_name c} *}
  6740 ML {* @{const_syntax c} *}
  6741 ML {* @{context} *}
  6742 ML {* @{theory} *}
  6743 ML {* @{theory Pure} *}
  6744 ML {* @{theory_ref} *}
  6745 ML {* @{theory_ref Pure} *}
  6746 ML {* @{simpset} *}
  6747 ML {* @{claset} *}
  6748 ML {* @{clasimpset} *}
  6749 
  6750 The same works for sources being ``used'' within an Isar context.
  6751 
  6752 * ML in Isar: improved error reporting; extra verbosity with
  6753 ML_Context.trace enabled.
  6754 
  6755 * Pure/General/table.ML: the join operations now works via exceptions
  6756 DUP/SAME instead of type option. This is simpler in simple cases, and
  6757 admits slightly more efficient complex applications.
  6758 
  6759 * Pure: 'advanced' translation functions (parse_translation etc.) now
  6760 use Context.generic instead of just theory.
  6761 
  6762 * Pure: datatype Context.generic joins theory/Proof.context and
  6763 provides some facilities for code that works in either kind of
  6764 context, notably GenericDataFun for uniform theory and proof data.
  6765 
  6766 * Pure: simplified internal attribute type, which is now always
  6767 Context.generic * thm -> Context.generic * thm. Global (theory) vs.
  6768 local (Proof.context) attributes have been discontinued, while
  6769 minimizing code duplication. Thm.rule_attribute and
  6770 Thm.declaration_attribute build canonical attributes; see also structure
  6771 Context for further operations on Context.generic, notably
  6772 GenericDataFun. INCOMPATIBILITY, need to adapt attribute type
  6773 declarations and definitions.
  6774 
  6775 * Context data interfaces (Theory/Proof/GenericDataFun): removed
  6776 name/print, uninitialized data defaults to ad-hoc copy of empty value,
  6777 init only required for impure data. INCOMPATIBILITY: empty really need
  6778 to be empty (no dependencies on theory content!)
  6779 
  6780 * Pure/kernel: consts certification ignores sort constraints given in
  6781 signature declarations. (This information is not relevant to the
  6782 logic, but only for type inference.) SIGNIFICANT INTERNAL CHANGE,
  6783 potential INCOMPATIBILITY.
  6784 
  6785 * Pure: axiomatic type classes are now purely definitional, with
  6786 explicit proofs of class axioms and super class relations performed
  6787 internally. See Pure/axclass.ML for the main internal interfaces --
  6788 notably AxClass.define_class supercedes AxClass.add_axclass, and
  6789 AxClass.axiomatize_class/classrel/arity supersede
  6790 Sign.add_classes/classrel/arities.
  6791 
  6792 * Pure/Isar: Args/Attrib parsers operate on Context.generic --
  6793 global/local versions on theory vs. Proof.context have been
  6794 discontinued; Attrib.syntax and Method.syntax have been adapted
  6795 accordingly.  INCOMPATIBILITY, need to adapt parser expressions for
  6796 attributes, methods, etc.
  6797 
  6798 * Pure: several functions of signature "... -> theory -> theory * ..."
  6799 have been reoriented to "... -> theory -> ... * theory" in order to
  6800 allow natural usage in combination with the ||>, ||>>, |-> and
  6801 fold_map combinators.
  6802 
  6803 * Pure: official theorem names (closed derivations) and additional
  6804 comments (tags) are now strictly separate.  Name hints -- which are
  6805 maintained as tags -- may be attached any time without affecting the
  6806 derivation.
  6807 
  6808 * Pure: primitive rule lift_rule now takes goal cterm instead of an
  6809 actual goal state (thm).  Use Thm.lift_rule (Thm.cprem_of st i) to
  6810 achieve the old behaviour.
  6811 
  6812 * Pure: the "Goal" constant is now called "prop", supporting a
  6813 slightly more general idea of ``protecting'' meta-level rule
  6814 statements.
  6815 
  6816 * Pure: Logic.(un)varify only works in a global context, which is now
  6817 enforced instead of silently assumed.  INCOMPATIBILITY, may use
  6818 Logic.legacy_(un)varify as temporary workaround.
  6819 
  6820 * Pure: structure Name provides scalable operations for generating
  6821 internal variable names, notably Name.variants etc.  This replaces
  6822 some popular functions from term.ML:
  6823 
  6824   Term.variant		->  Name.variant
  6825   Term.variantlist	->  Name.variant_list
  6826   Term.invent_names	->  Name.invent_list
  6827 
  6828 Note that low-level renaming rarely occurs in new code -- operations
  6829 from structure Variable are used instead (see below).
  6830 
  6831 * Pure: structure Variable provides fundamental operations for proper
  6832 treatment of fixed/schematic variables in a context.  For example,
  6833 Variable.import introduces fixes for schematics of given facts and
  6834 Variable.export reverses the effect (up to renaming) -- this replaces
  6835 various freeze_thaw operations.
  6836 
  6837 * Pure: structure Goal provides simple interfaces for
  6838 init/conclude/finish and tactical prove operations (replacing former
  6839 Tactic.prove).  Goal.prove is the canonical way to prove results
  6840 within a given context; Goal.prove_global is a degraded version for
  6841 theory level goals, including a global Drule.standard.  Note that
  6842 OldGoals.prove_goalw_cterm has long been obsolete, since it is
  6843 ill-behaved in a local proof context (e.g. with local fixes/assumes or
  6844 in a locale context).
  6845 
  6846 * Pure/Syntax: generic interfaces for parsing (Syntax.parse_term etc.)
  6847 and type checking (Syntax.check_term etc.), with common combinations
  6848 (Syntax.read_term etc.). These supersede former Sign.read_term etc.
  6849 which are considered legacy and await removal.
  6850 
  6851 * Pure/Syntax: generic interfaces for type unchecking
  6852 (Syntax.uncheck_terms etc.) and unparsing (Syntax.unparse_term etc.),
  6853 with common combinations (Syntax.pretty_term, Syntax.string_of_term
  6854 etc.).  Former Sign.pretty_term, Sign.string_of_term etc. are still
  6855 available for convenience, but refer to the very same operations using
  6856 a mere theory instead of a full context.
  6857 
  6858 * Isar: simplified treatment of user-level errors, using exception
  6859 ERROR of string uniformly.  Function error now merely raises ERROR,
  6860 without any side effect on output channels.  The Isar toplevel takes
  6861 care of proper display of ERROR exceptions.  ML code may use plain
  6862 handle/can/try; cat_error may be used to concatenate errors like this:
  6863 
  6864   ... handle ERROR msg => cat_error msg "..."
  6865 
  6866 Toplevel ML code (run directly or through the Isar toplevel) may be
  6867 embedded into the Isar toplevel with exception display/debug like
  6868 this:
  6869 
  6870   Isar.toplevel (fn () => ...)
  6871 
  6872 INCOMPATIBILITY, removed special transform_error facilities, removed
  6873 obsolete variants of user-level exceptions (ERROR_MESSAGE,
  6874 Context.PROOF, ProofContext.CONTEXT, Proof.STATE, ProofHistory.FAIL)
  6875 -- use plain ERROR instead.
  6876 
  6877 * Isar: theory setup now has type (theory -> theory), instead of a
  6878 list.  INCOMPATIBILITY, may use #> to compose setup functions.
  6879 
  6880 * Isar: ML toplevel pretty printer for type Proof.context, subject to
  6881 ProofContext.debug/verbose flags.
  6882 
  6883 * Isar: Toplevel.theory_to_proof admits transactions that modify the
  6884 theory before entering a proof state.  Transactions now always see a
  6885 quasi-functional intermediate checkpoint, both in interactive and
  6886 batch mode.
  6887 
  6888 * Isar: simplified interfaces for outer syntax.  Renamed
  6889 OuterSyntax.add_keywords to OuterSyntax.keywords.  Removed
  6890 OuterSyntax.add_parsers -- this functionality is now included in
  6891 OuterSyntax.command etc.  INCOMPATIBILITY.
  6892 
  6893 * Simplifier: the simpset of a running simplification process now
  6894 contains a proof context (cf. Simplifier.the_context), which is the
  6895 very context that the initial simpset has been retrieved from (by
  6896 simpset_of/local_simpset_of).  Consequently, all plug-in components
  6897 (solver, looper etc.) may depend on arbitrary proof data.
  6898 
  6899 * Simplifier.inherit_context inherits the proof context (plus the
  6900 local bounds) of the current simplification process; any simproc
  6901 etc. that calls the Simplifier recursively should do this!  Removed
  6902 former Simplifier.inherit_bounds, which is already included here --
  6903 INCOMPATIBILITY.  Tools based on low-level rewriting may even have to
  6904 specify an explicit context using Simplifier.context/theory_context.
  6905 
  6906 * Simplifier/Classical Reasoner: more abstract interfaces
  6907 change_simpset/claset for modifying the simpset/claset reference of a
  6908 theory; raw versions simpset/claset_ref etc. have been discontinued --
  6909 INCOMPATIBILITY.
  6910 
  6911 * Provers: more generic wrt. syntax of object-logics, avoid hardwired
  6912 "Trueprop" etc.
  6913 
  6914 
  6915 *** System ***
  6916 
  6917 * settings: the default heap location within ISABELLE_HOME_USER now
  6918 includes ISABELLE_IDENTIFIER.  This simplifies use of multiple
  6919 Isabelle installations.
  6920 
  6921 * isabelle-process: option -S (secure mode) disables some critical
  6922 operations, notably runtime compilation and evaluation of ML source
  6923 code.
  6924 
  6925 * Basic Isabelle mode for jEdit, see Isabelle/lib/jedit/.
  6926 
  6927 * Support for parallel execution, using native multicore support of
  6928 Poly/ML 5.1.  The theory loader exploits parallelism when processing
  6929 independent theories, according to the given theory header
  6930 specifications. The maximum number of worker threads is specified via
  6931 usedir option -M or the "max-threads" setting in Proof General. A
  6932 speedup factor of 1.5--3.5 can be expected on a 4-core machine, and up
  6933 to 6 on a 8-core machine.  User-code needs to observe certain
  6934 guidelines for thread-safe programming, see appendix A in the Isar
  6935 Implementation manual.
  6936 
  6937 
  6938 
  6939 New in Isabelle2005 (October 2005)
  6940 ----------------------------------
  6941 
  6942 *** General ***
  6943 
  6944 * Theory headers: the new header syntax for Isar theories is
  6945 
  6946   theory <name>
  6947   imports <theory1> ... <theoryN>
  6948   uses <file1> ... <fileM>
  6949   begin
  6950 
  6951 where the 'uses' part is optional.  The previous syntax
  6952 
  6953   theory <name> = <theory1> + ... + <theoryN>:
  6954 
  6955 will disappear in the next release.  Use isatool fixheaders to convert
  6956 existing theory files.  Note that there is no change in ancient
  6957 non-Isar theories now, but these will disappear soon.
  6958 
  6959 * Theory loader: parent theories can now also be referred to via
  6960 relative and absolute paths.
  6961 
  6962 * Command 'find_theorems' searches for a list of criteria instead of a
  6963 list of constants. Known criteria are: intro, elim, dest, name:string,
  6964 simp:term, and any term. Criteria can be preceded by '-' to select
  6965 theorems that do not match. Intro, elim, dest select theorems that
  6966 match the current goal, name:s selects theorems whose fully qualified
  6967 name contain s, and simp:term selects all simplification rules whose
  6968 lhs match term.  Any other term is interpreted as pattern and selects
  6969 all theorems matching the pattern. Available in ProofGeneral under
  6970 'ProofGeneral -> Find Theorems' or C-c C-f.  Example:
  6971 
  6972   C-c C-f (100) "(_::nat) + _ + _" intro -name: "HOL."
  6973 
  6974 prints the last 100 theorems matching the pattern "(_::nat) + _ + _",
  6975 matching the current goal as introduction rule and not having "HOL."
  6976 in their name (i.e. not being defined in theory HOL).
  6977 
  6978 * Command 'thms_containing' has been discontinued in favour of
  6979 'find_theorems'; INCOMPATIBILITY.
  6980 
  6981 * Communication with Proof General is now 8bit clean, which means that
  6982 Unicode text in UTF-8 encoding may be used within theory texts (both
  6983 formal and informal parts).  Cf. option -U of the Isabelle Proof
  6984 General interface.  Here are some simple examples (cf. src/HOL/ex):
  6985 
  6986   http://isabelle.in.tum.de/library/HOL/ex/Hebrew.html
  6987   http://isabelle.in.tum.de/library/HOL/ex/Chinese.html
  6988 
  6989 * Improved efficiency of the Simplifier and, to a lesser degree, the
  6990 Classical Reasoner.  Typical big applications run around 2 times
  6991 faster.
  6992 
  6993 
  6994 *** Document preparation ***
  6995 
  6996 * Commands 'display_drafts' and 'print_drafts' perform simple output
  6997 of raw sources.  Only those symbols that do not require additional
  6998 LaTeX packages (depending on comments in isabellesym.sty) are
  6999 displayed properly, everything else is left verbatim.  isatool display
  7000 and isatool print are used as front ends (these are subject to the
  7001 DVI/PDF_VIEWER and PRINT_COMMAND settings, respectively).
  7002 
  7003 * Command tags control specific markup of certain regions of text,
  7004 notably folding and hiding.  Predefined tags include "theory" (for
  7005 theory begin and end), "proof" for proof commands, and "ML" for
  7006 commands involving ML code; the additional tags "visible" and
  7007 "invisible" are unused by default.  Users may give explicit tag
  7008 specifications in the text, e.g. ''by %invisible (auto)''.  The
  7009 interpretation of tags is determined by the LaTeX job during document
  7010 preparation: see option -V of isatool usedir, or options -n and -t of
  7011 isatool document, or even the LaTeX macros \isakeeptag, \isafoldtag,
  7012 \isadroptag.
  7013 
  7014 Several document versions may be produced at the same time via isatool
  7015 usedir (the generated index.html will link all of them).  Typical
  7016 specifications include ''-V document=theory,proof,ML'' to present
  7017 theory/proof/ML parts faithfully, ''-V outline=/proof,/ML'' to fold
  7018 proof and ML commands, and ''-V mutilated=-theory,-proof,-ML'' to omit
  7019 these parts without any formal replacement text.  The Isabelle site
  7020 default settings produce ''document'' and ''outline'' versions as
  7021 specified above.
  7022 
  7023 * Several new antiquotations:
  7024 
  7025   @{term_type term} prints a term with its type annotated;
  7026 
  7027   @{typeof term} prints the type of a term;
  7028 
  7029   @{const const} is the same as @{term const}, but checks that the
  7030   argument is a known logical constant;
  7031 
  7032   @{term_style style term} and @{thm_style style thm} print a term or
  7033   theorem applying a "style" to it
  7034 
  7035   @{ML text}
  7036 
  7037 Predefined styles are 'lhs' and 'rhs' printing the lhs/rhs of
  7038 definitions, equations, inequations etc., 'concl' printing only the
  7039 conclusion of a meta-logical statement theorem, and 'prem1' .. 'prem19'
  7040 to print the specified premise.  TermStyle.add_style provides an ML
  7041 interface for introducing further styles.  See also the "LaTeX Sugar"
  7042 document practical applications.  The ML antiquotation prints
  7043 type-checked ML expressions verbatim.
  7044 
  7045 * Markup commands 'chapter', 'section', 'subsection', 'subsubsection',
  7046 and 'text' support optional locale specification '(in loc)', which
  7047 specifies the default context for interpreting antiquotations.  For
  7048 example: 'text (in lattice) {* @{thm inf_assoc}*}'.
  7049 
  7050 * Option 'locale=NAME' of antiquotations specifies an alternative
  7051 context interpreting the subsequent argument.  For example: @{thm
  7052 [locale=lattice] inf_assoc}.
  7053 
  7054 * Proper output of proof terms (@{prf ...} and @{full_prf ...}) within
  7055 a proof context.
  7056 
  7057 * Proper output of antiquotations for theory commands involving a
  7058 proof context (such as 'locale' or 'theorem (in loc) ...').
  7059 
  7060 * Delimiters of outer tokens (string etc.) now produce separate LaTeX
  7061 macros (\isachardoublequoteopen, isachardoublequoteclose etc.).
  7062 
  7063 * isatool usedir: new option -C (default true) controls whether option
  7064 -D should include a copy of the original document directory; -C false
  7065 prevents unwanted effects such as copying of administrative CVS data.
  7066 
  7067 
  7068 *** Pure ***
  7069 
  7070 * Considerably improved version of 'constdefs' command.  Now performs
  7071 automatic type-inference of declared constants; additional support for
  7072 local structure declarations (cf. locales and HOL records), see also
  7073 isar-ref manual.  Potential INCOMPATIBILITY: need to observe strictly
  7074 sequential dependencies of definitions within a single 'constdefs'
  7075 section; moreover, the declared name needs to be an identifier.  If
  7076 all fails, consider to fall back on 'consts' and 'defs' separately.
  7077 
  7078 * Improved indexed syntax and implicit structures.  First of all,
  7079 indexed syntax provides a notational device for subscripted
  7080 application, using the new syntax \<^bsub>term\<^esub> for arbitrary
  7081 expressions.  Secondly, in a local context with structure
  7082 declarations, number indexes \<^sub>n or the empty index (default
  7083 number 1) refer to a certain fixed variable implicitly; option
  7084 show_structs controls printing of implicit structures.  Typical
  7085 applications of these concepts involve record types and locales.
  7086 
  7087 * New command 'no_syntax' removes grammar declarations (and
  7088 translations) resulting from the given syntax specification, which is
  7089 interpreted in the same manner as for the 'syntax' command.
  7090 
  7091 * 'Advanced' translation functions (parse_translation etc.) may depend
  7092 on the signature of the theory context being presently used for
  7093 parsing/printing, see also isar-ref manual.
  7094 
  7095 * Improved 'oracle' command provides a type-safe interface to turn an
  7096 ML expression of type theory -> T -> term into a primitive rule of
  7097 type theory -> T -> thm (i.e. the functionality of Thm.invoke_oracle
  7098 is already included here); see also FOL/ex/IffExample.thy;
  7099 INCOMPATIBILITY.
  7100 
  7101 * axclass: name space prefix for class "c" is now "c_class" (was "c"
  7102 before); "cI" is no longer bound, use "c.intro" instead.
  7103 INCOMPATIBILITY.  This change avoids clashes of fact bindings for
  7104 axclasses vs. locales.
  7105 
  7106 * Improved internal renaming of symbolic identifiers -- attach primes
  7107 instead of base 26 numbers.
  7108 
  7109 * New flag show_question_marks controls printing of leading question
  7110 marks in schematic variable names.
  7111 
  7112 * In schematic variable names, *any* symbol following \<^isub> or
  7113 \<^isup> is now treated as part of the base name.  For example, the
  7114 following works without printing of awkward ".0" indexes:
  7115 
  7116   lemma "x\<^isub>1 = x\<^isub>2 ==> x\<^isub>2 = x\<^isub>1"
  7117     by simp
  7118 
  7119 * Inner syntax includes (*(*nested*) comments*).
  7120 
  7121 * Pretty printer now supports unbreakable blocks, specified in mixfix
  7122 annotations as "(00...)".
  7123 
  7124 * Clear separation of logical types and nonterminals, where the latter
  7125 may only occur in 'syntax' specifications or type abbreviations.
  7126 Before that distinction was only partially implemented via type class
  7127 "logic" vs. "{}".  Potential INCOMPATIBILITY in rare cases of improper
  7128 use of 'types'/'consts' instead of 'nonterminals'/'syntax'.  Some very
  7129 exotic syntax specifications may require further adaption
  7130 (e.g. Cube/Cube.thy).
  7131 
  7132 * Removed obsolete type class "logic", use the top sort {} instead.
  7133 Note that non-logical types should be declared as 'nonterminals'
  7134 rather than 'types'.  INCOMPATIBILITY for new object-logic
  7135 specifications.
  7136 
  7137 * Attributes 'induct' and 'cases': type or set names may now be
  7138 locally fixed variables as well.
  7139 
  7140 * Simplifier: can now control the depth to which conditional rewriting
  7141 is traced via the PG menu Isabelle -> Settings -> Trace Simp Depth
  7142 Limit.
  7143 
  7144 * Simplifier: simplification procedures may now take the current
  7145 simpset into account (cf. Simplifier.simproc(_i) / mk_simproc
  7146 interface), which is very useful for calling the Simplifier
  7147 recursively.  Minor INCOMPATIBILITY: the 'prems' argument of simprocs
  7148 is gone -- use prems_of_ss on the simpset instead.  Moreover, the
  7149 low-level mk_simproc no longer applies Logic.varify internally, to
  7150 allow for use in a context of fixed variables.
  7151 
  7152 * thin_tac now works even if the assumption being deleted contains !!
  7153 or ==>.  More generally, erule now works even if the major premise of
  7154 the elimination rule contains !! or ==>.
  7155 
  7156 * Method 'rules' has been renamed to 'iprover'. INCOMPATIBILITY.
  7157 
  7158 * Reorganized bootstrapping of the Pure theories; CPure is now derived
  7159 from Pure, which contains all common declarations already.  Both
  7160 theories are defined via plain Isabelle/Isar .thy files.
  7161 INCOMPATIBILITY: elements of CPure (such as the CPure.intro /
  7162 CPure.elim / CPure.dest attributes) now appear in the Pure name space;
  7163 use isatool fixcpure to adapt your theory and ML sources.
  7164 
  7165 * New syntax 'name(i-j, i-, i, ...)' for referring to specific
  7166 selections of theorems in named facts via index ranges.
  7167 
  7168 * 'print_theorems': in theory mode, really print the difference
  7169 wrt. the last state (works for interactive theory development only),
  7170 in proof mode print all local facts (cf. 'print_facts');
  7171 
  7172 * 'hide': option '(open)' hides only base names.
  7173 
  7174 * More efficient treatment of intermediate checkpoints in interactive
  7175 theory development.
  7176 
  7177 * Code generator is now invoked via code_module (incremental code
  7178 generation) and code_library (modular code generation, ML structures
  7179 for each theory).  INCOMPATIBILITY: new keywords 'file' and 'contains'
  7180 must be quoted when used as identifiers.
  7181 
  7182 * New 'value' command for reading, evaluating and printing terms using
  7183 the code generator.  INCOMPATIBILITY: command keyword 'value' must be
  7184 quoted when used as identifier.
  7185 
  7186 
  7187 *** Locales ***
  7188 
  7189 * New commands for the interpretation of locale expressions in
  7190 theories (1), locales (2) and proof contexts (3).  These generate
  7191 proof obligations from the expression specification.  After the
  7192 obligations have been discharged, theorems of the expression are added
  7193 to the theory, target locale or proof context.  The synopsis of the
  7194 commands is a follows:
  7195 
  7196   (1) interpretation expr inst
  7197   (2) interpretation target < expr
  7198   (3) interpret expr inst
  7199 
  7200 Interpretation in theories and proof contexts require a parameter
  7201 instantiation of terms from the current context.  This is applied to
  7202 specifications and theorems of the interpreted expression.
  7203 Interpretation in locales only permits parameter renaming through the
  7204 locale expression.  Interpretation is smart in that interpretations
  7205 that are active already do not occur in proof obligations, neither are
  7206 instantiated theorems stored in duplicate.  Use 'print_interps' to
  7207 inspect active interpretations of a particular locale.  For details,
  7208 see the Isar Reference manual.  Examples can be found in
  7209 HOL/Finite_Set.thy and HOL/Algebra/UnivPoly.thy.
  7210 
  7211 INCOMPATIBILITY: former 'instantiate' has been withdrawn, use
  7212 'interpret' instead.
  7213 
  7214 * New context element 'constrains' for adding type constraints to
  7215 parameters.
  7216 
  7217 * Context expressions: renaming of parameters with syntax
  7218 redeclaration.
  7219 
  7220 * Locale declaration: 'includes' disallowed.
  7221 
  7222 * Proper static binding of attribute syntax -- i.e. types / terms /
  7223 facts mentioned as arguments are always those of the locale definition
  7224 context, independently of the context of later invocations.  Moreover,
  7225 locale operations (renaming and type / term instantiation) are applied
  7226 to attribute arguments as expected.
  7227 
  7228 INCOMPATIBILITY of the ML interface: always pass Attrib.src instead of
  7229 actual attributes; rare situations may require Attrib.attribute to
  7230 embed those attributes into Attrib.src that lack concrete syntax.
  7231 Attribute implementations need to cooperate properly with the static
  7232 binding mechanism.  Basic parsers Args.XXX_typ/term/prop and
  7233 Attrib.XXX_thm etc. already do the right thing without further
  7234 intervention.  Only unusual applications -- such as "where" or "of"
  7235 (cf. src/Pure/Isar/attrib.ML), which process arguments depending both
  7236 on the context and the facts involved -- may have to assign parsed
  7237 values to argument tokens explicitly.
  7238 
  7239 * Changed parameter management in theorem generation for long goal
  7240 statements with 'includes'.  INCOMPATIBILITY: produces a different
  7241 theorem statement in rare situations.
  7242 
  7243 * Locale inspection command 'print_locale' omits notes elements.  Use
  7244 'print_locale!' to have them included in the output.
  7245 
  7246 
  7247 *** Provers ***
  7248 
  7249 * Provers/hypsubst.ML: improved version of the subst method, for
  7250 single-step rewriting: it now works in bound variable contexts. New is
  7251 'subst (asm)', for rewriting an assumption.  INCOMPATIBILITY: may
  7252 rewrite a different subterm than the original subst method, which is
  7253 still available as 'simplesubst'.
  7254 
  7255 * Provers/quasi.ML: new transitivity reasoners for transitivity only
  7256 and quasi orders.
  7257 
  7258 * Provers/trancl.ML: new transitivity reasoner for transitive and
  7259 reflexive-transitive closure of relations.
  7260 
  7261 * Provers/blast.ML: new reference depth_limit to make blast's depth
  7262 limit (previously hard-coded with a value of 20) user-definable.
  7263 
  7264 * Provers/simplifier.ML has been moved to Pure, where Simplifier.setup
  7265 is peformed already.  Object-logics merely need to finish their
  7266 initial simpset configuration as before.  INCOMPATIBILITY.
  7267 
  7268 
  7269 *** HOL ***
  7270 
  7271 * Symbolic syntax of Hilbert Choice Operator is now as follows:
  7272 
  7273   syntax (epsilon)
  7274     "_Eps" :: "[pttrn, bool] => 'a"    ("(3\<some>_./ _)" [0, 10] 10)
  7275 
  7276 The symbol \<some> is displayed as the alternative epsilon of LaTeX
  7277 and x-symbol; use option '-m epsilon' to get it actually printed.
  7278 Moreover, the mathematically important symbolic identifier \<epsilon>
  7279 becomes available as variable, constant etc.  INCOMPATIBILITY,
  7280 
  7281 * "x > y" abbreviates "y < x" and "x >= y" abbreviates "y <= x".
  7282 Similarly for all quantifiers: "ALL x > y" etc.  The x-symbol for >=
  7283 is \<ge>. New transitivity rules have been added to HOL/Orderings.thy to
  7284 support corresponding Isar calculations.
  7285 
  7286 * "{x:A. P}" abbreviates "{x. x:A & P}", and similarly for "\<in>"
  7287 instead of ":".
  7288 
  7289 * theory SetInterval: changed the syntax for open intervals:
  7290 
  7291   Old       New
  7292   {..n(}    {..<n}
  7293   {)n..}    {n<..}
  7294   {m..n(}   {m..<n}
  7295   {)m..n}   {m<..n}
  7296   {)m..n(}  {m<..<n}
  7297 
  7298 The old syntax is still supported but will disappear in the next
  7299 release.  For conversion use the following Emacs search and replace
  7300 patterns (these are not perfect but work quite well):
  7301 
  7302   {)\([^\.]*\)\.\.  ->  {\1<\.\.}
  7303   \.\.\([^(}]*\)(}  ->  \.\.<\1}
  7304 
  7305 * Theory Commutative_Ring (in Library): method comm_ring for proving
  7306 equalities in commutative rings; method 'algebra' provides a generic
  7307 interface.
  7308 
  7309 * Theory Finite_Set: changed the syntax for 'setsum', summation over
  7310 finite sets: "setsum (%x. e) A", which used to be "\<Sum>x:A. e", is
  7311 now either "SUM x:A. e" or "\<Sum>x \<in> A. e". The bound variable can
  7312 be a tuple pattern.
  7313 
  7314 Some new syntax forms are available:
  7315 
  7316   "\<Sum>x | P. e"      for     "setsum (%x. e) {x. P}"
  7317   "\<Sum>x = a..b. e"   for     "setsum (%x. e) {a..b}"
  7318   "\<Sum>x = a..<b. e"  for     "setsum (%x. e) {a..<b}"
  7319   "\<Sum>x < k. e"      for     "setsum (%x. e) {..<k}"
  7320 
  7321 The latter form "\<Sum>x < k. e" used to be based on a separate
  7322 function "Summation", which has been discontinued.
  7323 
  7324 * theory Finite_Set: in structured induction proofs, the insert case
  7325 is now 'case (insert x F)' instead of the old counterintuitive 'case
  7326 (insert F x)'.
  7327 
  7328 * The 'refute' command has been extended to support a much larger
  7329 fragment of HOL, including axiomatic type classes, constdefs and
  7330 typedefs, inductive datatypes and recursion.
  7331 
  7332 * New tactics 'sat' and 'satx' to prove propositional tautologies.
  7333 Requires zChaff with proof generation to be installed.  See
  7334 HOL/ex/SAT_Examples.thy for examples.
  7335 
  7336 * Datatype induction via method 'induct' now preserves the name of the
  7337 induction variable. For example, when proving P(xs::'a list) by
  7338 induction on xs, the induction step is now P(xs) ==> P(a#xs) rather
  7339 than P(list) ==> P(a#list) as previously.  Potential INCOMPATIBILITY
  7340 in unstructured proof scripts.
  7341 
  7342 * Reworked implementation of records.  Improved scalability for
  7343 records with many fields, avoiding performance problems for type
  7344 inference. Records are no longer composed of nested field types, but
  7345 of nested extension types. Therefore the record type only grows linear
  7346 in the number of extensions and not in the number of fields.  The
  7347 top-level (users) view on records is preserved.  Potential
  7348 INCOMPATIBILITY only in strange cases, where the theory depends on the
  7349 old record representation. The type generated for a record is called
  7350 <record_name>_ext_type.
  7351 
  7352 Flag record_quick_and_dirty_sensitive can be enabled to skip the
  7353 proofs triggered by a record definition or a simproc (if
  7354 quick_and_dirty is enabled).  Definitions of large records can take
  7355 quite long.
  7356 
  7357 New simproc record_upd_simproc for simplification of multiple record
  7358 updates enabled by default.  Moreover, trivial updates are also
  7359 removed: r(|x := x r|) = r.  INCOMPATIBILITY: old proofs break
  7360 occasionally, since simplification is more powerful by default.
  7361 
  7362 * typedef: proper support for polymorphic sets, which contain extra
  7363 type-variables in the term.
  7364 
  7365 * Simplifier: automatically reasons about transitivity chains
  7366 involving "trancl" (r^+) and "rtrancl" (r^*) by setting up tactics
  7367 provided by Provers/trancl.ML as additional solvers.  INCOMPATIBILITY:
  7368 old proofs break occasionally as simplification may now solve more
  7369 goals than previously.
  7370 
  7371 * Simplifier: converts x <= y into x = y if assumption y <= x is
  7372 present.  Works for all partial orders (class "order"), in particular
  7373 numbers and sets.  For linear orders (e.g. numbers) it treats ~ x < y
  7374 just like y <= x.
  7375 
  7376 * Simplifier: new simproc for "let x = a in f x".  If a is a free or
  7377 bound variable or a constant then the let is unfolded.  Otherwise
  7378 first a is simplified to b, and then f b is simplified to g. If
  7379 possible we abstract b from g arriving at "let x = b in h x",
  7380 otherwise we unfold the let and arrive at g.  The simproc can be
  7381 enabled/disabled by the reference use_let_simproc.  Potential
  7382 INCOMPATIBILITY since simplification is more powerful by default.
  7383 
  7384 * Classical reasoning: the meson method now accepts theorems as arguments.
  7385 
  7386 * Prover support: pre-release of the Isabelle-ATP linkup, which runs background
  7387 jobs to provide advice on the provability of subgoals.
  7388 
  7389 * Theory OrderedGroup and Ring_and_Field: various additions and
  7390 improvements to faciliate calculations involving equalities and
  7391 inequalities.
  7392 
  7393 The following theorems have been eliminated or modified
  7394 (INCOMPATIBILITY):
  7395 
  7396   abs_eq             now named abs_of_nonneg
  7397   abs_of_ge_0        now named abs_of_nonneg
  7398   abs_minus_eq       now named abs_of_nonpos
  7399   imp_abs_id         now named abs_of_nonneg
  7400   imp_abs_neg_id     now named abs_of_nonpos
  7401   mult_pos           now named mult_pos_pos
  7402   mult_pos_le        now named mult_nonneg_nonneg
  7403   mult_pos_neg_le    now named mult_nonneg_nonpos
  7404   mult_pos_neg2_le   now named mult_nonneg_nonpos2
  7405   mult_neg           now named mult_neg_neg
  7406   mult_neg_le        now named mult_nonpos_nonpos
  7407 
  7408 * The following lemmas in Ring_and_Field have been added to the simplifier:
  7409      
  7410      zero_le_square
  7411      not_square_less_zero 
  7412 
  7413   The following lemmas have been deleted from Real/RealPow:
  7414   
  7415      realpow_zero_zero
  7416      realpow_two
  7417      realpow_less
  7418      zero_le_power
  7419      realpow_two_le
  7420      abs_realpow_two
  7421      realpow_two_abs     
  7422 
  7423 * Theory Parity: added rules for simplifying exponents.
  7424 
  7425 * Theory List:
  7426 
  7427 The following theorems have been eliminated or modified
  7428 (INCOMPATIBILITY):
  7429 
  7430   list_all_Nil       now named list_all.simps(1)
  7431   list_all_Cons      now named list_all.simps(2)
  7432   list_all_conv      now named list_all_iff
  7433   set_mem_eq         now named mem_iff
  7434 
  7435 * Theories SetsAndFunctions and BigO (see HOL/Library) support
  7436 asymptotic "big O" calculations.  See the notes in BigO.thy.
  7437 
  7438 
  7439 *** HOL-Complex ***
  7440 
  7441 * Theory RealDef: better support for embedding natural numbers and
  7442 integers in the reals.
  7443 
  7444 The following theorems have been eliminated or modified
  7445 (INCOMPATIBILITY):
  7446 
  7447   exp_ge_add_one_self  now requires no hypotheses
  7448   real_of_int_add      reversed direction of equality (use [symmetric])
  7449   real_of_int_minus    reversed direction of equality (use [symmetric])
  7450   real_of_int_diff     reversed direction of equality (use [symmetric])
  7451   real_of_int_mult     reversed direction of equality (use [symmetric])
  7452 
  7453 * Theory RComplete: expanded support for floor and ceiling functions.
  7454 
  7455 * Theory Ln is new, with properties of the natural logarithm
  7456 
  7457 * Hyperreal: There is a new type constructor "star" for making
  7458 nonstandard types.  The old type names are now type synonyms:
  7459 
  7460   hypreal = real star
  7461   hypnat = nat star
  7462   hcomplex = complex star
  7463 
  7464 * Hyperreal: Many groups of similarly-defined constants have been
  7465 replaced by polymorphic versions (INCOMPATIBILITY):
  7466 
  7467   star_of <-- hypreal_of_real, hypnat_of_nat, hcomplex_of_complex
  7468 
  7469   starset      <-- starsetNat, starsetC
  7470   *s*          <-- *sNat*, *sc*
  7471   starset_n    <-- starsetNat_n, starsetC_n
  7472   *sn*         <-- *sNatn*, *scn*
  7473   InternalSets <-- InternalNatSets, InternalCSets
  7474 
  7475   starfun      <-- starfun{Nat,Nat2,C,RC,CR}
  7476   *f*          <-- *fNat*, *fNat2*, *fc*, *fRc*, *fcR*
  7477   starfun_n    <-- starfun{Nat,Nat2,C,RC,CR}_n
  7478   *fn*         <-- *fNatn*, *fNat2n*, *fcn*, *fRcn*, *fcRn*
  7479   InternalFuns <-- InternalNatFuns, InternalNatFuns2, Internal{C,RC,CR}Funs
  7480 
  7481 * Hyperreal: Many type-specific theorems have been removed in favor of
  7482 theorems specific to various axiomatic type classes (INCOMPATIBILITY):
  7483 
  7484   add_commute <-- {hypreal,hypnat,hcomplex}_add_commute
  7485   add_assoc   <-- {hypreal,hypnat,hcomplex}_add_assocs
  7486   OrderedGroup.add_0 <-- {hypreal,hypnat,hcomplex}_add_zero_left
  7487   OrderedGroup.add_0_right <-- {hypreal,hcomplex}_add_zero_right
  7488   right_minus <-- hypreal_add_minus
  7489   left_minus <-- {hypreal,hcomplex}_add_minus_left
  7490   mult_commute <-- {hypreal,hypnat,hcomplex}_mult_commute
  7491   mult_assoc <-- {hypreal,hypnat,hcomplex}_mult_assoc
  7492   mult_1_left <-- {hypreal,hypnat}_mult_1, hcomplex_mult_one_left
  7493   mult_1_right <-- hcomplex_mult_one_right
  7494   mult_zero_left <-- hcomplex_mult_zero_left
  7495   left_distrib <-- {hypreal,hypnat,hcomplex}_add_mult_distrib
  7496   right_distrib <-- hypnat_add_mult_distrib2
  7497   zero_neq_one <-- {hypreal,hypnat,hcomplex}_zero_not_eq_one
  7498   right_inverse <-- hypreal_mult_inverse
  7499   left_inverse <-- hypreal_mult_inverse_left, hcomplex_mult_inv_left
  7500   order_refl <-- {hypreal,hypnat}_le_refl
  7501   order_trans <-- {hypreal,hypnat}_le_trans
  7502   order_antisym <-- {hypreal,hypnat}_le_anti_sym
  7503   order_less_le <-- {hypreal,hypnat}_less_le
  7504   linorder_linear <-- {hypreal,hypnat}_le_linear
  7505   add_left_mono <-- {hypreal,hypnat}_add_left_mono
  7506   mult_strict_left_mono <-- {hypreal,hypnat}_mult_less_mono2
  7507   add_nonneg_nonneg <-- hypreal_le_add_order
  7508 
  7509 * Hyperreal: Separate theorems having to do with type-specific
  7510 versions of constants have been merged into theorems that apply to the
  7511 new polymorphic constants (INCOMPATIBILITY):
  7512 
  7513   STAR_UNIV_set <-- {STAR_real,NatStar_real,STARC_complex}_set
  7514   STAR_empty_set <-- {STAR,NatStar,STARC}_empty_set
  7515   STAR_Un <-- {STAR,NatStar,STARC}_Un
  7516   STAR_Int <-- {STAR,NatStar,STARC}_Int
  7517   STAR_Compl <-- {STAR,NatStar,STARC}_Compl
  7518   STAR_subset <-- {STAR,NatStar,STARC}_subset
  7519   STAR_mem <-- {STAR,NatStar,STARC}_mem
  7520   STAR_mem_Compl <-- {STAR,STARC}_mem_Compl
  7521   STAR_diff <-- {STAR,STARC}_diff
  7522   STAR_star_of_image_subset <-- {STAR_hypreal_of_real, NatStar_hypreal_of_real,
  7523     STARC_hcomplex_of_complex}_image_subset
  7524   starset_n_Un <-- starset{Nat,C}_n_Un
  7525   starset_n_Int <-- starset{Nat,C}_n_Int
  7526   starset_n_Compl <-- starset{Nat,C}_n_Compl
  7527   starset_n_diff <-- starset{Nat,C}_n_diff
  7528   InternalSets_Un <-- Internal{Nat,C}Sets_Un
  7529   InternalSets_Int <-- Internal{Nat,C}Sets_Int
  7530   InternalSets_Compl <-- Internal{Nat,C}Sets_Compl
  7531   InternalSets_diff <-- Internal{Nat,C}Sets_diff
  7532   InternalSets_UNIV_diff <-- Internal{Nat,C}Sets_UNIV_diff
  7533   InternalSets_starset_n <-- Internal{Nat,C}Sets_starset{Nat,C}_n
  7534   starset_starset_n_eq <-- starset{Nat,C}_starset{Nat,C}_n_eq
  7535   starset_n_starset <-- starset{Nat,C}_n_starset{Nat,C}
  7536   starfun_n_starfun <-- starfun{Nat,Nat2,C,RC,CR}_n_starfun{Nat,Nat2,C,RC,CR}
  7537   starfun <-- starfun{Nat,Nat2,C,RC,CR}
  7538   starfun_mult <-- starfun{Nat,Nat2,C,RC,CR}_mult
  7539   starfun_add <-- starfun{Nat,Nat2,C,RC,CR}_add
  7540   starfun_minus <-- starfun{Nat,Nat2,C,RC,CR}_minus
  7541   starfun_diff <-- starfun{C,RC,CR}_diff
  7542   starfun_o <-- starfun{NatNat2,Nat2,_stafunNat,C,C_starfunRC,_starfunCR}_o
  7543   starfun_o2 <-- starfun{NatNat2,_stafunNat,C,C_starfunRC,_starfunCR}_o2
  7544   starfun_const_fun <-- starfun{Nat,Nat2,C,RC,CR}_const_fun
  7545   starfun_inverse <-- starfun{Nat,C,RC,CR}_inverse
  7546   starfun_eq <-- starfun{Nat,Nat2,C,RC,CR}_eq
  7547   starfun_eq_iff <-- starfun{C,RC,CR}_eq_iff
  7548   starfun_Id <-- starfunC_Id
  7549   starfun_approx <-- starfun{Nat,CR}_approx
  7550   starfun_capprox <-- starfun{C,RC}_capprox
  7551   starfun_abs <-- starfunNat_rabs
  7552   starfun_lambda_cancel <-- starfun{C,CR,RC}_lambda_cancel
  7553   starfun_lambda_cancel2 <-- starfun{C,CR,RC}_lambda_cancel2
  7554   starfun_mult_HFinite_approx <-- starfunCR_mult_HFinite_capprox
  7555   starfun_mult_CFinite_capprox <-- starfun{C,RC}_mult_CFinite_capprox
  7556   starfun_add_capprox <-- starfun{C,RC}_add_capprox
  7557   starfun_add_approx <-- starfunCR_add_approx
  7558   starfun_inverse_inverse <-- starfunC_inverse_inverse
  7559   starfun_divide <-- starfun{C,CR,RC}_divide
  7560   starfun_n <-- starfun{Nat,C}_n
  7561   starfun_n_mult <-- starfun{Nat,C}_n_mult
  7562   starfun_n_add <-- starfun{Nat,C}_n_add
  7563   starfun_n_add_minus <-- starfunNat_n_add_minus
  7564   starfun_n_const_fun <-- starfun{Nat,C}_n_const_fun
  7565   starfun_n_minus <-- starfun{Nat,C}_n_minus
  7566   starfun_n_eq <-- starfun{Nat,C}_n_eq
  7567 
  7568   star_n_add <-- {hypreal,hypnat,hcomplex}_add
  7569   star_n_minus <-- {hypreal,hcomplex}_minus
  7570   star_n_diff <-- {hypreal,hcomplex}_diff
  7571   star_n_mult <-- {hypreal,hcomplex}_mult
  7572   star_n_inverse <-- {hypreal,hcomplex}_inverse
  7573   star_n_le <-- {hypreal,hypnat}_le
  7574   star_n_less <-- {hypreal,hypnat}_less
  7575   star_n_zero_num <-- {hypreal,hypnat,hcomplex}_zero_num
  7576   star_n_one_num <-- {hypreal,hypnat,hcomplex}_one_num
  7577   star_n_abs <-- hypreal_hrabs
  7578   star_n_divide <-- hcomplex_divide
  7579 
  7580   star_of_add <-- {hypreal_of_real,hypnat_of_nat,hcomplex_of_complex}_add
  7581   star_of_minus <-- {hypreal_of_real,hcomplex_of_complex}_minus
  7582   star_of_diff <-- hypreal_of_real_diff
  7583   star_of_mult <-- {hypreal_of_real,hypnat_of_nat,hcomplex_of_complex}_mult
  7584   star_of_one <-- {hypreal_of_real,hcomplex_of_complex}_one
  7585   star_of_zero <-- {hypreal_of_real,hypnat_of_nat,hcomplex_of_complex}_zero
  7586   star_of_le <-- {hypreal_of_real,hypnat_of_nat}_le_iff
  7587   star_of_less <-- {hypreal_of_real,hypnat_of_nat}_less_iff
  7588   star_of_eq <-- {hypreal_of_real,hypnat_of_nat,hcomplex_of_complex}_eq_iff
  7589   star_of_inverse <-- {hypreal_of_real,hcomplex_of_complex}_inverse
  7590   star_of_divide <-- {hypreal_of_real,hcomplex_of_complex}_divide
  7591   star_of_of_nat <-- {hypreal_of_real,hcomplex_of_complex}_of_nat
  7592   star_of_of_int <-- {hypreal_of_real,hcomplex_of_complex}_of_int
  7593   star_of_number_of <-- {hypreal,hcomplex}_number_of
  7594   star_of_number_less <-- number_of_less_hypreal_of_real_iff
  7595   star_of_number_le <-- number_of_le_hypreal_of_real_iff
  7596   star_of_eq_number <-- hypreal_of_real_eq_number_of_iff
  7597   star_of_less_number <-- hypreal_of_real_less_number_of_iff
  7598   star_of_le_number <-- hypreal_of_real_le_number_of_iff
  7599   star_of_power <-- hypreal_of_real_power
  7600   star_of_eq_0 <-- hcomplex_of_complex_zero_iff
  7601 
  7602 * Hyperreal: new method "transfer" that implements the transfer
  7603 principle of nonstandard analysis. With a subgoal that mentions
  7604 nonstandard types like "'a star", the command "apply transfer"
  7605 replaces it with an equivalent one that mentions only standard types.
  7606 To be successful, all free variables must have standard types; non-
  7607 standard variables must have explicit universal quantifiers.
  7608 
  7609 * Hyperreal: A theory of Taylor series.
  7610 
  7611 
  7612 *** HOLCF ***
  7613 
  7614 * Discontinued special version of 'constdefs' (which used to support
  7615 continuous functions) in favor of the general Pure one with full
  7616 type-inference.
  7617 
  7618 * New simplification procedure for solving continuity conditions; it
  7619 is much faster on terms with many nested lambda abstractions (cubic
  7620 instead of exponential time).
  7621 
  7622 * New syntax for domain package: selector names are now optional.
  7623 Parentheses should be omitted unless argument is lazy, for example:
  7624 
  7625   domain 'a stream = cons "'a" (lazy "'a stream")
  7626 
  7627 * New command 'fixrec' for defining recursive functions with pattern
  7628 matching; defining multiple functions with mutual recursion is also
  7629 supported.  Patterns may include the constants cpair, spair, up, sinl,
  7630 sinr, or any data constructor defined by the domain package. The given
  7631 equations are proven as rewrite rules. See HOLCF/ex/Fixrec_ex.thy for
  7632 syntax and examples.
  7633 
  7634 * New commands 'cpodef' and 'pcpodef' for defining predicate subtypes
  7635 of cpo and pcpo types. Syntax is exactly like the 'typedef' command,
  7636 but the proof obligation additionally includes an admissibility
  7637 requirement. The packages generate instances of class cpo or pcpo,
  7638 with continuity and strictness theorems for Rep and Abs.
  7639 
  7640 * HOLCF: Many theorems have been renamed according to a more standard naming
  7641 scheme (INCOMPATIBILITY):
  7642 
  7643   foo_inject:  "foo$x = foo$y ==> x = y"
  7644   foo_eq:      "(foo$x = foo$y) = (x = y)"
  7645   foo_less:    "(foo$x << foo$y) = (x << y)"
  7646   foo_strict:  "foo$UU = UU"
  7647   foo_defined: "... ==> foo$x ~= UU"
  7648   foo_defined_iff: "(foo$x = UU) = (x = UU)"
  7649 
  7650 
  7651 *** ZF ***
  7652 
  7653 * ZF/ex: theories Group and Ring provide examples in abstract algebra,
  7654 including the First Isomorphism Theorem (on quotienting by the kernel
  7655 of a homomorphism).
  7656 
  7657 * ZF/Simplifier: install second copy of type solver that actually
  7658 makes use of TC rules declared to Isar proof contexts (or locales);
  7659 the old version is still required for ML proof scripts.
  7660 
  7661 
  7662 *** Cube ***
  7663 
  7664 * Converted to Isar theory format; use locales instead of axiomatic
  7665 theories.
  7666 
  7667 
  7668 *** ML ***
  7669 
  7670 * Pure/library.ML: added ##>, ##>>, #>> -- higher-order counterparts
  7671 for ||>, ||>>, |>>,
  7672 
  7673 * Pure/library.ML no longer defines its own option datatype, but uses
  7674 that of the SML basis, which has constructors NONE and SOME instead of
  7675 None and Some, as well as exception Option.Option instead of OPTION.
  7676 The functions the, if_none, is_some, is_none have been adapted
  7677 accordingly, while Option.map replaces apsome.
  7678 
  7679 * Pure/library.ML: the exception LIST has been given up in favour of
  7680 the standard exceptions Empty and Subscript, as well as
  7681 Library.UnequalLengths.  Function like Library.hd and Library.tl are
  7682 superceded by the standard hd and tl functions etc.
  7683 
  7684 A number of basic list functions are no longer exported to the ML
  7685 toplevel, as they are variants of predefined functions.  The following
  7686 suggests how one can translate existing code:
  7687 
  7688     rev_append xs ys = List.revAppend (xs, ys)
  7689     nth_elem (i, xs) = List.nth (xs, i)
  7690     last_elem xs = List.last xs
  7691     flat xss = List.concat xss
  7692     seq fs = List.app fs
  7693     partition P xs = List.partition P xs
  7694     mapfilter f xs = List.mapPartial f xs
  7695 
  7696 * Pure/library.ML: several combinators for linear functional
  7697 transformations, notably reverse application and composition:
  7698 
  7699   x |> f                f #> g
  7700   (x, y) |-> f          f #-> g
  7701 
  7702 * Pure/library.ML: introduced/changed precedence of infix operators:
  7703 
  7704   infix 1 |> |-> ||> ||>> |>> |>>> #> #->;
  7705   infix 2 ?;
  7706   infix 3 o oo ooo oooo;
  7707   infix 4 ~~ upto downto;
  7708 
  7709 Maybe INCOMPATIBILITY when any of those is used in conjunction with other
  7710 infix operators.
  7711 
  7712 * Pure/library.ML: natural list combinators fold, fold_rev, and
  7713 fold_map support linear functional transformations and nesting.  For
  7714 example:
  7715 
  7716   fold f [x1, ..., xN] y =
  7717     y |> f x1 |> ... |> f xN
  7718 
  7719   (fold o fold) f [xs1, ..., xsN] y =
  7720     y |> fold f xs1 |> ... |> fold f xsN
  7721 
  7722   fold f [x1, ..., xN] =
  7723     f x1 #> ... #> f xN
  7724 
  7725   (fold o fold) f [xs1, ..., xsN] =
  7726     fold f xs1 #> ... #> fold f xsN
  7727 
  7728 * Pure/library.ML: the following selectors on type 'a option are
  7729 available:
  7730 
  7731   the:               'a option -> 'a  (*partial*)
  7732   these:             'a option -> 'a  where 'a = 'b list
  7733   the_default: 'a -> 'a option -> 'a
  7734   the_list:          'a option -> 'a list
  7735 
  7736 * Pure/General: structure AList (cf. Pure/General/alist.ML) provides
  7737 basic operations for association lists, following natural argument
  7738 order; moreover the explicit equality predicate passed here avoids
  7739 potentially expensive polymorphic runtime equality checks.
  7740 The old functions may be expressed as follows:
  7741 
  7742   assoc = uncurry (AList.lookup (op =))
  7743   assocs = these oo AList.lookup (op =)
  7744   overwrite = uncurry (AList.update (op =)) o swap
  7745 
  7746 * Pure/General: structure AList (cf. Pure/General/alist.ML) provides
  7747 
  7748   val make: ('a -> 'b) -> 'a list -> ('a * 'b) list
  7749   val find: ('a * 'b -> bool) -> ('c * 'b) list -> 'a -> 'c list
  7750 
  7751 replacing make_keylist and keyfilter (occassionally used)
  7752 Naive rewrites:
  7753 
  7754   make_keylist = AList.make
  7755   keyfilter = AList.find (op =)
  7756 
  7757 * eq_fst and eq_snd now take explicit equality parameter, thus
  7758   avoiding eqtypes. Naive rewrites:
  7759 
  7760     eq_fst = eq_fst (op =)
  7761     eq_snd = eq_snd (op =)
  7762 
  7763 * Removed deprecated apl and apr (rarely used).
  7764   Naive rewrites:
  7765 
  7766     apl (n, op) =>>= curry op n
  7767     apr (op, m) =>>= fn n => op (n, m)
  7768 
  7769 * Pure/General: structure OrdList (cf. Pure/General/ord_list.ML)
  7770 provides a reasonably efficient light-weight implementation of sets as
  7771 lists.
  7772 
  7773 * Pure/General: generic tables (cf. Pure/General/table.ML) provide a
  7774 few new operations; existing lookup and update are now curried to
  7775 follow natural argument order (for use with fold etc.);
  7776 INCOMPATIBILITY, use (uncurry Symtab.lookup) etc. as last resort.
  7777 
  7778 * Pure/General: output via the Isabelle channels of
  7779 writeln/warning/error etc. is now passed through Output.output, with a
  7780 hook for arbitrary transformations depending on the print_mode
  7781 (cf. Output.add_mode -- the first active mode that provides a output
  7782 function wins).  Already formatted output may be embedded into further
  7783 text via Output.raw; the result of Pretty.string_of/str_of and derived
  7784 functions (string_of_term/cterm/thm etc.) is already marked raw to
  7785 accommodate easy composition of diagnostic messages etc.  Programmers
  7786 rarely need to care about Output.output or Output.raw at all, with
  7787 some notable exceptions: Output.output is required when bypassing the
  7788 standard channels (writeln etc.), or in token translations to produce
  7789 properly formatted results; Output.raw is required when capturing
  7790 already output material that will eventually be presented to the user
  7791 a second time.  For the default print mode, both Output.output and
  7792 Output.raw have no effect.
  7793 
  7794 * Pure/General: Output.time_accumulator NAME creates an operator ('a
  7795 -> 'b) -> 'a -> 'b to measure runtime and count invocations; the
  7796 cumulative results are displayed at the end of a batch session.
  7797 
  7798 * Pure/General: File.sysify_path and File.quote_sysify path have been
  7799 replaced by File.platform_path and File.shell_path (with appropriate
  7800 hooks).  This provides a clean interface for unusual systems where the
  7801 internal and external process view of file names are different.
  7802 
  7803 * Pure: more efficient orders for basic syntactic entities: added
  7804 fast_string_ord, fast_indexname_ord, fast_term_ord; changed sort_ord
  7805 and typ_ord to use fast_string_ord and fast_indexname_ord (term_ord is
  7806 NOT affected); structures Symtab, Vartab, Typtab, Termtab use the fast
  7807 orders now -- potential INCOMPATIBILITY for code that depends on a
  7808 particular order for Symtab.keys, Symtab.dest, etc. (consider using
  7809 Library.sort_strings on result).
  7810 
  7811 * Pure/term.ML: combinators fold_atyps, fold_aterms, fold_term_types,
  7812 fold_types traverse types/terms from left to right, observing natural
  7813 argument order.  Supercedes previous foldl_XXX versions, add_frees,
  7814 add_vars etc. have been adapted as well: INCOMPATIBILITY.
  7815 
  7816 * Pure: name spaces have been refined, with significant changes of the
  7817 internal interfaces -- INCOMPATIBILITY.  Renamed cond_extern(_table)
  7818 to extern(_table).  The plain name entry path is superceded by a
  7819 general 'naming' context, which also includes the 'policy' to produce
  7820 a fully qualified name and external accesses of a fully qualified
  7821 name; NameSpace.extend is superceded by context dependent
  7822 Sign.declare_name.  Several theory and proof context operations modify
  7823 the naming context.  Especially note Theory.restore_naming and
  7824 ProofContext.restore_naming to get back to a sane state; note that
  7825 Theory.add_path is no longer sufficient to recover from
  7826 Theory.absolute_path in particular.
  7827 
  7828 * Pure: new flags short_names (default false) and unique_names
  7829 (default true) for controlling output of qualified names.  If
  7830 short_names is set, names are printed unqualified.  If unique_names is
  7831 reset, the name prefix is reduced to the minimum required to achieve
  7832 the original result when interning again, even if there is an overlap
  7833 with earlier declarations.
  7834 
  7835 * Pure/TheoryDataFun: change of the argument structure; 'prep_ext' is
  7836 now 'extend', and 'merge' gets an additional Pretty.pp argument
  7837 (useful for printing error messages).  INCOMPATIBILITY.
  7838 
  7839 * Pure: major reorganization of the theory context.  Type Sign.sg and
  7840 Theory.theory are now identified, referring to the universal
  7841 Context.theory (see Pure/context.ML).  Actual signature and theory
  7842 content is managed as theory data.  The old code and interfaces were
  7843 spread over many files and structures; the new arrangement introduces
  7844 considerable INCOMPATIBILITY to gain more clarity:
  7845 
  7846   Context -- theory management operations (name, identity, inclusion,
  7847     parents, ancestors, merge, etc.), plus generic theory data;
  7848 
  7849   Sign -- logical signature and syntax operations (declaring consts,
  7850     types, etc.), plus certify/read for common entities;
  7851 
  7852   Theory -- logical theory operations (stating axioms, definitions,
  7853     oracles), plus a copy of logical signature operations (consts,
  7854     types, etc.); also a few basic management operations (Theory.copy,
  7855     Theory.merge, etc.)
  7856 
  7857 The most basic sign_of operations (Theory.sign_of, Thm.sign_of_thm
  7858 etc.) as well as the sign field in Thm.rep_thm etc. have been retained
  7859 for convenience -- they merely return the theory.
  7860 
  7861 * Pure: type Type.tsig is superceded by theory in most interfaces.
  7862 
  7863 * Pure: the Isar proof context type is already defined early in Pure
  7864 as Context.proof (note that ProofContext.context and Proof.context are
  7865 aliases, where the latter is the preferred name).  This enables other
  7866 Isabelle components to refer to that type even before Isar is present.
  7867 
  7868 * Pure/sign/theory: discontinued named name spaces (i.e. classK,
  7869 typeK, constK, axiomK, oracleK), but provide explicit operations for
  7870 any of these kinds.  For example, Sign.intern typeK is now
  7871 Sign.intern_type, Theory.hide_space Sign.typeK is now
  7872 Theory.hide_types.  Also note that former
  7873 Theory.hide_classes/types/consts are now
  7874 Theory.hide_classes_i/types_i/consts_i, while the non '_i' versions
  7875 internalize their arguments!  INCOMPATIBILITY.
  7876 
  7877 * Pure: get_thm interface (of PureThy and ProofContext) expects
  7878 datatype thmref (with constructors Name and NameSelection) instead of
  7879 plain string -- INCOMPATIBILITY;
  7880 
  7881 * Pure: cases produced by proof methods specify options, where NONE
  7882 means to remove case bindings -- INCOMPATIBILITY in
  7883 (RAW_)METHOD_CASES.
  7884 
  7885 * Pure: the following operations retrieve axioms or theorems from a
  7886 theory node or theory hierarchy, respectively:
  7887 
  7888   Theory.axioms_of: theory -> (string * term) list
  7889   Theory.all_axioms_of: theory -> (string * term) list
  7890   PureThy.thms_of: theory -> (string * thm) list
  7891   PureThy.all_thms_of: theory -> (string * thm) list
  7892 
  7893 * Pure: print_tac now outputs the goal through the trace channel.
  7894 
  7895 * Isar toplevel: improved diagnostics, mostly for Poly/ML only.
  7896 Reference Toplevel.debug (default false) controls detailed printing
  7897 and tracing of low-level exceptions; Toplevel.profiling (default 0)
  7898 controls execution profiling -- set to 1 for time and 2 for space
  7899 (both increase the runtime).
  7900 
  7901 * Isar session: The initial use of ROOT.ML is now always timed,
  7902 i.e. the log will show the actual process times, in contrast to the
  7903 elapsed wall-clock time that the outer shell wrapper produces.
  7904 
  7905 * Simplifier: improved handling of bound variables (nameless
  7906 representation, avoid allocating new strings).  Simprocs that invoke
  7907 the Simplifier recursively should use Simplifier.inherit_bounds to
  7908 avoid local name clashes.  Failure to do so produces warnings
  7909 "Simplifier: renamed bound variable ..."; set Simplifier.debug_bounds
  7910 for further details.
  7911 
  7912 * ML functions legacy_bindings and use_legacy_bindings produce ML fact
  7913 bindings for all theorems stored within a given theory; this may help
  7914 in porting non-Isar theories to Isar ones, while keeping ML proof
  7915 scripts for the time being.
  7916 
  7917 * ML operator HTML.with_charset specifies the charset begin used for
  7918 generated HTML files.  For example:
  7919 
  7920   HTML.with_charset "utf-8" use_thy "Hebrew";
  7921   HTML.with_charset "utf-8" use_thy "Chinese";
  7922 
  7923 
  7924 *** System ***
  7925 
  7926 * Allow symlinks to all proper Isabelle executables (Isabelle,
  7927 isabelle, isatool etc.).
  7928 
  7929 * ISABELLE_DOC_FORMAT setting specifies preferred document format (for
  7930 isatool doc, isatool mkdir, display_drafts etc.).
  7931 
  7932 * isatool usedir: option -f allows specification of the ML file to be
  7933 used by Isabelle; default is ROOT.ML.
  7934 
  7935 * New isatool version outputs the version identifier of the Isabelle
  7936 distribution being used.
  7937 
  7938 * HOL: new isatool dimacs2hol converts files in DIMACS CNF format
  7939 (containing Boolean satisfiability problems) into Isabelle/HOL
  7940 theories.
  7941 
  7942 
  7943 
  7944 New in Isabelle2004 (April 2004)
  7945 --------------------------------
  7946 
  7947 *** General ***
  7948 
  7949 * Provers/order.ML:  new efficient reasoner for partial and linear orders.
  7950   Replaces linorder.ML.
  7951 
  7952 * Pure: Greek letters (except small lambda, \<lambda>), as well as Gothic
  7953   (\<aa>...\<zz>\<AA>...\<ZZ>), calligraphic (\<A>...\<Z>), and Euler
  7954   (\<a>...\<z>), are now considered normal letters, and can therefore
  7955   be used anywhere where an ASCII letter (a...zA...Z) has until
  7956   now. COMPATIBILITY: This obviously changes the parsing of some
  7957   terms, especially where a symbol has been used as a binder, say
  7958   '\<Pi>x. ...', which is now a type error since \<Pi>x will be parsed
  7959   as an identifier.  Fix it by inserting a space around former
  7960   symbols.  Call 'isatool fixgreek' to try to fix parsing errors in
  7961   existing theory and ML files.
  7962 
  7963 * Pure: Macintosh and Windows line-breaks are now allowed in theory files.
  7964 
  7965 * Pure: single letter sub/superscripts (\<^isub> and \<^isup>) are now
  7966   allowed in identifiers. Similar to Greek letters \<^isub> is now considered
  7967   a normal (but invisible) letter. For multiple letter subscripts repeat
  7968   \<^isub> like this: x\<^isub>1\<^isub>2.
  7969 
  7970 * Pure: There are now sub-/superscripts that can span more than one
  7971   character. Text between \<^bsub> and \<^esub> is set in subscript in
  7972   ProofGeneral and LaTeX, text between \<^bsup> and \<^esup> in
  7973   superscript. The new control characters are not identifier parts.
  7974 
  7975 * Pure: Control-symbols of the form \<^raw:...> will literally print the
  7976   content of "..." to the latex file instead of \isacntrl... . The "..."
  7977   may consist of any printable characters excluding the end bracket >.
  7978 
  7979 * Pure: Using new Isar command "finalconsts" (or the ML functions
  7980   Theory.add_finals or Theory.add_finals_i) it is now possible to
  7981   declare constants "final", which prevents their being given a definition
  7982   later.  It is useful for constants whose behaviour is fixed axiomatically
  7983   rather than definitionally, such as the meta-logic connectives.
  7984 
  7985 * Pure: 'instance' now handles general arities with general sorts
  7986   (i.e. intersections of classes),
  7987 
  7988 * Presentation: generated HTML now uses a CSS style sheet to make layout
  7989   (somewhat) independent of content. It is copied from lib/html/isabelle.css.
  7990   It can be changed to alter the colors/layout of generated pages.
  7991 
  7992 
  7993 *** Isar ***
  7994 
  7995 * Tactic emulation methods rule_tac, erule_tac, drule_tac, frule_tac,
  7996   cut_tac, subgoal_tac and thin_tac:
  7997   - Now understand static (Isar) contexts.  As a consequence, users of Isar
  7998     locales are no longer forced to write Isar proof scripts.
  7999     For details see Isar Reference Manual, paragraph 4.3.2: Further tactic
  8000     emulations.
  8001   - INCOMPATIBILITY: names of variables to be instantiated may no
  8002     longer be enclosed in quotes.  Instead, precede variable name with `?'.
  8003     This is consistent with the instantiation attribute "where".
  8004 
  8005 * Attributes "where" and "of":
  8006   - Now take type variables of instantiated theorem into account when reading
  8007     the instantiation string.  This fixes a bug that caused instantiated
  8008     theorems to have too special types in some circumstances.
  8009   - "where" permits explicit instantiations of type variables.
  8010 
  8011 * Calculation commands "moreover" and "also" no longer interfere with
  8012   current facts ("this"), admitting arbitrary combinations with "then"
  8013   and derived forms.
  8014 
  8015 * Locales:
  8016   - Goal statements involving the context element "includes" no longer
  8017     generate theorems with internal delta predicates (those ending on
  8018     "_axioms") in the premise.
  8019     Resolve particular premise with <locale>.intro to obtain old form.
  8020   - Fixed bug in type inference ("unify_frozen") that prevented mix of target
  8021     specification and "includes" elements in goal statement.
  8022   - Rule sets <locale>.intro and <locale>.axioms no longer declared as
  8023     [intro?] and [elim?] (respectively) by default.
  8024   - Experimental command for instantiation of locales in proof contexts:
  8025         instantiate <label>[<attrs>]: <loc>
  8026     Instantiates locale <loc> and adds all its theorems to the current context
  8027     taking into account their attributes.  Label and attrs are optional
  8028     modifiers, like in theorem declarations.  If present, names of
  8029     instantiated theorems are qualified with <label>, and the attributes
  8030     <attrs> are applied after any attributes these theorems might have already.
  8031       If the locale has assumptions, a chained fact of the form
  8032     "<loc> t1 ... tn" is expected from which instantiations of the parameters
  8033     are derived.  The command does not support old-style locales declared
  8034     with "locale (open)".
  8035       A few (very simple) examples can be found in FOL/ex/LocaleInst.thy.
  8036 
  8037 * HOL: Tactic emulation methods induct_tac and case_tac understand static
  8038   (Isar) contexts.
  8039 
  8040 
  8041 *** HOL ***
  8042 
  8043 * Proof import: new image HOL4 contains the imported library from
  8044   the HOL4 system with about 2500 theorems. It is imported by
  8045   replaying proof terms produced by HOL4 in Isabelle. The HOL4 image
  8046   can be used like any other Isabelle image.  See
  8047   HOL/Import/HOL/README for more information.
  8048 
  8049 * Simplifier:
  8050   - Much improved handling of linear and partial orders.
  8051     Reasoners for linear and partial orders are set up for type classes
  8052     "linorder" and "order" respectively, and are added to the default simpset
  8053     as solvers.  This means that the simplifier can build transitivity chains
  8054     to solve goals from the assumptions.
  8055   - INCOMPATIBILITY: old proofs break occasionally.  Typically, applications
  8056     of blast or auto after simplification become unnecessary because the goal
  8057     is solved by simplification already.
  8058 
  8059 * Numerics: new theory Ring_and_Field contains over 250 basic numerical laws,
  8060     all proved in axiomatic type classes for semirings, rings and fields.
  8061 
  8062 * Numerics:
  8063   - Numeric types (nat, int, and in HOL-Complex rat, real, complex, etc.) are
  8064     now formalized using the Ring_and_Field theory mentioned above.
  8065   - INCOMPATIBILITY: simplification and arithmetic behaves somewhat differently
  8066     than before, because now they are set up once in a generic manner.
  8067   - INCOMPATIBILITY: many type-specific arithmetic laws have gone.
  8068     Look for the general versions in Ring_and_Field (and Power if they concern
  8069     exponentiation).
  8070 
  8071 * Type "rat" of the rational numbers is now available in HOL-Complex.
  8072 
  8073 * Records:
  8074   - Record types are now by default printed with their type abbreviation
  8075     instead of the list of all field types. This can be configured via
  8076     the reference "print_record_type_abbr".
  8077   - Simproc "record_upd_simproc" for simplification of multiple updates added
  8078     (not enabled by default).
  8079   - Simproc "record_ex_sel_eq_simproc" to simplify EX x. sel r = x resp.
  8080     EX x. x = sel r to True (not enabled by default).
  8081   - Tactic "record_split_simp_tac" to split and simplify records added.
  8082 
  8083 * 'specification' command added, allowing for definition by
  8084   specification.  There is also an 'ax_specification' command that
  8085   introduces the new constants axiomatically.
  8086 
  8087 * arith(_tac) is now able to generate counterexamples for reals as well.
  8088 
  8089 * HOL-Algebra: new locale "ring" for non-commutative rings.
  8090 
  8091 * HOL-ex: InductiveInvariant_examples illustrates advanced recursive function
  8092   definitions, thanks to Sava Krsti\'{c} and John Matthews.
  8093 
  8094 * HOL-Matrix: a first theory for matrices in HOL with an application of
  8095   matrix theory to linear programming.
  8096 
  8097 * Unions and Intersections:
  8098   The latex output syntax of UN and INT has been changed
  8099   from "\Union x \in A. B" to "\Union_{x \in A} B"
  8100   i.e. the index formulae has become a subscript.
  8101   Similarly for "\Union x. B", and for \Inter instead of \Union.
  8102 
  8103 * Unions and Intersections over Intervals:
  8104   There is new short syntax "UN i<=n. A" for "UN i:{0..n}. A". There is
  8105   also an x-symbol version with subscripts "\<Union>\<^bsub>i <= n\<^esub>. A"
  8106   like in normal math, and corresponding versions for < and for intersection.
  8107 
  8108 * HOL/List: Ordering "lexico" is renamed "lenlex" and the standard
  8109   lexicographic dictonary ordering has been added as "lexord".
  8110 
  8111 * ML: the legacy theory structures Int and List have been removed. They had
  8112   conflicted with ML Basis Library structures having the same names.
  8113 
  8114 * 'refute' command added to search for (finite) countermodels.  Only works
  8115   for a fragment of HOL.  The installation of an external SAT solver is
  8116   highly recommended.  See "HOL/Refute.thy" for details.
  8117 
  8118 * 'quickcheck' command: Allows to find counterexamples by evaluating
  8119   formulae under an assignment of free variables to random values.
  8120   In contrast to 'refute', it can deal with inductive datatypes,
  8121   but cannot handle quantifiers. See "HOL/ex/Quickcheck_Examples.thy"
  8122   for examples.
  8123 
  8124 
  8125 *** HOLCF ***
  8126 
  8127 * Streams now come with concatenation and are part of the HOLCF image
  8128 
  8129 
  8130 
  8131 New in Isabelle2003 (May 2003)
  8132 ------------------------------
  8133 
  8134 *** General ***
  8135 
  8136 * Provers/simplifier:
  8137 
  8138   - Completely reimplemented method simp (ML: Asm_full_simp_tac):
  8139     Assumptions are now subject to complete mutual simplification,
  8140     not just from left to right. The simplifier now preserves
  8141     the order of assumptions.
  8142 
  8143     Potential INCOMPATIBILITY:
  8144 
  8145     -- simp sometimes diverges where the old version did
  8146        not, e.g. invoking simp on the goal
  8147 
  8148         [| P (f x); y = x; f x = f y |] ==> Q
  8149 
  8150        now gives rise to the infinite reduction sequence
  8151 
  8152         P(f x) --(f x = f y)--> P(f y) --(y = x)--> P(f x) --(f x = f y)--> ...
  8153 
  8154        Using "simp (asm_lr)" (ML: Asm_lr_simp_tac) instead often solves this
  8155        kind of problem.
  8156 
  8157     -- Tactics combining classical reasoner and simplification (such as auto)
  8158        are also affected by this change, because many of them rely on
  8159        simp. They may sometimes diverge as well or yield a different numbers
  8160        of subgoals. Try to use e.g. force, fastsimp, or safe instead of auto
  8161        in case of problems. Sometimes subsequent calls to the classical
  8162        reasoner will fail because a preceeding call to the simplifier too
  8163        eagerly simplified the goal, e.g. deleted redundant premises.
  8164 
  8165   - The simplifier trace now shows the names of the applied rewrite rules
  8166 
  8167   - You can limit the number of recursive invocations of the simplifier
  8168     during conditional rewriting (where the simplifie tries to solve the
  8169     conditions before applying the rewrite rule):
  8170     ML "simp_depth_limit := n"
  8171     where n is an integer. Thus you can force termination where previously
  8172     the simplifier would diverge.
  8173 
  8174   - Accepts free variables as head terms in congruence rules.  Useful in Isar.
  8175 
  8176   - No longer aborts on failed congruence proof.  Instead, the
  8177     congruence is ignored.
  8178 
  8179 * Pure: New generic framework for extracting programs from constructive
  8180   proofs. See HOL/Extraction.thy for an example instantiation, as well
  8181   as HOL/Extraction for some case studies.
  8182 
  8183 * Pure: The main goal of the proof state is no longer shown by default, only
  8184 the subgoals. This behaviour is controlled by a new flag.
  8185    PG menu: Isabelle/Isar -> Settings -> Show Main Goal
  8186 (ML: Proof.show_main_goal).
  8187 
  8188 * Pure: You can find all matching introduction rules for subgoal 1, i.e. all
  8189 rules whose conclusion matches subgoal 1:
  8190       PG menu: Isabelle/Isar -> Show me -> matching rules
  8191 The rules are ordered by how closely they match the subgoal.
  8192 In particular, rules that solve a subgoal outright are displayed first
  8193 (or rather last, the way they are printed).
  8194 (ML: ProofGeneral.print_intros())
  8195 
  8196 * Pure: New flag trace_unify_fail causes unification to print
  8197 diagnostic information (PG: in trace buffer) when it fails. This is
  8198 useful for figuring out why single step proofs like rule, erule or
  8199 assumption failed.
  8200 
  8201 * Pure: Locale specifications now produce predicate definitions
  8202 according to the body of text (covering assumptions modulo local
  8203 definitions); predicate "loc_axioms" covers newly introduced text,
  8204 while "loc" is cumulative wrt. all included locale expressions; the
  8205 latter view is presented only on export into the global theory
  8206 context; potential INCOMPATIBILITY, use "(open)" option to fall back
  8207 on the old view without predicates;
  8208 
  8209 * Pure: predefined locales "var" and "struct" are useful for sharing
  8210 parameters (as in CASL, for example); just specify something like
  8211 ``var x + var y + struct M'' as import;
  8212 
  8213 * Pure: improved thms_containing: proper indexing of facts instead of
  8214 raw theorems; check validity of results wrt. current name space;
  8215 include local facts of proof configuration (also covers active
  8216 locales), cover fixed variables in index; may use "_" in term
  8217 specification; an optional limit for the number of printed facts may
  8218 be given (the default is 40);
  8219 
  8220 * Pure: disallow duplicate fact bindings within new-style theory files
  8221 (batch-mode only);
  8222 
  8223 * Provers: improved induct method: assumptions introduced by case
  8224 "foo" are split into "foo.hyps" (from the rule) and "foo.prems" (from
  8225 the goal statement); "foo" still refers to all facts collectively;
  8226 
  8227 * Provers: the function blast.overloaded has been removed: all constants
  8228 are regarded as potentially overloaded, which improves robustness in exchange
  8229 for slight decrease in efficiency;
  8230 
  8231 * Provers/linorder: New generic prover for transitivity reasoning over
  8232 linear orders.  Note: this prover is not efficient!
  8233 
  8234 * Isar: preview of problems to finish 'show' now produce an error
  8235 rather than just a warning (in interactive mode);
  8236 
  8237 
  8238 *** HOL ***
  8239 
  8240 * arith(_tac)
  8241 
  8242  - Produces a counter example if it cannot prove a goal.
  8243    Note that the counter example may be spurious if the goal is not a formula
  8244    of quantifier-free linear arithmetic.
  8245    In ProofGeneral the counter example appears in the trace buffer.
  8246 
  8247  - Knows about div k and mod k where k is a numeral of type nat or int.
  8248 
  8249  - Calls full Presburger arithmetic (by Amine Chaieb) if quantifier-free
  8250    linear arithmetic fails. This takes account of quantifiers and divisibility.
  8251    Presburger arithmetic can also be called explicitly via presburger(_tac).
  8252 
  8253 * simp's arithmetic capabilities have been enhanced a bit: it now
  8254 takes ~= in premises into account (by performing a case split);
  8255 
  8256 * simp reduces "m*(n div m) + n mod m" to n, even if the two summands
  8257 are distributed over a sum of terms;
  8258 
  8259 * New tactic "trans_tac" and method "trans" instantiate
  8260 Provers/linorder.ML for axclasses "order" and "linorder" (predicates
  8261 "<=", "<" and "=").
  8262 
  8263 * function INCOMPATIBILITIES: Pi-sets have been redefined and moved from main
  8264 HOL to Library/FuncSet; constant "Fun.op o" is now called "Fun.comp";
  8265 
  8266 * 'typedef' command has new option "open" to suppress the set
  8267 definition;
  8268 
  8269 * functions Min and Max on finite sets have been introduced (theory
  8270 Finite_Set);
  8271 
  8272 * attribute [symmetric] now works for relations as well; it turns
  8273 (x,y) : R^-1 into (y,x) : R, and vice versa;
  8274 
  8275 * induct over a !!-quantified statement (say !!x1..xn):
  8276   each "case" automatically performs "fix x1 .. xn" with exactly those names.
  8277 
  8278 * Map: `empty' is no longer a constant but a syntactic abbreviation for
  8279 %x. None. Warning: empty_def now refers to the previously hidden definition
  8280 of the empty set.
  8281 
  8282 * Algebra: formalization of classical algebra.  Intended as base for
  8283 any algebraic development in Isabelle.  Currently covers group theory
  8284 (up to Sylow's theorem) and ring theory (Universal Property of
  8285 Univariate Polynomials).  Contributions welcome;
  8286 
  8287 * GroupTheory: deleted, since its material has been moved to Algebra;
  8288 
  8289 * Complex: new directory of the complex numbers with numeric constants,
  8290 nonstandard complex numbers, and some complex analysis, standard and
  8291 nonstandard (Jacques Fleuriot);
  8292 
  8293 * HOL-Complex: new image for analysis, replacing HOL-Real and HOL-Hyperreal;
  8294 
  8295 * Hyperreal: introduced Gauge integration and hyperreal logarithms (Jacques
  8296 Fleuriot);
  8297 
  8298 * Real/HahnBanach: updated and adapted to locales;
  8299 
  8300 * NumberTheory: added Gauss's law of quadratic reciprocity (by Avigad,
  8301 Gray and Kramer);
  8302 
  8303 * UNITY: added the Meier-Sanders theory of progress sets;
  8304 
  8305 * MicroJava: bytecode verifier and lightweight bytecode verifier
  8306 as abstract algorithms, instantiated to the JVM;
  8307 
  8308 * Bali: Java source language formalization. Type system, operational
  8309 semantics, axiomatic semantics. Supported language features:
  8310 classes, interfaces, objects,virtual methods, static methods,
  8311 static/instance fields, arrays, access modifiers, definite
  8312 assignment, exceptions.
  8313 
  8314 
  8315 *** ZF ***
  8316 
  8317 * ZF/Constructible: consistency proof for AC (Gdel's constructible
  8318 universe, etc.);
  8319 
  8320 * Main ZF: virtually all theories converted to new-style format;
  8321 
  8322 
  8323 *** ML ***
  8324 
  8325 * Pure: Tactic.prove provides sane interface for internal proofs;
  8326 omits the infamous "standard" operation, so this is more appropriate
  8327 than prove_goalw_cterm in many situations (e.g. in simprocs);
  8328 
  8329 * Pure: improved error reporting of simprocs;
  8330 
  8331 * Provers: Simplifier.simproc(_i) provides sane interface for setting
  8332 up simprocs;
  8333 
  8334 
  8335 *** Document preparation ***
  8336 
  8337 * uses \par instead of \\ for line breaks in theory text. This may
  8338 shift some page breaks in large documents. To get the old behaviour
  8339 use \renewcommand{\isanewline}{\mbox{}\\\mbox{}} in root.tex.
  8340 
  8341 * minimized dependencies of isabelle.sty and isabellesym.sty on
  8342 other packages
  8343 
  8344 * \<euro> now needs package babel/greek instead of marvosym (which
  8345 broke \Rightarrow)
  8346 
  8347 * normal size for \<zero>...\<nine> (uses \mathbf instead of
  8348 textcomp package)
  8349 
  8350 
  8351 
  8352 New in Isabelle2002 (March 2002)
  8353 --------------------------------
  8354 
  8355 *** Document preparation ***
  8356 
  8357 * greatly simplified document preparation setup, including more
  8358 graceful interpretation of isatool usedir -i/-d/-D options, and more
  8359 instructive isatool mkdir; users should basically be able to get
  8360 started with "isatool mkdir HOL Test && isatool make"; alternatively,
  8361 users may run a separate document processing stage manually like this:
  8362 "isatool usedir -D output HOL Test && isatool document Test/output";
  8363 
  8364 * theory dependency graph may now be incorporated into documents;
  8365 isatool usedir -g true will produce session_graph.eps/.pdf for use
  8366 with \includegraphics of LaTeX;
  8367 
  8368 * proper spacing of consecutive markup elements, especially text
  8369 blocks after section headings;
  8370 
  8371 * support bold style (for single symbols only), input syntax is like
  8372 this: "\<^bold>\<alpha>" or "\<^bold>A";
  8373 
  8374 * \<bullet> is now output as bold \cdot by default, which looks much
  8375 better in printed text;
  8376 
  8377 * added default LaTeX bindings for \<tturnstile> and \<TTurnstile>;
  8378 note that these symbols are currently unavailable in Proof General /
  8379 X-Symbol; new symbols \<zero>, \<one>, ..., \<nine>, and \<euro>;
  8380 
  8381 * isatool latex no longer depends on changed TEXINPUTS, instead
  8382 isatool document copies the Isabelle style files to the target
  8383 location;
  8384 
  8385 
  8386 *** Isar ***
  8387 
  8388 * Pure/Provers: improved proof by cases and induction;
  8389   - 'case' command admits impromptu naming of parameters (such as
  8390     "case (Suc n)");
  8391   - 'induct' method divinates rule instantiation from the inductive
  8392     claim; no longer requires excessive ?P bindings for proper
  8393     instantiation of cases;
  8394   - 'induct' method properly enumerates all possibilities of set/type
  8395     rules; as a consequence facts may be also passed through *type*
  8396     rules without further ado;
  8397   - 'induct' method now derives symbolic cases from the *rulified*
  8398     rule (before it used to rulify cases stemming from the internal
  8399     atomized version); this means that the context of a non-atomic
  8400     statement becomes is included in the hypothesis, avoiding the
  8401     slightly cumbersome show "PROP ?case" form;
  8402   - 'induct' may now use elim-style induction rules without chaining
  8403     facts, using ``missing'' premises from the goal state; this allows
  8404     rules stemming from inductive sets to be applied in unstructured
  8405     scripts, while still benefitting from proper handling of non-atomic
  8406     statements; NB: major inductive premises need to be put first, all
  8407     the rest of the goal is passed through the induction;
  8408   - 'induct' proper support for mutual induction involving non-atomic
  8409     rule statements (uses the new concept of simultaneous goals, see
  8410     below);
  8411   - append all possible rule selections, but only use the first
  8412     success (no backtracking);
  8413   - removed obsolete "(simplified)" and "(stripped)" options of methods;
  8414   - undeclared rule case names default to numbers 1, 2, 3, ...;
  8415   - added 'print_induct_rules' (covered by help item in recent Proof
  8416     General versions);
  8417   - moved induct/cases attributes to Pure, methods to Provers;
  8418   - generic method setup instantiated for FOL and HOL;
  8419 
  8420 * Pure: support multiple simultaneous goal statements, for example
  8421 "have a: A and b: B" (same for 'theorem' etc.); being a pure
  8422 meta-level mechanism, this acts as if several individual goals had
  8423 been stated separately; in particular common proof methods need to be
  8424 repeated in order to cover all claims; note that a single elimination
  8425 step is *not* sufficient to establish the two conjunctions, so this
  8426 fails:
  8427 
  8428   assume "A & B" then have A and B ..   (*".." fails*)
  8429 
  8430 better use "obtain" in situations as above; alternative refer to
  8431 multi-step methods like 'auto', 'simp_all', 'blast+' etc.;
  8432 
  8433 * Pure: proper integration with ``locales''; unlike the original
  8434 version by Florian Kammller, Isar locales package high-level proof
  8435 contexts rather than raw logical ones (e.g. we admit to include
  8436 attributes everywhere); operations on locales include merge and
  8437 rename; support for implicit arguments (``structures''); simultaneous
  8438 type-inference over imports and text; see also HOL/ex/Locales.thy for
  8439 some examples;
  8440 
  8441 * Pure: the following commands have been ``localized'', supporting a
  8442 target locale specification "(in name)": 'lemma', 'theorem',
  8443 'corollary', 'lemmas', 'theorems', 'declare'; the results will be
  8444 stored both within the locale and at the theory level (exported and
  8445 qualified by the locale name);
  8446 
  8447 * Pure: theory goals may now be specified in ``long'' form, with
  8448 ad-hoc contexts consisting of arbitrary locale elements. for example
  8449 ``lemma foo: fixes x assumes "A x" shows "B x"'' (local syntax and
  8450 definitions may be given, too); the result is a meta-level rule with
  8451 the context elements being discharged in the obvious way;
  8452 
  8453 * Pure: new proof command 'using' allows to augment currently used
  8454 facts after a goal statement ('using' is syntactically analogous to
  8455 'apply', but acts on the goal's facts only); this allows chained facts
  8456 to be separated into parts given before and after a claim, as in
  8457 ``from a and b have C using d and e <proof>'';
  8458 
  8459 * Pure: renamed "antecedent" case to "rule_context";
  8460 
  8461 * Pure: new 'judgment' command records explicit information about the
  8462 object-logic embedding (used by several tools internally); no longer
  8463 use hard-wired "Trueprop";
  8464 
  8465 * Pure: added 'corollary' command;
  8466 
  8467 * Pure: fixed 'token_translation' command;
  8468 
  8469 * Pure: removed obsolete 'exported' attribute;
  8470 
  8471 * Pure: dummy pattern "_" in is/let is now automatically lifted over
  8472 bound variables: "ALL x. P x --> Q x" (is "ALL x. _ --> ?C x")
  8473 supersedes more cumbersome ... (is "ALL x. _ x --> ?C x");
  8474 
  8475 * Pure: method 'atomize' presents local goal premises as object-level
  8476 statements (atomic meta-level propositions); setup controlled via
  8477 rewrite rules declarations of 'atomize' attribute; example
  8478 application: 'induct' method with proper rule statements in improper
  8479 proof *scripts*;
  8480 
  8481 * Pure: emulation of instantiation tactics (rule_tac, cut_tac, etc.)
  8482 now consider the syntactic context of assumptions, giving a better
  8483 chance to get type-inference of the arguments right (this is
  8484 especially important for locales);
  8485 
  8486 * Pure: "sorry" no longer requires quick_and_dirty in interactive
  8487 mode;
  8488 
  8489 * Pure/obtain: the formal conclusion "thesis", being marked as
  8490 ``internal'', may no longer be reference directly in the text;
  8491 potential INCOMPATIBILITY, may need to use "?thesis" in rare
  8492 situations;
  8493 
  8494 * Pure: generic 'sym' attribute which declares a rule both as pure
  8495 'elim?' and for the 'symmetric' operation;
  8496 
  8497 * Pure: marginal comments ``--'' may now occur just anywhere in the
  8498 text; the fixed correlation with particular command syntax has been
  8499 discontinued;
  8500 
  8501 * Pure: new method 'rules' is particularly well-suited for proof
  8502 search in intuitionistic logic; a bit slower than 'blast' or 'fast',
  8503 but often produces more compact proof terms with less detours;
  8504 
  8505 * Pure/Provers/classical: simplified integration with pure rule
  8506 attributes and methods; the classical "intro?/elim?/dest?"
  8507 declarations coincide with the pure ones; the "rule" method no longer
  8508 includes classically swapped intros; "intro" and "elim" methods no
  8509 longer pick rules from the context; also got rid of ML declarations
  8510 AddXIs/AddXEs/AddXDs; all of this has some potential for
  8511 INCOMPATIBILITY;
  8512 
  8513 * Provers/classical: attribute 'swapped' produces classical inversions
  8514 of introduction rules;
  8515 
  8516 * Provers/simplifier: 'simplified' attribute may refer to explicit
  8517 rules instead of full simplifier context; 'iff' attribute handles
  8518 conditional rules;
  8519 
  8520 * HOL: 'typedef' now allows alternative names for Rep/Abs morphisms;
  8521 
  8522 * HOL: 'recdef' now fails on unfinished automated proofs, use
  8523 "(permissive)" option to recover old behavior;
  8524 
  8525 * HOL: 'inductive' no longer features separate (collective) attributes
  8526 for 'intros' (was found too confusing);
  8527 
  8528 * HOL: properly declared induction rules less_induct and
  8529 wf_induct_rule;
  8530 
  8531 
  8532 *** HOL ***
  8533 
  8534 * HOL: moved over to sane numeral syntax; the new policy is as
  8535 follows:
  8536 
  8537   - 0 and 1 are polymorphic constants, which are defined on any
  8538   numeric type (nat, int, real etc.);
  8539 
  8540   - 2, 3, 4, ... and -1, -2, -3, ... are polymorphic numerals, based
  8541   binary representation internally;
  8542 
  8543   - type nat has special constructor Suc, and generally prefers Suc 0
  8544   over 1::nat and Suc (Suc 0) over 2::nat;
  8545 
  8546 This change may cause significant problems of INCOMPATIBILITY; here
  8547 are some hints on converting existing sources:
  8548 
  8549   - due to the new "num" token, "-0" and "-1" etc. are now atomic
  8550   entities, so expressions involving "-" (unary or binary minus) need
  8551   to be spaced properly;
  8552 
  8553   - existing occurrences of "1" may need to be constraint "1::nat" or
  8554   even replaced by Suc 0; similar for old "2";
  8555 
  8556   - replace "#nnn" by "nnn", and "#-nnn" by "-nnn";
  8557 
  8558   - remove all special provisions on numerals in proofs;
  8559 
  8560 * HOL: simp rules nat_number expand numerals on nat to Suc/0
  8561 representation (depends on bin_arith_simps in the default context);
  8562 
  8563 * HOL: symbolic syntax for x^2 (numeral 2);
  8564 
  8565 * HOL: the class of all HOL types is now called "type" rather than
  8566 "term"; INCOMPATIBILITY, need to adapt references to this type class
  8567 in axclass/classes, instance/arities, and (usually rare) occurrences
  8568 in typings (of consts etc.); internally the class is called
  8569 "HOL.type", ML programs should refer to HOLogic.typeS;
  8570 
  8571 * HOL/record package improvements:
  8572   - new derived operations "fields" to build a partial record section,
  8573     "extend" to promote a fixed record to a record scheme, and
  8574     "truncate" for the reverse; cf. theorems "xxx.defs", which are *not*
  8575     declared as simp by default;
  8576   - shared operations ("more", "fields", etc.) now need to be always
  8577     qualified) --- potential INCOMPATIBILITY;
  8578   - removed "make_scheme" operations (use "make" with "extend") --
  8579     INCOMPATIBILITY;
  8580   - removed "more" class (simply use "term") -- INCOMPATIBILITY;
  8581   - provides cases/induct rules for use with corresponding Isar
  8582     methods (for concrete records, record schemes, concrete more
  8583     parts, and schematic more parts -- in that order);
  8584   - internal definitions directly based on a light-weight abstract
  8585     theory of product types over typedef rather than datatype;
  8586 
  8587 * HOL: generic code generator for generating executable ML code from
  8588 specifications; specific support for HOL constructs such as inductive
  8589 datatypes and sets, as well as recursive functions; can be invoked
  8590 via 'generate_code' theory section;
  8591 
  8592 * HOL: canonical cases/induct rules for n-tuples (n = 3..7);
  8593 
  8594 * HOL: consolidated and renamed several theories.  In particular:
  8595         Ord.thy has been absorbed into HOL.thy
  8596         String.thy has been absorbed into List.thy
  8597 
  8598 * HOL: concrete setsum syntax "\<Sum>i:A. b" == "setsum (%i. b) A"
  8599 (beware of argument permutation!);
  8600 
  8601 * HOL: linorder_less_split superseded by linorder_cases;
  8602 
  8603 * HOL/List: "nodups" renamed to "distinct";
  8604 
  8605 * HOL: added "The" definite description operator; move Hilbert's "Eps"
  8606 to peripheral theory "Hilbert_Choice"; some INCOMPATIBILITIES:
  8607   - Ex_def has changed, now need to use some_eq_ex
  8608 
  8609 * HOL: made split_all_tac safe; EXISTING PROOFS MAY FAIL OR LOOP, so
  8610 in this (rare) case use:
  8611 
  8612   delSWrapper "split_all_tac"
  8613   addSbefore ("unsafe_split_all_tac", unsafe_split_all_tac)
  8614 
  8615 * HOL: added safe wrapper "split_conv_tac" to claset; EXISTING PROOFS
  8616 MAY FAIL;
  8617 
  8618 * HOL: introduced f^n = f o ... o f; warning: due to the limits of
  8619 Isabelle's type classes, ^ on functions and relations has too general
  8620 a domain, namely ('a * 'b) set and 'a => 'b; this means that it may be
  8621 necessary to attach explicit type constraints;
  8622 
  8623 * HOL/Relation: the prefix name of the infix "O" has been changed from
  8624 "comp" to "rel_comp"; INCOMPATIBILITY: a few theorems have been
  8625 renamed accordingly (eg "compI" -> "rel_compI").
  8626 
  8627 * HOL: syntax translations now work properly with numerals and records
  8628 expressions;
  8629 
  8630 * HOL: bounded abstraction now uses syntax "%" / "\<lambda>" instead
  8631 of "lam" -- INCOMPATIBILITY;
  8632 
  8633 * HOL: got rid of some global declarations (potential INCOMPATIBILITY
  8634 for ML tools): const "()" renamed "Product_Type.Unity", type "unit"
  8635 renamed "Product_Type.unit";
  8636 
  8637 * HOL: renamed rtrancl_into_rtrancl2 to converse_rtrancl_into_rtrancl
  8638 
  8639 * HOL: removed obsolete theorem "optionE" (use "option.exhaust", or
  8640 the "cases" method);
  8641 
  8642 * HOL/GroupTheory: group theory examples including Sylow's theorem (by
  8643 Florian Kammller);
  8644 
  8645 * HOL/IMP: updated and converted to new-style theory format; several
  8646 parts turned into readable document, with proper Isar proof texts and
  8647 some explanations (by Gerwin Klein);
  8648 
  8649 * HOL-Real: added Complex_Numbers (by Gertrud Bauer);
  8650 
  8651 * HOL-Hyperreal is now a logic image;
  8652 
  8653 
  8654 *** HOLCF ***
  8655 
  8656 * Isar: consts/constdefs supports mixfix syntax for continuous
  8657 operations;
  8658 
  8659 * Isar: domain package adapted to new-style theory format, e.g. see
  8660 HOLCF/ex/Dnat.thy;
  8661 
  8662 * theory Lift: proper use of rep_datatype lift instead of ML hacks --
  8663 potential INCOMPATIBILITY; now use plain induct_tac instead of former
  8664 lift.induct_tac, always use UU instead of Undef;
  8665 
  8666 * HOLCF/IMP: updated and converted to new-style theory;
  8667 
  8668 
  8669 *** ZF ***
  8670 
  8671 * Isar: proper integration of logic-specific tools and packages,
  8672 including theory commands '(co)inductive', '(co)datatype',
  8673 'rep_datatype', 'inductive_cases', as well as methods 'ind_cases',
  8674 'induct_tac', 'case_tac', and 'typecheck' (with attribute 'TC');
  8675 
  8676 * theory Main no longer includes AC; for the Axiom of Choice, base
  8677 your theory on Main_ZFC;
  8678 
  8679 * the integer library now covers quotients and remainders, with many
  8680 laws relating division to addition, multiplication, etc.;
  8681 
  8682 * ZF/UNITY: Chandy and Misra's UNITY is now available in ZF, giving a
  8683 typeless version of the formalism;
  8684 
  8685 * ZF/AC, Coind, IMP, Resid: updated and converted to new-style theory
  8686 format;
  8687 
  8688 * ZF/Induct: new directory for examples of inductive definitions,
  8689 including theory Multiset for multiset orderings; converted to
  8690 new-style theory format;
  8691 
  8692 * ZF: many new theorems about lists, ordinals, etc.;
  8693 
  8694 
  8695 *** General ***
  8696 
  8697 * Pure/kernel: meta-level proof terms (by Stefan Berghofer); reference
  8698 variable proof controls level of detail: 0 = no proofs (only oracle
  8699 dependencies), 1 = lemma dependencies, 2 = compact proof terms; see
  8700 also ref manual for further ML interfaces;
  8701 
  8702 * Pure/axclass: removed obsolete ML interface
  8703 goal_subclass/goal_arity;
  8704 
  8705 * Pure/syntax: new token syntax "num" for plain numerals (without "#"
  8706 of "xnum"); potential INCOMPATIBILITY, since -0, -1 etc. are now
  8707 separate tokens, so expressions involving minus need to be spaced
  8708 properly;
  8709 
  8710 * Pure/syntax: support non-oriented infixes, using keyword "infix"
  8711 rather than "infixl" or "infixr";
  8712 
  8713 * Pure/syntax: concrete syntax for dummy type variables admits genuine
  8714 sort constraint specifications in type inference; e.g. "x::_::foo"
  8715 ensures that the type of "x" is of sort "foo" (but not necessarily a
  8716 type variable);
  8717 
  8718 * Pure/syntax: print modes "type_brackets" and "no_type_brackets"
  8719 control output of nested => (types); the default behavior is
  8720 "type_brackets";
  8721 
  8722 * Pure/syntax: builtin parse translation for "_constify" turns valued
  8723 tokens into AST constants;
  8724 
  8725 * Pure/syntax: prefer later declarations of translations and print
  8726 translation functions; potential INCOMPATIBILITY: need to reverse
  8727 multiple declarations for same syntax element constant;
  8728 
  8729 * Pure/show_hyps reset by default (in accordance to existing Isar
  8730 practice);
  8731 
  8732 * Provers/classical: renamed addaltern to addafter, addSaltern to
  8733 addSafter;
  8734 
  8735 * Provers/clasimp: ``iff'' declarations now handle conditional rules
  8736 as well;
  8737 
  8738 * system: tested support for MacOS X; should be able to get Isabelle +
  8739 Proof General to work in a plain Terminal after installing Poly/ML
  8740 (e.g. from the Isabelle distribution area) and GNU bash alone
  8741 (e.g. from http://www.apple.com); full X11, XEmacs and X-Symbol
  8742 support requires further installations, e.g. from
  8743 http://fink.sourceforge.net/);
  8744 
  8745 * system: support Poly/ML 4.1.1 (able to manage larger heaps);
  8746 
  8747 * system: reduced base memory usage by Poly/ML (approx. 20 MB instead
  8748 of 40 MB), cf. ML_OPTIONS;
  8749 
  8750 * system: Proof General keywords specification is now part of the
  8751 Isabelle distribution (see etc/isar-keywords.el);
  8752 
  8753 * system: support for persistent Proof General sessions (refrain from
  8754 outdating all loaded theories on startup); user may create writable
  8755 logic images like this: ``isabelle -q HOL Test'';
  8756 
  8757 * system: smart selection of Isabelle process versus Isabelle
  8758 interface, accommodates case-insensitive file systems (e.g. HFS+); may
  8759 run both "isabelle" and "Isabelle" even if file names are badly
  8760 damaged (executable inspects the case of the first letter of its own
  8761 name); added separate "isabelle-process" and "isabelle-interface";
  8762 
  8763 * system: refrain from any attempt at filtering input streams; no
  8764 longer support ``8bit'' encoding of old isabelle font, instead proper
  8765 iso-latin characters may now be used; the related isatools
  8766 "symbolinput" and "nonascii" have disappeared as well;
  8767 
  8768 * system: removed old "xterm" interface (the print modes "xterm" and
  8769 "xterm_color" are still available for direct use in a suitable
  8770 terminal);
  8771 
  8772 
  8773 
  8774 New in Isabelle99-2 (February 2001)
  8775 -----------------------------------
  8776 
  8777 *** Overview of INCOMPATIBILITIES ***
  8778 
  8779 * HOL: please note that theories in the Library and elsewhere often use the
  8780 new-style (Isar) format; to refer to their theorems in an ML script you must
  8781 bind them to ML identifers by e.g.      val thm_name = thm "thm_name";
  8782 
  8783 * HOL: inductive package no longer splits induction rule aggressively,
  8784 but only as far as specified by the introductions given; the old
  8785 format may be recovered via ML function complete_split_rule or attribute
  8786 'split_rule (complete)';
  8787 
  8788 * HOL: induct renamed to lfp_induct, lfp_Tarski to lfp_unfold,
  8789 gfp_Tarski to gfp_unfold;
  8790 
  8791 * HOL: contrapos, contrapos2 renamed to contrapos_nn, contrapos_pp;
  8792 
  8793 * HOL: infix "dvd" now has priority 50 rather than 70 (because it is a
  8794 relation); infix "^^" has been renamed "``"; infix "``" has been
  8795 renamed "`"; "univalent" has been renamed "single_valued";
  8796 
  8797 * HOL/Real: "rinv" and "hrinv" replaced by overloaded "inverse"
  8798 operation;
  8799 
  8800 * HOLCF: infix "`" has been renamed "$"; the symbol syntax is \<cdot>;
  8801 
  8802 * Isar: 'obtain' no longer declares "that" fact as simp/intro;
  8803 
  8804 * Isar/HOL: method 'induct' now handles non-atomic goals; as a
  8805 consequence, it is no longer monotonic wrt. the local goal context
  8806 (which is now passed through the inductive cases);
  8807 
  8808 * Document preparation: renamed standard symbols \<ll> to \<lless> and
  8809 \<gg> to \<ggreater>;
  8810 
  8811 
  8812 *** Document preparation ***
  8813 
  8814 * \isabellestyle{NAME} selects version of Isabelle output (currently
  8815 available: are "it" for near math-mode best-style output, "sl" for
  8816 slanted text style, and "tt" for plain type-writer; if no
  8817 \isabellestyle command is given, output is according to slanted
  8818 type-writer);
  8819 
  8820 * support sub/super scripts (for single symbols only), input syntax is
  8821 like this: "A\<^sup>*" or "A\<^sup>\<star>";
  8822 
  8823 * some more standard symbols; see Appendix A of the system manual for
  8824 the complete list of symbols defined in isabellesym.sty;
  8825 
  8826 * improved isabelle style files; more abstract symbol implementation
  8827 (should now use \isamath{...} and \isatext{...} in custom symbol
  8828 definitions);
  8829 
  8830 * antiquotation @{goals} and @{subgoals} for output of *dynamic* goals
  8831 state; Note that presentation of goal states does not conform to
  8832 actual human-readable proof documents.  Please do not include goal
  8833 states into document output unless you really know what you are doing!
  8834 
  8835 * proper indentation of antiquoted output with proportional LaTeX
  8836 fonts;
  8837 
  8838 * no_document ML operator temporarily disables LaTeX document
  8839 generation;
  8840 
  8841 * isatool unsymbolize tunes sources for plain ASCII communication;
  8842 
  8843 
  8844 *** Isar ***
  8845 
  8846 * Pure: Isar now suffers initial goal statements to contain unbound
  8847 schematic variables (this does not conform to actual readable proof
  8848 documents, due to unpredictable outcome and non-compositional proof
  8849 checking); users who know what they are doing may use schematic goals
  8850 for Prolog-style synthesis of proven results;
  8851 
  8852 * Pure: assumption method (an implicit finishing) now handles actual
  8853 rules as well;
  8854 
  8855 * Pure: improved 'obtain' --- moved to Pure, insert "that" into
  8856 initial goal, declare "that" only as Pure intro (only for single
  8857 steps); the "that" rule assumption may now be involved in implicit
  8858 finishing, thus ".." becomes a feasible for trivial obtains;
  8859 
  8860 * Pure: default proof step now includes 'intro_classes'; thus trivial
  8861 instance proofs may be performed by "..";
  8862 
  8863 * Pure: ?thesis / ?this / "..." now work for pure meta-level
  8864 statements as well;
  8865 
  8866 * Pure: more robust selection of calculational rules;
  8867 
  8868 * Pure: the builtin notion of 'finished' goal now includes the ==-refl
  8869 rule (as well as the assumption rule);
  8870 
  8871 * Pure: 'thm_deps' command visualizes dependencies of theorems and
  8872 lemmas, using the graph browser tool;
  8873 
  8874 * Pure: predict failure of "show" in interactive mode;
  8875 
  8876 * Pure: 'thms_containing' now takes actual terms as arguments;
  8877 
  8878 * HOL: improved method 'induct' --- now handles non-atomic goals
  8879 (potential INCOMPATIBILITY); tuned error handling;
  8880 
  8881 * HOL: cases and induct rules now provide explicit hints about the
  8882 number of facts to be consumed (0 for "type" and 1 for "set" rules);
  8883 any remaining facts are inserted into the goal verbatim;
  8884 
  8885 * HOL: local contexts (aka cases) may now contain term bindings as
  8886 well; the 'cases' and 'induct' methods new provide a ?case binding for
  8887 the result to be shown in each case;
  8888 
  8889 * HOL: added 'recdef_tc' command;
  8890 
  8891 * isatool convert assists in eliminating legacy ML scripts;
  8892 
  8893 
  8894 *** HOL ***
  8895 
  8896 * HOL/Library: a collection of generic theories to be used together
  8897 with main HOL; the theory loader path already includes this directory
  8898 by default; the following existing theories have been moved here:
  8899 HOL/Induct/Multiset, HOL/Induct/Acc (as Accessible_Part), HOL/While
  8900 (as While_Combinator), HOL/Lex/Prefix (as List_Prefix);
  8901 
  8902 * HOL/Unix: "Some aspects of Unix file-system security", a typical
  8903 modelling and verification task performed in Isabelle/HOL +
  8904 Isabelle/Isar + Isabelle document preparation (by Markus Wenzel).
  8905 
  8906 * HOL/Algebra: special summation operator SUM no longer exists, it has
  8907 been replaced by setsum; infix 'assoc' now has priority 50 (like
  8908 'dvd'); axiom 'one_not_zero' has been moved from axclass 'ring' to
  8909 'domain', this makes the theory consistent with mathematical
  8910 literature;
  8911 
  8912 * HOL basics: added overloaded operations "inverse" and "divide"
  8913 (infix "/"), syntax for generic "abs" operation, generic summation
  8914 operator \<Sum>;
  8915 
  8916 * HOL/typedef: simplified package, provide more useful rules (see also
  8917 HOL/subset.thy);
  8918 
  8919 * HOL/datatype: induction rule for arbitrarily branching datatypes is
  8920 now expressed as a proper nested rule (old-style tactic scripts may
  8921 require atomize_strip_tac to cope with non-atomic premises);
  8922 
  8923 * HOL: renamed theory "Prod" to "Product_Type", renamed "split" rule
  8924 to "split_conv" (old name still available for compatibility);
  8925 
  8926 * HOL: improved concrete syntax for strings (e.g. allows translation
  8927 rules with string literals);
  8928 
  8929 * HOL-Real-Hyperreal: this extends HOL-Real with the hyperreals
  8930  and Fleuriot's mechanization of analysis, including the transcendental
  8931  functions for the reals;
  8932 
  8933 * HOL/Real, HOL/Hyperreal: improved arithmetic simplification;
  8934 
  8935 
  8936 *** CTT ***
  8937 
  8938 * CTT: x-symbol support for Pi, Sigma, -->, : (membership); note that
  8939 "lam" is displayed as TWO lambda-symbols
  8940 
  8941 * CTT: theory Main now available, containing everything (that is, Bool
  8942 and Arith);
  8943 
  8944 
  8945 *** General ***
  8946 
  8947 * Pure: the Simplifier has been implemented properly as a derived rule
  8948 outside of the actual kernel (at last!); the overall performance
  8949 penalty in practical applications is about 50%, while reliability of
  8950 the Isabelle inference kernel has been greatly improved;
  8951 
  8952 * print modes "brackets" and "no_brackets" control output of nested =>
  8953 (types) and ==> (props); the default behaviour is "brackets";
  8954 
  8955 * Provers: fast_tac (and friends) now handle actual object-logic rules
  8956 as assumptions as well;
  8957 
  8958 * system: support Poly/ML 4.0;
  8959 
  8960 * system: isatool install handles KDE version 1 or 2;
  8961 
  8962 
  8963 
  8964 New in Isabelle99-1 (October 2000)
  8965 ----------------------------------
  8966 
  8967 *** Overview of INCOMPATIBILITIES ***
  8968 
  8969 * HOL: simplification of natural numbers is much changed; to partly
  8970 recover the old behaviour (e.g. to prevent n+n rewriting to #2*n)
  8971 issue the following ML commands:
  8972 
  8973   Delsimprocs Nat_Numeral_Simprocs.cancel_numerals;
  8974   Delsimprocs [Nat_Numeral_Simprocs.combine_numerals];
  8975 
  8976 * HOL: simplification no longer dives into case-expressions; this is
  8977 controlled by "t.weak_case_cong" for each datatype t;
  8978 
  8979 * HOL: nat_less_induct renamed to less_induct;
  8980 
  8981 * HOL: systematic renaming of the SOME (Eps) rules, may use isatool
  8982 fixsome to patch .thy and .ML sources automatically;
  8983 
  8984   select_equality  -> some_equality
  8985   select_eq_Ex     -> some_eq_ex
  8986   selectI2EX       -> someI2_ex
  8987   selectI2         -> someI2
  8988   selectI          -> someI
  8989   select1_equality -> some1_equality
  8990   Eps_sym_eq       -> some_sym_eq_trivial
  8991   Eps_eq           -> some_eq_trivial
  8992 
  8993 * HOL: exhaust_tac on datatypes superceded by new generic case_tac;
  8994 
  8995 * HOL: removed obsolete theorem binding expand_if (refer to split_if
  8996 instead);
  8997 
  8998 * HOL: the recursion equations generated by 'recdef' are now called
  8999 f.simps instead of f.rules;
  9000 
  9001 * HOL: qed_spec_mp now also handles bounded ALL as well;
  9002 
  9003 * HOL: 0 is now overloaded, so the type constraint ":: nat" may
  9004 sometimes be needed;
  9005 
  9006 * HOL: the constant for "f``x" is now "image" rather than "op ``";
  9007 
  9008 * HOL: the constant for "f-``x" is now "vimage" rather than "op -``";
  9009 
  9010 * HOL: the disjoint sum is now "<+>" instead of "Plus"; the cartesian
  9011 product is now "<*>" instead of "Times"; the lexicographic product is
  9012 now "<*lex*>" instead of "**";
  9013 
  9014 * HOL: theory Sexp is now in HOL/Induct examples (it used to be part
  9015 of main HOL, but was unused); better use HOL's datatype package;
  9016 
  9017 * HOL: removed "symbols" syntax for constant "override" of theory Map;
  9018 the old syntax may be recovered as follows:
  9019 
  9020   syntax (symbols)
  9021     override  :: "('a ~=> 'b) => ('a ~=> 'b) => ('a ~=> 'b)"
  9022       (infixl "\\<oplus>" 100)
  9023 
  9024 * HOL/Real: "rabs" replaced by overloaded "abs" function;
  9025 
  9026 * HOL/ML: even fewer consts are declared as global (see theories Ord,
  9027 Lfp, Gfp, WF); this only affects ML packages that refer to const names
  9028 internally;
  9029 
  9030 * HOL and ZF: syntax for quotienting wrt an equivalence relation
  9031 changed from A/r to A//r;
  9032 
  9033 * ZF: new treatment of arithmetic (nat & int) may break some old
  9034 proofs;
  9035 
  9036 * Isar: renamed some attributes (RS -> THEN, simplify -> simplified,
  9037 rulify -> rule_format, elimify -> elim_format, ...);
  9038 
  9039 * Isar/Provers: intro/elim/dest attributes changed; renamed
  9040 intro/intro!/intro!! flags to intro!/intro/intro? (in most cases, one
  9041 should have to change intro!! to intro? only); replaced "delrule" by
  9042 "rule del";
  9043 
  9044 * Isar/HOL: renamed "intrs" to "intros" in inductive definitions;
  9045 
  9046 * Provers: strengthened force_tac by using new first_best_tac;
  9047 
  9048 * LaTeX document preparation: several changes of isabelle.sty (see
  9049 lib/texinputs);
  9050 
  9051 
  9052 *** Document preparation ***
  9053 
  9054 * formal comments (text blocks etc.) in new-style theories may now
  9055 contain antiquotations of thm/prop/term/typ/text to be presented
  9056 according to latex print mode; concrete syntax is like this:
  9057 @{term[show_types] "f(x) = a + x"};
  9058 
  9059 * isatool mkdir provides easy setup of Isabelle session directories,
  9060 including proper document sources;
  9061 
  9062 * generated LaTeX sources are now deleted after successful run
  9063 (isatool document -c); may retain a copy somewhere else via -D option
  9064 of isatool usedir;
  9065 
  9066 * isatool usedir -D now lets isatool latex -o sty update the Isabelle
  9067 style files, achieving self-contained LaTeX sources and simplifying
  9068 LaTeX debugging;
  9069 
  9070 * old-style theories now produce (crude) LaTeX output as well;
  9071 
  9072 * browser info session directories are now self-contained (may be put
  9073 on WWW server seperately); improved graphs of nested sessions; removed
  9074 graph for 'all sessions';
  9075 
  9076 * several improvements in isabelle style files; \isabellestyle{it}
  9077 produces fake math mode output; \isamarkupheader is now \section by
  9078 default; see lib/texinputs/isabelle.sty etc.;
  9079 
  9080 
  9081 *** Isar ***
  9082 
  9083 * Isar/Pure: local results and corresponding term bindings are now
  9084 subject to Hindley-Milner polymorphism (similar to ML); this
  9085 accommodates incremental type-inference very nicely;
  9086 
  9087 * Isar/Pure: new derived language element 'obtain' supports
  9088 generalized existence reasoning;
  9089 
  9090 * Isar/Pure: new calculational elements 'moreover' and 'ultimately'
  9091 support accumulation of results, without applying any rules yet;
  9092 useful to collect intermediate results without explicit name
  9093 references, and for use with transitivity rules with more than 2
  9094 premises;
  9095 
  9096 * Isar/Pure: scalable support for case-analysis type proofs: new
  9097 'case' language element refers to local contexts symbolically, as
  9098 produced by certain proof methods; internally, case names are attached
  9099 to theorems as "tags";
  9100 
  9101 * Isar/Pure: theory command 'hide' removes declarations from
  9102 class/type/const name spaces;
  9103 
  9104 * Isar/Pure: theory command 'defs' supports option "(overloaded)" to
  9105 indicate potential overloading;
  9106 
  9107 * Isar/Pure: changed syntax of local blocks from {{ }} to { };
  9108 
  9109 * Isar/Pure: syntax of sorts made 'inner', i.e. have to write
  9110 "{a,b,c}" instead of {a,b,c};
  9111 
  9112 * Isar/Pure now provides its own version of intro/elim/dest
  9113 attributes; useful for building new logics, but beware of confusion
  9114 with the version in Provers/classical;
  9115 
  9116 * Isar/Pure: the local context of (non-atomic) goals is provided via
  9117 case name 'antecedent';
  9118 
  9119 * Isar/Pure: removed obsolete 'transfer' attribute (transfer of thms
  9120 to the current context is now done automatically);
  9121 
  9122 * Isar/Pure: theory command 'method_setup' provides a simple interface
  9123 for definining proof methods in ML;
  9124 
  9125 * Isar/Provers: intro/elim/dest attributes changed; renamed
  9126 intro/intro!/intro!! flags to intro!/intro/intro? (INCOMPATIBILITY, in
  9127 most cases, one should have to change intro!! to intro? only);
  9128 replaced "delrule" by "rule del";
  9129 
  9130 * Isar/Provers: new 'hypsubst' method, plain 'subst' method and
  9131 'symmetric' attribute (the latter supercedes [RS sym]);
  9132 
  9133 * Isar/Provers: splitter support (via 'split' attribute and 'simp'
  9134 method modifier); 'simp' method: 'only:' modifier removes loopers as
  9135 well (including splits);
  9136 
  9137 * Isar/Provers: Simplifier and Classical methods now support all kind
  9138 of modifiers used in the past, including 'cong', 'iff', etc.
  9139 
  9140 * Isar/Provers: added 'fastsimp' and 'clarsimp' methods (combination
  9141 of Simplifier and Classical reasoner);
  9142 
  9143 * Isar/HOL: new proof method 'cases' and improved version of 'induct'
  9144 now support named cases; major packages (inductive, datatype, primrec,
  9145 recdef) support case names and properly name parameters;
  9146 
  9147 * Isar/HOL: new transitivity rules for substitution in inequalities --
  9148 monotonicity conditions are extracted to be proven at end of
  9149 calculations;
  9150 
  9151 * Isar/HOL: removed 'case_split' thm binding, should use 'cases' proof
  9152 method anyway;
  9153 
  9154 * Isar/HOL: removed old expand_if = split_if; theorems if_splits =
  9155 split_if split_if_asm; datatype package provides theorems foo.splits =
  9156 foo.split foo.split_asm for each datatype;
  9157 
  9158 * Isar/HOL: tuned inductive package, rename "intrs" to "intros"
  9159 (potential INCOMPATIBILITY), emulation of mk_cases feature for proof
  9160 scripts: new 'inductive_cases' command and 'ind_cases' method; (Note:
  9161 use "(cases (simplified))" method in proper proof texts);
  9162 
  9163 * Isar/HOL: added global 'arith_split' attribute for 'arith' method;
  9164 
  9165 * Isar: names of theorems etc. may be natural numbers as well;
  9166 
  9167 * Isar: 'pr' command: optional arguments for goals_limit and
  9168 ProofContext.prems_limit; no longer prints theory contexts, but only
  9169 proof states;
  9170 
  9171 * Isar: diagnostic commands 'pr', 'thm', 'prop', 'term', 'typ' admit
  9172 additional print modes to be specified; e.g. "pr(latex)" will print
  9173 proof state according to the Isabelle LaTeX style;
  9174 
  9175 * Isar: improved support for emulating tactic scripts, including proof
  9176 methods 'rule_tac' etc., 'cut_tac', 'thin_tac', 'subgoal_tac',
  9177 'rename_tac', 'rotate_tac', 'tactic', and 'case_tac' / 'induct_tac'
  9178 (for HOL datatypes);
  9179 
  9180 * Isar: simplified (more robust) goal selection of proof methods: 1st
  9181 goal, all goals, or explicit goal specifier (tactic emulation); thus
  9182 'proof method scripts' have to be in depth-first order;
  9183 
  9184 * Isar: tuned 'let' syntax: replaced 'as' keyword by 'and';
  9185 
  9186 * Isar: removed 'help' command, which hasn't been too helpful anyway;
  9187 should instead use individual commands for printing items
  9188 (print_commands, print_methods etc.);
  9189 
  9190 * Isar: added 'nothing' --- the empty list of theorems;
  9191 
  9192 
  9193 *** HOL ***
  9194 
  9195 * HOL/MicroJava: formalization of a fragment of Java, together with a
  9196 corresponding virtual machine and a specification of its bytecode
  9197 verifier and a lightweight bytecode verifier, including proofs of
  9198 type-safety; by Gerwin Klein, Tobias Nipkow, David von Oheimb, and
  9199 Cornelia Pusch (see also the homepage of project Bali at
  9200 http://isabelle.in.tum.de/Bali/);
  9201 
  9202 * HOL/Algebra: new theory of rings and univariate polynomials, by
  9203 Clemens Ballarin;
  9204 
  9205 * HOL/NumberTheory: fundamental Theorem of Arithmetic, Chinese
  9206 Remainder Theorem, Fermat/Euler Theorem, Wilson's Theorem, by Thomas M
  9207 Rasmussen;
  9208 
  9209 * HOL/Lattice: fundamental concepts of lattice theory and order
  9210 structures, including duals, properties of bounds versus algebraic
  9211 laws, lattice operations versus set-theoretic ones, the Knaster-Tarski
  9212 Theorem for complete lattices etc.; may also serve as a demonstration
  9213 for abstract algebraic reasoning using axiomatic type classes, and
  9214 mathematics-style proof in Isabelle/Isar; by Markus Wenzel;
  9215 
  9216 * HOL/Prolog: a (bare-bones) implementation of Lambda-Prolog, by David
  9217 von Oheimb;
  9218 
  9219 * HOL/IMPP: extension of IMP with local variables and mutually
  9220 recursive procedures, by David von Oheimb;
  9221 
  9222 * HOL/Lambda: converted into new-style theory and document;
  9223 
  9224 * HOL/ex/Multiquote: example of multiple nested quotations and
  9225 anti-quotations -- basically a generalized version of de-Bruijn
  9226 representation; very useful in avoiding lifting of operations;
  9227 
  9228 * HOL/record: added general record equality rule to simpset; fixed
  9229 select-update simplification procedure to handle extended records as
  9230 well; admit "r" as field name;
  9231 
  9232 * HOL: 0 is now overloaded over the new sort "zero", allowing its use with
  9233 other numeric types and also as the identity of groups, rings, etc.;
  9234 
  9235 * HOL: new axclass plus_ac0 for addition with the AC-laws and 0 as identity.
  9236 Types nat and int belong to this axclass;
  9237 
  9238 * HOL: greatly improved simplification involving numerals of type nat, int, real:
  9239    (i + #8 + j) = Suc k simplifies to  #7 + (i + j) = k
  9240    i*j + k + j*#3*i     simplifies to  #4*(i*j) + k
  9241   two terms #m*u and #n*u are replaced by #(m+n)*u
  9242     (where #m, #n and u can implicitly be 1; this is simproc combine_numerals)
  9243   and the term/formula #m*u+x ~~ #n*u+y simplifies simplifies to #(m-n)+x ~~ y
  9244     or x ~~ #(n-m)+y, where ~~ is one of = < <= or - (simproc cancel_numerals);
  9245 
  9246 * HOL: meson_tac is available (previously in ex/meson.ML); it is a
  9247 powerful prover for predicate logic but knows nothing of clasets; see
  9248 ex/mesontest.ML and ex/mesontest2.ML for example applications;
  9249 
  9250 * HOL: new version of "case_tac" subsumes both boolean case split and
  9251 "exhaust_tac" on datatypes; INCOMPATIBILITY: exhaust_tac no longer
  9252 exists, may define val exhaust_tac = case_tac for ad-hoc portability;
  9253 
  9254 * HOL: simplification no longer dives into case-expressions: only the
  9255 selector expression is simplified, but not the remaining arms; to
  9256 enable full simplification of case-expressions for datatype t, you may
  9257 remove t.weak_case_cong from the simpset, either globally (Delcongs
  9258 [thm"t.weak_case_cong"];) or locally (delcongs [...]).
  9259 
  9260 * HOL/recdef: the recursion equations generated by 'recdef' for
  9261 function 'f' are now called f.simps instead of f.rules; if all
  9262 termination conditions are proved automatically, these simplification
  9263 rules are added to the simpset, as in primrec; rules may be named
  9264 individually as well, resulting in a separate list of theorems for
  9265 each equation;
  9266 
  9267 * HOL/While is a new theory that provides a while-combinator. It
  9268 permits the definition of tail-recursive functions without the
  9269 provision of a termination measure. The latter is necessary once the
  9270 invariant proof rule for while is applied.
  9271 
  9272 * HOL: new (overloaded) notation for the set of elements below/above
  9273 some element: {..u}, {..u(}, {l..}, {)l..}. See theory SetInterval.
  9274 
  9275 * HOL: theorems impI, allI, ballI bound as "strip";
  9276 
  9277 * HOL: new tactic induct_thm_tac: thm -> string -> int -> tactic
  9278 induct_tac th "x1 ... xn" expects th to have a conclusion of the form
  9279 P v1 ... vn and abbreviates res_inst_tac [("v1","x1"),...,("vn","xn")] th;
  9280 
  9281 * HOL/Real: "rabs" replaced by overloaded "abs" function;
  9282 
  9283 * HOL: theory Sexp now in HOL/Induct examples (it used to be part of
  9284 main HOL, but was unused);
  9285 
  9286 * HOL: fewer consts declared as global (e.g. have to refer to
  9287 "Lfp.lfp" instead of "lfp" internally; affects ML packages only);
  9288 
  9289 * HOL: tuned AST representation of nested pairs, avoiding bogus output
  9290 in case of overlap with user translations (e.g. judgements over
  9291 tuples); (note that the underlying logical represenation is still
  9292 bogus);
  9293 
  9294 
  9295 *** ZF ***
  9296 
  9297 * ZF: simplification automatically cancels common terms in arithmetic
  9298 expressions over nat and int;
  9299 
  9300 * ZF: new treatment of nat to minimize type-checking: all operators
  9301 coerce their operands to a natural number using the function natify,
  9302 making the algebraic laws unconditional;
  9303 
  9304 * ZF: as above, for int: operators coerce their operands to an integer
  9305 using the function intify;
  9306 
  9307 * ZF: the integer library now contains many of the usual laws for the
  9308 orderings, including $<=, and monotonicity laws for $+ and $*;
  9309 
  9310 * ZF: new example ZF/ex/NatSum to demonstrate integer arithmetic
  9311 simplification;
  9312 
  9313 * FOL and ZF: AddIffs now available, giving theorems of the form P<->Q
  9314 to the simplifier and classical reasoner simultaneously;
  9315 
  9316 
  9317 *** General ***
  9318 
  9319 * Provers: blast_tac now handles actual object-logic rules as
  9320 assumptions; note that auto_tac uses blast_tac internally as well;
  9321 
  9322 * Provers: new functions rulify/rulify_no_asm: thm -> thm for turning
  9323 outer -->/All/Ball into ==>/!!; qed_spec_mp now uses rulify_no_asm;
  9324 
  9325 * Provers: delrules now handles destruct rules as well (no longer need
  9326 explicit make_elim);
  9327 
  9328 * Provers: Blast_tac now warns of and ignores "weak elimination rules" e.g.
  9329   [| inj ?f;          ?f ?x = ?f ?y; ?x = ?y ==> ?W |] ==> ?W
  9330 use instead the strong form,
  9331   [| inj ?f; ~ ?W ==> ?f ?x = ?f ?y; ?x = ?y ==> ?W |] ==> ?W
  9332 in HOL, FOL and ZF the function cla_make_elim will create such rules
  9333 from destruct-rules;
  9334 
  9335 * Provers: Simplifier.easy_setup provides a fast path to basic
  9336 Simplifier setup for new object-logics;
  9337 
  9338 * Pure: AST translation rules no longer require constant head on LHS;
  9339 
  9340 * Pure: improved name spaces: ambiguous output is qualified; support
  9341 for hiding of names;
  9342 
  9343 * system: smart setup of canonical ML_HOME, ISABELLE_INTERFACE, and
  9344 XSYMBOL_HOME; no longer need to do manual configuration in most
  9345 situations;
  9346 
  9347 * system: compression of ML heaps images may now be controlled via -c
  9348 option of isabelle and isatool usedir (currently only observed by
  9349 Poly/ML);
  9350 
  9351 * system: isatool installfonts may handle X-Symbol fonts as well (very
  9352 useful for remote X11);
  9353 
  9354 * system: provide TAGS file for Isabelle sources;
  9355 
  9356 * ML: infix 'OF' is a version of 'MRS' with more appropriate argument
  9357 order;
  9358 
  9359 * ML: renamed flags Syntax.trace_norm_ast to Syntax.trace_ast; global
  9360 timing flag supersedes proof_timing and Toplevel.trace;
  9361 
  9362 * ML: new combinators |>> and |>>> for incremental transformations
  9363 with secondary results (e.g. certain theory extensions):
  9364 
  9365 * ML: PureThy.add_defs gets additional argument to indicate potential
  9366 overloading (usually false);
  9367 
  9368 * ML: PureThy.add_thms/add_axioms/add_defs now return theorems as
  9369 results;
  9370 
  9371 
  9372 
  9373 New in Isabelle99 (October 1999)
  9374 --------------------------------
  9375 
  9376 *** Overview of INCOMPATIBILITIES (see below for more details) ***
  9377 
  9378 * HOL: The THEN and ELSE parts of conditional expressions (if P then x else y)
  9379 are no longer simplified.  (This allows the simplifier to unfold recursive
  9380 functional programs.)  To restore the old behaviour, declare
  9381 
  9382     Delcongs [if_weak_cong];
  9383 
  9384 * HOL: Removed the obsolete syntax "Compl A"; use -A for set
  9385 complement;
  9386 
  9387 * HOL: the predicate "inj" is now defined by translation to "inj_on";
  9388 
  9389 * HOL/datatype: mutual_induct_tac no longer exists --
  9390   use induct_tac "x_1 ... x_n" instead of mutual_induct_tac ["x_1", ..., "x_n"]
  9391 
  9392 * HOL/typedef: fixed type inference for representing set; type
  9393 arguments now have to occur explicitly on the rhs as type constraints;
  9394 
  9395 * ZF: The con_defs part of an inductive definition may no longer refer
  9396 to constants declared in the same theory;
  9397 
  9398 * HOL, ZF: the function mk_cases, generated by the inductive
  9399 definition package, has lost an argument.  To simplify its result, it
  9400 uses the default simpset instead of a supplied list of theorems.
  9401 
  9402 * HOL/List: the constructors of type list are now Nil and Cons;
  9403 
  9404 * Simplifier: the type of the infix ML functions
  9405         setSSolver addSSolver setSolver addSolver
  9406 is now  simpset * solver -> simpset  where `solver' is a new abstract type
  9407 for packaging solvers. A solver is created via
  9408         mk_solver: string -> (thm list -> int -> tactic) -> solver
  9409 where the string argument is only a comment.
  9410 
  9411 
  9412 *** Proof tools ***
  9413 
  9414 * Provers/Arith/fast_lin_arith.ML contains a functor for creating a
  9415 decision procedure for linear arithmetic. Currently it is used for
  9416 types `nat', `int', and `real' in HOL (see below); it can, should and
  9417 will be instantiated for other types and logics as well.
  9418 
  9419 * The simplifier now accepts rewrite rules with flexible heads, eg
  9420      hom ?f ==> ?f(?x+?y) = ?f ?x + ?f ?y
  9421   They are applied like any rule with a non-pattern lhs, i.e. by first-order
  9422   matching.
  9423 
  9424 
  9425 *** General ***
  9426 
  9427 * New Isabelle/Isar subsystem provides an alternative to traditional
  9428 tactical theorem proving; together with the ProofGeneral/isar user
  9429 interface it offers an interactive environment for developing human
  9430 readable proof documents (Isar == Intelligible semi-automated
  9431 reasoning); for further information see isatool doc isar-ref,
  9432 src/HOL/Isar_examples and http://isabelle.in.tum.de/Isar/
  9433 
  9434 * improved and simplified presentation of theories: better HTML markup
  9435 (including colors), graph views in several sizes; isatool usedir now
  9436 provides a proper interface for user theories (via -P option); actual
  9437 document preparation based on (PDF)LaTeX is available as well (for
  9438 new-style theories only); see isatool doc system for more information;
  9439 
  9440 * native support for Proof General, both for classic Isabelle and
  9441 Isabelle/Isar;
  9442 
  9443 * ML function thm_deps visualizes dependencies of theorems and lemmas,
  9444 using the graph browser tool;
  9445 
  9446 * Isabelle manuals now also available as PDF;
  9447 
  9448 * theory loader rewritten from scratch (may not be fully
  9449 bug-compatible); old loadpath variable has been replaced by show_path,
  9450 add_path, del_path, reset_path functions; new operations such as
  9451 update_thy, touch_thy, remove_thy, use/update_thy_only (see also
  9452 isatool doc ref);
  9453 
  9454 * improved isatool install: option -k creates KDE application icon,
  9455 option -p DIR installs standalone binaries;
  9456 
  9457 * added ML_PLATFORM setting (useful for cross-platform installations);
  9458 more robust handling of platform specific ML images for SML/NJ;
  9459 
  9460 * the settings environment is now statically scoped, i.e. it is never
  9461 created again in sub-processes invoked from isabelle, isatool, or
  9462 Isabelle;
  9463 
  9464 * path element specification '~~' refers to '$ISABELLE_HOME';
  9465 
  9466 * in locales, the "assumes" and "defines" parts may be omitted if
  9467 empty;
  9468 
  9469 * new print_mode "xsymbols" for extended symbol support (e.g. genuine
  9470 long arrows);
  9471 
  9472 * new print_mode "HTML";
  9473 
  9474 * new flag show_tags controls display of tags of theorems (which are
  9475 basically just comments that may be attached by some tools);
  9476 
  9477 * Isamode 2.6 requires patch to accomodate change of Isabelle font
  9478 mode and goal output format:
  9479 
  9480 diff -r Isamode-2.6/elisp/isa-load.el Isamode/elisp/isa-load.el
  9481 244c244
  9482 <       (list (isa-getenv "ISABELLE") "-msymbols" logic-name)
  9483 ---
  9484 >       (list (isa-getenv "ISABELLE") "-misabelle_font" "-msymbols" logic-name)
  9485 diff -r Isabelle-2.6/elisp/isa-proofstate.el Isamode/elisp/isa-proofstate.el
  9486 181c181
  9487 < (defconst proofstate-proofstart-regexp "^Level [0-9]+$"
  9488 ---
  9489 > (defconst proofstate-proofstart-regexp "^Level [0-9]+"
  9490 
  9491 * function bind_thms stores lists of theorems (cf. bind_thm);
  9492 
  9493 * new shorthand tactics ftac, eatac, datac, fatac;
  9494 
  9495 * qed (and friends) now accept "" as result name; in that case the
  9496 theorem is not stored, but proper checks and presentation of the
  9497 result still apply;
  9498 
  9499 * theorem database now also indexes constants "Trueprop", "all",
  9500 "==>", "=="; thus thms_containing, findI etc. may retrieve more rules;
  9501 
  9502 
  9503 *** HOL ***
  9504 
  9505 ** HOL arithmetic **
  9506 
  9507 * There are now decision procedures for linear arithmetic over nat and
  9508 int:
  9509 
  9510 1. arith_tac copes with arbitrary formulae involving `=', `<', `<=',
  9511 `+', `-', `Suc', `min', `max' and numerical constants; other subterms
  9512 are treated as atomic; subformulae not involving type `nat' or `int'
  9513 are ignored; quantified subformulae are ignored unless they are
  9514 positive universal or negative existential. The tactic has to be
  9515 invoked by hand and can be a little bit slow. In particular, the
  9516 running time is exponential in the number of occurrences of `min' and
  9517 `max', and `-' on `nat'.
  9518 
  9519 2. fast_arith_tac is a cut-down version of arith_tac: it only takes
  9520 (negated) (in)equalities among the premises and the conclusion into
  9521 account (i.e. no compound formulae) and does not know about `min' and
  9522 `max', and `-' on `nat'. It is fast and is used automatically by the
  9523 simplifier.
  9524 
  9525 NB: At the moment, these decision procedures do not cope with mixed
  9526 nat/int formulae where the two parts interact, such as `m < n ==>
  9527 int(m) < int(n)'.
  9528 
  9529 * HOL/Numeral provides a generic theory of numerals (encoded
  9530 efficiently as bit strings); setup for types nat/int/real is in place;
  9531 INCOMPATIBILITY: since numeral syntax is now polymorphic, rather than
  9532 int, existing theories and proof scripts may require a few additional
  9533 type constraints;
  9534 
  9535 * integer division and remainder can now be performed on constant
  9536 arguments;
  9537 
  9538 * many properties of integer multiplication, division and remainder
  9539 are now available;
  9540 
  9541 * An interface to the Stanford Validity Checker (SVC) is available through the
  9542 tactic svc_tac.  Propositional tautologies and theorems of linear arithmetic
  9543 are proved automatically.  SVC must be installed separately, and its results
  9544 must be TAKEN ON TRUST (Isabelle does not check the proofs, but tags any
  9545 invocation of the underlying oracle).  For SVC see
  9546   http://verify.stanford.edu/SVC
  9547 
  9548 * IsaMakefile: the HOL-Real target now builds an actual image;
  9549 
  9550 
  9551 ** HOL misc **
  9552 
  9553 * HOL/Real/HahnBanach: the Hahn-Banach theorem for real vector spaces
  9554 (in Isabelle/Isar) -- by Gertrud Bauer;
  9555 
  9556 * HOL/BCV: generic model of bytecode verification, i.e. data-flow
  9557 analysis for assembly languages with subtypes;
  9558 
  9559 * HOL/TLA (Lamport's Temporal Logic of Actions): major reorganization
  9560 -- avoids syntactic ambiguities and treats state, transition, and
  9561 temporal levels more uniformly; introduces INCOMPATIBILITIES due to
  9562 changed syntax and (many) tactics;
  9563 
  9564 * HOL/inductive: Now also handles more general introduction rules such
  9565   as "ALL y. (y, x) : r --> y : acc r ==> x : acc r"; monotonicity
  9566   theorems are now maintained within the theory (maintained via the
  9567   "mono" attribute);
  9568 
  9569 * HOL/datatype: Now also handles arbitrarily branching datatypes
  9570   (using function types) such as
  9571 
  9572   datatype 'a tree = Atom 'a | Branch "nat => 'a tree"
  9573 
  9574 * HOL/record: record_simproc (part of the default simpset) takes care
  9575 of selectors applied to updated records; record_split_tac is no longer
  9576 part of the default claset; update_defs may now be removed from the
  9577 simpset in many cases; COMPATIBILITY: old behavior achieved by
  9578 
  9579   claset_ref () := claset() addSWrapper record_split_wrapper;
  9580   Delsimprocs [record_simproc]
  9581 
  9582 * HOL/typedef: fixed type inference for representing set; type
  9583 arguments now have to occur explicitly on the rhs as type constraints;
  9584 
  9585 * HOL/recdef (TFL): 'congs' syntax now expects comma separated list of theorem
  9586 names rather than an ML expression;
  9587 
  9588 * HOL/defer_recdef (TFL): like recdef but the well-founded relation can be
  9589 supplied later.  Program schemes can be defined, such as
  9590     "While B C s = (if B s then While B C (C s) else s)"
  9591 where the well-founded relation can be chosen after B and C have been given.
  9592 
  9593 * HOL/List: the constructors of type list are now Nil and Cons;
  9594 INCOMPATIBILITY: while [] and infix # syntax is still there, of
  9595 course, ML tools referring to List.list.op # etc. have to be adapted;
  9596 
  9597 * HOL_quantifiers flag superseded by "HOL" print mode, which is
  9598 disabled by default; run isabelle with option -m HOL to get back to
  9599 the original Gordon/HOL-style output;
  9600 
  9601 * HOL/Ord.thy: new bounded quantifier syntax (input only): ALL x<y. P,
  9602 ALL x<=y. P, EX x<y. P, EX x<=y. P;
  9603 
  9604 * HOL basic syntax simplified (more orthogonal): all variants of
  9605 All/Ex now support plain / symbolic / HOL notation; plain syntax for
  9606 Eps operator is provided as well: "SOME x. P[x]";
  9607 
  9608 * HOL/Sum.thy: sum_case has been moved to HOL/Datatype;
  9609 
  9610 * HOL/Univ.thy: infix syntax <*>, <+>, <**>, <+> eliminated and made
  9611 thus available for user theories;
  9612 
  9613 * HOLCF/IOA/Sequents: renamed 'Cons' to 'Consq' to avoid clash with
  9614 HOL/List; hardly an INCOMPATIBILITY since '>>' syntax is used all the
  9615 time;
  9616 
  9617 * HOL: new tactic smp_tac: int -> int -> tactic, which applies spec
  9618 several times and then mp;
  9619 
  9620 
  9621 *** LK ***
  9622 
  9623 * the notation <<...>> is now available as a notation for sequences of
  9624 formulas;
  9625 
  9626 * the simplifier is now installed
  9627 
  9628 * the axiom system has been generalized (thanks to Soren Heilmann)
  9629 
  9630 * the classical reasoner now has a default rule database
  9631 
  9632 
  9633 *** ZF ***
  9634 
  9635 * new primrec section allows primitive recursive functions to be given
  9636 directly (as in HOL) over datatypes and the natural numbers;
  9637 
  9638 * new tactics induct_tac and exhaust_tac for induction (or case
  9639 analysis) over datatypes and the natural numbers;
  9640 
  9641 * the datatype declaration of type T now defines the recursor T_rec;
  9642 
  9643 * simplification automatically does freeness reasoning for datatype
  9644 constructors;
  9645 
  9646 * automatic type-inference, with AddTCs command to insert new
  9647 type-checking rules;
  9648 
  9649 * datatype introduction rules are now added as Safe Introduction rules
  9650 to the claset;
  9651 
  9652 * the syntax "if P then x else y" is now available in addition to
  9653 if(P,x,y);
  9654 
  9655 
  9656 *** Internal programming interfaces ***
  9657 
  9658 * tuned simplifier trace output; new flag debug_simp;
  9659 
  9660 * structures Vartab / Termtab (instances of TableFun) offer efficient
  9661 tables indexed by indexname_ord / term_ord (compatible with aconv);
  9662 
  9663 * AxClass.axclass_tac lost the theory argument;
  9664 
  9665 * tuned current_goals_markers semantics: begin / end goal avoids
  9666 printing empty lines;
  9667 
  9668 * removed prs and prs_fn hook, which was broken because it did not
  9669 include \n in its semantics, forcing writeln to add one
  9670 uncoditionally; replaced prs_fn by writeln_fn; consider std_output:
  9671 string -> unit if you really want to output text without newline;
  9672 
  9673 * Symbol.output subject to print mode; INCOMPATIBILITY: defaults to
  9674 plain output, interface builders may have to enable 'isabelle_font'
  9675 mode to get Isabelle font glyphs as before;
  9676 
  9677 * refined token_translation interface; INCOMPATIBILITY: output length
  9678 now of type real instead of int;
  9679 
  9680 * theory loader actions may be traced via new ThyInfo.add_hook
  9681 interface (see src/Pure/Thy/thy_info.ML); example application: keep
  9682 your own database of information attached to *whole* theories -- as
  9683 opposed to intra-theory data slots offered via TheoryDataFun;
  9684 
  9685 * proper handling of dangling sort hypotheses (at last!);
  9686 Thm.strip_shyps and Drule.strip_shyps_warning take care of removing
  9687 extra sort hypotheses that can be witnessed from the type signature;
  9688 the force_strip_shyps flag is gone, any remaining shyps are simply
  9689 left in the theorem (with a warning issued by strip_shyps_warning);
  9690 
  9691 
  9692 
  9693 New in Isabelle98-1 (October 1998)
  9694 ----------------------------------
  9695 
  9696 *** Overview of INCOMPATIBILITIES (see below for more details) ***
  9697 
  9698 * several changes of automated proof tools;
  9699 
  9700 * HOL: major changes to the inductive and datatype packages, including
  9701 some minor incompatibilities of theory syntax;
  9702 
  9703 * HOL: renamed r^-1 to 'converse' from 'inverse'; 'inj_onto' is now
  9704 called `inj_on';
  9705 
  9706 * HOL: removed duplicate thms in Arith:
  9707   less_imp_add_less  should be replaced by  trans_less_add1
  9708   le_imp_add_le      should be replaced by  trans_le_add1
  9709 
  9710 * HOL: unary minus is now overloaded (new type constraints may be
  9711 required);
  9712 
  9713 * HOL and ZF: unary minus for integers is now #- instead of #~.  In
  9714 ZF, expressions such as n#-1 must be changed to n#- 1, since #-1 is
  9715 now taken as an integer constant.
  9716 
  9717 * Pure: ML function 'theory_of' renamed to 'theory';
  9718 
  9719 
  9720 *** Proof tools ***
  9721 
  9722 * Simplifier:
  9723   1. Asm_full_simp_tac is now more aggressive.
  9724      1. It will sometimes reorient premises if that increases their power to
  9725         simplify.
  9726      2. It does no longer proceed strictly from left to right but may also
  9727         rotate premises to achieve further simplification.
  9728      For compatibility reasons there is now Asm_lr_simp_tac which is like the
  9729      old Asm_full_simp_tac in that it does not rotate premises.
  9730   2. The simplifier now knows a little bit about nat-arithmetic.
  9731 
  9732 * Classical reasoner: wrapper mechanism for the classical reasoner now
  9733 allows for selected deletion of wrappers, by introduction of names for
  9734 wrapper functionals.  This implies that addbefore, addSbefore,
  9735 addaltern, and addSaltern now take a pair (name, tactic) as argument,
  9736 and that adding two tactics with the same name overwrites the first
  9737 one (emitting a warning).
  9738   type wrapper = (int -> tactic) -> (int -> tactic)
  9739   setWrapper, setSWrapper, compWrapper and compSWrapper are replaced by
  9740   addWrapper, addSWrapper: claset * (string * wrapper) -> claset
  9741   delWrapper, delSWrapper: claset *  string            -> claset
  9742   getWrapper is renamed to appWrappers, getSWrapper to appSWrappers;
  9743 
  9744 * Classical reasoner: addbefore/addSbefore now have APPEND/ORELSE
  9745 semantics; addbefore now affects only the unsafe part of step_tac
  9746 etc.; this affects addss/auto_tac/force_tac, so EXISTING PROOFS MAY
  9747 FAIL, but proofs should be fixable easily, e.g. by replacing Auto_tac
  9748 by Force_tac;
  9749 
  9750 * Classical reasoner: setwrapper to setWrapper and compwrapper to
  9751 compWrapper; added safe wrapper (and access functions for it);
  9752 
  9753 * HOL/split_all_tac is now much faster and fails if there is nothing
  9754 to split.  Some EXISTING PROOFS MAY REQUIRE ADAPTION because the order
  9755 and the names of the automatically generated variables have changed.
  9756 split_all_tac has moved within claset() from unsafe wrappers to safe
  9757 wrappers, which means that !!-bound variables are split much more
  9758 aggressively, and safe_tac and clarify_tac now split such variables.
  9759 If this splitting is not appropriate, use delSWrapper "split_all_tac".
  9760 Note: the same holds for record_split_tac, which does the job of
  9761 split_all_tac for record fields.
  9762 
  9763 * HOL/Simplifier: Rewrite rules for case distinctions can now be added
  9764 permanently to the default simpset using Addsplits just like
  9765 Addsimps. They can be removed via Delsplits just like
  9766 Delsimps. Lower-case versions are also available.
  9767 
  9768 * HOL/Simplifier: The rule split_if is now part of the default
  9769 simpset. This means that the simplifier will eliminate all occurrences
  9770 of if-then-else in the conclusion of a goal. To prevent this, you can
  9771 either remove split_if completely from the default simpset by
  9772 `Delsplits [split_if]' or remove it in a specific call of the
  9773 simplifier using `... delsplits [split_if]'.  You can also add/delete
  9774 other case splitting rules to/from the default simpset: every datatype
  9775 generates suitable rules `split_t_case' and `split_t_case_asm' (where
  9776 t is the name of the datatype).
  9777 
  9778 * Classical reasoner / Simplifier combination: new force_tac (and
  9779 derivatives Force_tac, force) combines rewriting and classical
  9780 reasoning (and whatever other tools) similarly to auto_tac, but is
  9781 aimed to solve the given subgoal completely.
  9782 
  9783 
  9784 *** General ***
  9785 
  9786 * new top-level commands `Goal' and `Goalw' that improve upon `goal'
  9787 and `goalw': the theory is no longer needed as an explicit argument -
  9788 the current theory context is used; assumptions are no longer returned
  9789 at the ML-level unless one of them starts with ==> or !!; it is
  9790 recommended to convert to these new commands using isatool fixgoal
  9791 (backup your sources first!);
  9792 
  9793 * new top-level commands 'thm' and 'thms' for retrieving theorems from
  9794 the current theory context, and 'theory' to lookup stored theories;
  9795 
  9796 * new theory section 'locale' for declaring constants, assumptions and
  9797 definitions that have local scope;
  9798 
  9799 * new theory section 'nonterminals' for purely syntactic types;
  9800 
  9801 * new theory section 'setup' for generic ML setup functions
  9802 (e.g. package initialization);
  9803 
  9804 * the distribution now includes Isabelle icons: see
  9805 lib/logo/isabelle-{small,tiny}.xpm;
  9806 
  9807 * isatool install - install binaries with absolute references to
  9808 ISABELLE_HOME/bin;
  9809 
  9810 * isatool logo -- create instances of the Isabelle logo (as EPS);
  9811 
  9812 * print mode 'emacs' reserved for Isamode;
  9813 
  9814 * support multiple print (ast) translations per constant name;
  9815 
  9816 * theorems involving oracles are now printed with a suffixed [!];
  9817 
  9818 
  9819 *** HOL ***
  9820 
  9821 * there is now a tutorial on Isabelle/HOL (do 'isatool doc tutorial');
  9822 
  9823 * HOL/inductive package reorganized and improved: now supports mutual
  9824 definitions such as
  9825 
  9826   inductive EVEN ODD
  9827     intrs
  9828       null "0 : EVEN"
  9829       oddI "n : EVEN ==> Suc n : ODD"
  9830       evenI "n : ODD ==> Suc n : EVEN"
  9831 
  9832 new theorem list "elims" contains an elimination rule for each of the
  9833 recursive sets; inductive definitions now handle disjunctive premises
  9834 correctly (also ZF);
  9835 
  9836 INCOMPATIBILITIES: requires Inductive as an ancestor; component
  9837 "mutual_induct" no longer exists - the induction rule is always
  9838 contained in "induct";
  9839 
  9840 
  9841 * HOL/datatype package re-implemented and greatly improved: now
  9842 supports mutually recursive datatypes such as
  9843 
  9844   datatype
  9845     'a aexp = IF_THEN_ELSE ('a bexp) ('a aexp) ('a aexp)
  9846             | SUM ('a aexp) ('a aexp)
  9847             | DIFF ('a aexp) ('a aexp)
  9848             | NUM 'a
  9849   and
  9850     'a bexp = LESS ('a aexp) ('a aexp)
  9851             | AND ('a bexp) ('a bexp)
  9852             | OR ('a bexp) ('a bexp)
  9853 
  9854 as well as indirectly recursive datatypes such as
  9855 
  9856   datatype
  9857     ('a, 'b) term = Var 'a
  9858                   | App 'b ((('a, 'b) term) list)
  9859 
  9860 The new tactic  mutual_induct_tac [<var_1>, ..., <var_n>] i  performs
  9861 induction on mutually / indirectly recursive datatypes.
  9862 
  9863 Primrec equations are now stored in theory and can be accessed via
  9864 <function_name>.simps.
  9865 
  9866 INCOMPATIBILITIES:
  9867 
  9868   - Theories using datatypes must now have theory Datatype as an
  9869     ancestor.
  9870   - The specific <typename>.induct_tac no longer exists - use the
  9871     generic induct_tac instead.
  9872   - natE has been renamed to nat.exhaust - use exhaust_tac
  9873     instead of res_inst_tac ... natE. Note that the variable
  9874     names in nat.exhaust differ from the names in natE, this
  9875     may cause some "fragile" proofs to fail.
  9876   - The theorems split_<typename>_case and split_<typename>_case_asm
  9877     have been renamed to <typename>.split and <typename>.split_asm.
  9878   - Since default sorts of type variables are now handled correctly,
  9879     some datatype definitions may have to be annotated with explicit
  9880     sort constraints.
  9881   - Primrec definitions no longer require function name and type
  9882     of recursive argument.
  9883 
  9884 Consider using isatool fixdatatype to adapt your theories and proof
  9885 scripts to the new package (backup your sources first!).
  9886 
  9887 
  9888 * HOL/record package: considerably improved implementation; now
  9889 includes concrete syntax for record types, terms, updates; theorems
  9890 for surjective pairing and splitting !!-bound record variables; proof
  9891 support is as follows:
  9892 
  9893   1) standard conversions (selectors or updates applied to record
  9894 constructor terms) are part of the standard simpset;
  9895 
  9896   2) inject equations of the form ((x, y) = (x', y')) == x=x' & y=y' are
  9897 made part of standard simpset and claset via addIffs;
  9898 
  9899   3) a tactic for record field splitting (record_split_tac) is part of
  9900 the standard claset (addSWrapper);
  9901 
  9902 To get a better idea about these rules you may retrieve them via
  9903 something like 'thms "foo.simps"' or 'thms "foo.iffs"', where "foo" is
  9904 the name of your record type.
  9905 
  9906 The split tactic 3) conceptually simplifies by the following rule:
  9907 
  9908   "(!!x. PROP ?P x) == (!!a b. PROP ?P (a, b))"
  9909 
  9910 Thus any record variable that is bound by meta-all will automatically
  9911 blow up into some record constructor term, consequently the
  9912 simplifications of 1), 2) apply.  Thus force_tac, auto_tac etc. shall
  9913 solve record problems automatically.
  9914 
  9915 
  9916 * reorganized the main HOL image: HOL/Integ and String loaded by
  9917 default; theory Main includes everything;
  9918 
  9919 * automatic simplification of integer sums and comparisons, using cancellation;
  9920 
  9921 * added option_map_eq_Some and not_Some_eq to the default simpset and claset;
  9922 
  9923 * added disj_not1 = "(~P | Q) = (P --> Q)" to the default simpset;
  9924 
  9925 * many new identities for unions, intersections, set difference, etc.;
  9926 
  9927 * expand_if, expand_split, expand_sum_case and expand_nat_case are now
  9928 called split_if, split_split, split_sum_case and split_nat_case (to go
  9929 with add/delsplits);
  9930 
  9931 * HOL/Prod introduces simplification procedure unit_eq_proc rewriting
  9932 (?x::unit) = (); this is made part of the default simpset, which COULD
  9933 MAKE EXISTING PROOFS FAIL under rare circumstances (consider
  9934 'Delsimprocs [unit_eq_proc];' as last resort); also note that
  9935 unit_abs_eta_conv is added in order to counter the effect of
  9936 unit_eq_proc on (%u::unit. f u), replacing it by f rather than by
  9937 %u.f();
  9938 
  9939 * HOL/Fun INCOMPATIBILITY: `inj_onto' is now called `inj_on' (which
  9940 makes more sense);
  9941 
  9942 * HOL/Set INCOMPATIBILITY: rule `equals0D' is now a well-formed destruct rule;
  9943   It and 'sym RS equals0D' are now in the default  claset, giving automatic
  9944   disjointness reasoning but breaking a few old proofs.
  9945 
  9946 * HOL/Relation INCOMPATIBILITY: renamed the relational operator r^-1
  9947 to 'converse' from 'inverse' (for compatibility with ZF and some
  9948 literature);
  9949 
  9950 * HOL/recdef can now declare non-recursive functions, with {} supplied as
  9951 the well-founded relation;
  9952 
  9953 * HOL/Set INCOMPATIBILITY: the complement of set A is now written -A instead of
  9954     Compl A.  The "Compl" syntax remains available as input syntax for this
  9955     release ONLY.
  9956 
  9957 * HOL/Update: new theory of function updates:
  9958     f(a:=b) == %x. if x=a then b else f x
  9959 may also be iterated as in f(a:=b,c:=d,...);
  9960 
  9961 * HOL/Vimage: new theory for inverse image of a function, syntax f-``B;
  9962 
  9963 * HOL/List:
  9964   - new function list_update written xs[i:=v] that updates the i-th
  9965     list position. May also be iterated as in xs[i:=a,j:=b,...].
  9966   - new function `upt' written [i..j(] which generates the list
  9967     [i,i+1,...,j-1], i.e. the upper bound is excluded. To include the upper
  9968     bound write [i..j], which is a shorthand for [i..j+1(].
  9969   - new lexicographic orderings and corresponding wellfoundedness theorems.
  9970 
  9971 * HOL/Arith:
  9972   - removed 'pred' (predecessor) function;
  9973   - generalized some theorems about n-1;
  9974   - many new laws about "div" and "mod";
  9975   - new laws about greatest common divisors (see theory ex/Primes);
  9976 
  9977 * HOL/Relation: renamed the relational operator r^-1 "converse"
  9978 instead of "inverse";
  9979 
  9980 * HOL/Induct/Multiset: a theory of multisets, including the wellfoundedness
  9981   of the multiset ordering;
  9982 
  9983 * directory HOL/Real: a construction of the reals using Dedekind cuts
  9984   (not included by default);
  9985 
  9986 * directory HOL/UNITY: Chandy and Misra's UNITY formalism;
  9987 
  9988 * directory HOL/Hoare: a new version of Hoare logic which permits many-sorted
  9989   programs, i.e. different program variables may have different types.
  9990 
  9991 * calling (stac rew i) now fails if "rew" has no effect on the goal
  9992   [previously, this check worked only if the rewrite rule was unconditional]
  9993   Now rew can involve either definitions or equalities (either == or =).
  9994 
  9995 
  9996 *** ZF ***
  9997 
  9998 * theory Main includes everything; INCOMPATIBILITY: theory ZF.thy contains
  9999   only the theorems proved on ZF.ML;
 10000 
 10001 * ZF INCOMPATIBILITY: rule `equals0D' is now a well-formed destruct rule;
 10002   It and 'sym RS equals0D' are now in the default  claset, giving automatic
 10003   disjointness reasoning but breaking a few old proofs.
 10004 
 10005 * ZF/Update: new theory of function updates
 10006     with default rewrite rule  f(x:=y) ` z = if(z=x, y, f`z)
 10007   may also be iterated as in f(a:=b,c:=d,...);
 10008 
 10009 * in  let x=t in u(x), neither t nor u(x) has to be an FOL term.
 10010 
 10011 * calling (stac rew i) now fails if "rew" has no effect on the goal
 10012   [previously, this check worked only if the rewrite rule was unconditional]
 10013   Now rew can involve either definitions or equalities (either == or =).
 10014 
 10015 * case_tac provided for compatibility with HOL
 10016     (like the old excluded_middle_tac, but with subgoals swapped)
 10017 
 10018 
 10019 *** Internal programming interfaces ***
 10020 
 10021 * Pure: several new basic modules made available for general use, see
 10022 also src/Pure/README;
 10023 
 10024 * improved the theory data mechanism to support encapsulation (data
 10025 kind name replaced by private Object.kind, acting as authorization
 10026 key); new type-safe user interface via functor TheoryDataFun; generic
 10027 print_data function becomes basically useless;
 10028 
 10029 * removed global_names compatibility flag -- all theory declarations
 10030 are qualified by default;
 10031 
 10032 * module Pure/Syntax now offers quote / antiquote translation
 10033 functions (useful for Hoare logic etc. with implicit dependencies);
 10034 see HOL/ex/Antiquote for an example use;
 10035 
 10036 * Simplifier now offers conversions (asm_)(full_)rewrite: simpset ->
 10037 cterm -> thm;
 10038 
 10039 * new tactical CHANGED_GOAL for checking that a tactic modifies a
 10040 subgoal;
 10041 
 10042 * Display.print_goals function moved to Locale.print_goals;
 10043 
 10044 * standard print function for goals supports current_goals_markers
 10045 variable for marking begin of proof, end of proof, start of goal; the
 10046 default is ("", "", ""); setting current_goals_markers := ("<proof>",
 10047 "</proof>", "<goal>") causes SGML like tagged proof state printing,
 10048 for example;
 10049 
 10050 
 10051 
 10052 New in Isabelle98 (January 1998)
 10053 --------------------------------
 10054 
 10055 *** Overview of INCOMPATIBILITIES (see below for more details) ***
 10056 
 10057 * changed lexical syntax of terms / types: dots made part of long
 10058 identifiers, e.g. "%x.x" no longer possible, should be "%x. x";
 10059 
 10060 * simpset (and claset) reference variable replaced by functions
 10061 simpset / simpset_ref;
 10062 
 10063 * no longer supports theory aliases (via merge) and non-trivial
 10064 implicit merge of thms' signatures;
 10065 
 10066 * most internal names of constants changed due to qualified names;
 10067 
 10068 * changed Pure/Sequence interface (see Pure/seq.ML);
 10069 
 10070 
 10071 *** General Changes ***
 10072 
 10073 * hierachically structured name spaces (for consts, types, axms, thms
 10074 etc.); new lexical class 'longid' (e.g. Foo.bar.x) may render much of
 10075 old input syntactically incorrect (e.g. "%x.x"); COMPATIBILITY:
 10076 isatool fixdots ensures space after dots (e.g. "%x. x"); set
 10077 long_names for fully qualified output names; NOTE: ML programs
 10078 (special tactics, packages etc.) referring to internal names may have
 10079 to be adapted to cope with fully qualified names; in case of severe
 10080 backward campatibility problems try setting 'global_names' at compile
 10081 time to have enrything declared within a flat name space; one may also
 10082 fine tune name declarations in theories via the 'global' and 'local'
 10083 section;
 10084 
 10085 * reimplemented the implicit simpset and claset using the new anytype
 10086 data filed in signatures; references simpset:simpset ref etc. are
 10087 replaced by functions simpset:unit->simpset and
 10088 simpset_ref:unit->simpset ref; COMPATIBILITY: use isatool fixclasimp
 10089 to patch your ML files accordingly;
 10090 
 10091 * HTML output now includes theory graph data for display with Java
 10092 applet or isatool browser; data generated automatically via isatool
 10093 usedir (see -i option, ISABELLE_USEDIR_OPTIONS);
 10094 
 10095 * defs may now be conditional; improved rewrite_goals_tac to handle
 10096 conditional equations;
 10097 
 10098 * defs now admits additional type arguments, using TYPE('a) syntax;
 10099 
 10100 * theory aliases via merge (e.g. M=A+B+C) no longer supported, always
 10101 creates a new theory node; implicit merge of thms' signatures is
 10102 restricted to 'trivial' ones; COMPATIBILITY: one may have to use
 10103 transfer:theory->thm->thm in (rare) cases;
 10104 
 10105 * improved handling of draft signatures / theories; draft thms (and
 10106 ctyps, cterms) are automatically promoted to real ones;
 10107 
 10108 * slightly changed interfaces for oracles: admit many per theory, named
 10109 (e.g. oracle foo = mlfun), additional name argument for invoke_oracle;
 10110 
 10111 * print_goals: optional output of const types (set show_consts and
 10112 show_types);
 10113 
 10114 * improved output of warnings (###) and errors (***);
 10115 
 10116 * subgoal_tac displays a warning if the new subgoal has type variables;
 10117 
 10118 * removed old README and Makefiles;
 10119 
 10120 * replaced print_goals_ref hook by print_current_goals_fn and result_error_fn;
 10121 
 10122 * removed obsolete init_pps and init_database;
 10123 
 10124 * deleted the obsolete tactical STATE, which was declared by
 10125     fun STATE tacfun st = tacfun st st;
 10126 
 10127 * cd and use now support path variables, e.g. $ISABELLE_HOME, or ~
 10128 (which abbreviates $HOME);
 10129 
 10130 * changed Pure/Sequence interface (see Pure/seq.ML); COMPATIBILITY:
 10131 use isatool fixseq to adapt your ML programs (this works for fully
 10132 qualified references to the Sequence structure only!);
 10133 
 10134 * use_thy no longer requires writable current directory; it always
 10135 reloads .ML *and* .thy file, if either one is out of date;
 10136 
 10137 
 10138 *** Classical Reasoner ***
 10139 
 10140 * Clarify_tac, clarify_tac, clarify_step_tac, Clarify_step_tac: new
 10141 tactics that use classical reasoning to simplify a subgoal without
 10142 splitting it into several subgoals;
 10143 
 10144 * Safe_tac: like safe_tac but uses the default claset;
 10145 
 10146 
 10147 *** Simplifier ***
 10148 
 10149 * added simplification meta rules:
 10150     (asm_)(full_)simplify: simpset -> thm -> thm;
 10151 
 10152 * simplifier.ML no longer part of Pure -- has to be loaded by object
 10153 logics (again);
 10154 
 10155 * added prems argument to simplification procedures;
 10156 
 10157 * HOL, FOL, ZF: added infix function `addsplits':
 10158   instead of `<simpset> setloop (split_tac <thms>)'
 10159   you can simply write `<simpset> addsplits <thms>'
 10160 
 10161 
 10162 *** Syntax ***
 10163 
 10164 * TYPE('a) syntax for type reflection terms;
 10165 
 10166 * no longer handles consts with name "" -- declare as 'syntax' instead;
 10167 
 10168 * pretty printer: changed order of mixfix annotation preference (again!);
 10169 
 10170 * Pure: fixed idt/idts vs. pttrn/pttrns syntactic categories;
 10171 
 10172 
 10173 *** HOL ***
 10174 
 10175 * HOL: there is a new splitter `split_asm_tac' that can be used e.g.
 10176   with `addloop' of the simplifier to faciliate case splitting in premises.
 10177 
 10178 * HOL/TLA: Stephan Merz's formalization of Lamport's Temporal Logic of Actions;
 10179 
 10180 * HOL/Auth: new protocol proofs including some for the Internet
 10181   protocol TLS;
 10182 
 10183 * HOL/Map: new theory of `maps' a la VDM;
 10184 
 10185 * HOL/simplifier: simplification procedures nat_cancel_sums for
 10186 cancelling out common nat summands from =, <, <= (in)equalities, or
 10187 differences; simplification procedures nat_cancel_factor for
 10188 cancelling common factor from =, <, <= (in)equalities over natural
 10189 sums; nat_cancel contains both kinds of procedures, it is installed by
 10190 default in Arith.thy -- this COULD MAKE EXISTING PROOFS FAIL;
 10191 
 10192 * HOL/simplifier: terms of the form
 10193   `? x. P1(x) & ... & Pn(x) & x=t & Q1(x) & ... Qn(x)'  (or t=x)
 10194   are rewritten to
 10195   `P1(t) & ... & Pn(t) & Q1(t) & ... Qn(t)',
 10196   and those of the form
 10197   `! x. P1(x) & ... & Pn(x) & x=t & Q1(x) & ... Qn(x) --> R(x)'  (or t=x)
 10198   are rewritten to
 10199   `P1(t) & ... & Pn(t) & Q1(t) & ... Qn(t) --> R(t)',
 10200 
 10201 * HOL/datatype
 10202   Each datatype `t' now comes with a theorem `split_t_case' of the form
 10203 
 10204   P(t_case f1 ... fn x) =
 10205      ( (!y1 ... ym1. x = C1 y1 ... ym1 --> P(f1 y1 ... ym1)) &
 10206         ...
 10207        (!y1 ... ymn. x = Cn y1 ... ymn --> P(f1 y1 ... ymn))
 10208      )
 10209 
 10210   and a theorem `split_t_case_asm' of the form
 10211 
 10212   P(t_case f1 ... fn x) =
 10213     ~( (? y1 ... ym1. x = C1 y1 ... ym1 & ~P(f1 y1 ... ym1)) |
 10214         ...
 10215        (? y1 ... ymn. x = Cn y1 ... ymn & ~P(f1 y1 ... ymn))
 10216      )
 10217   which can be added to a simpset via `addsplits'. The existing theorems
 10218   expand_list_case and expand_option_case have been renamed to
 10219   split_list_case and split_option_case.
 10220 
 10221 * HOL/Arithmetic:
 10222   - `pred n' is automatically converted to `n-1'.
 10223     Users are strongly encouraged not to use `pred' any longer,
 10224     because it will disappear altogether at some point.
 10225   - Users are strongly encouraged to write "0 < n" rather than
 10226     "n ~= 0". Theorems and proof tools have been modified towards this
 10227     `standard'.
 10228 
 10229 * HOL/Lists:
 10230   the function "set_of_list" has been renamed "set" (and its theorems too);
 10231   the function "nth" now takes its arguments in the reverse order and
 10232   has acquired the infix notation "!" as in "xs!n".
 10233 
 10234 * HOL/Set: UNIV is now a constant and is no longer translated to Compl{};
 10235 
 10236 * HOL/Set: The operator (UN x.B x) now abbreviates (UN x:UNIV. B x) and its
 10237   specialist theorems (like UN1_I) are gone.  Similarly for (INT x.B x);
 10238 
 10239 * HOL/record: extensible records with schematic structural subtyping
 10240 (single inheritance); EXPERIMENTAL version demonstrating the encoding,
 10241 still lacks various theorems and concrete record syntax;
 10242 
 10243 
 10244 *** HOLCF ***
 10245 
 10246 * removed "axioms" and "generated by" sections;
 10247 
 10248 * replaced "ops" section by extended "consts" section, which is capable of
 10249   handling the continuous function space "->" directly;
 10250 
 10251 * domain package:
 10252   . proves theorems immediately and stores them in the theory,
 10253   . creates hierachical name space,
 10254   . now uses normal mixfix annotations (instead of cinfix...),
 10255   . minor changes to some names and values (for consistency),
 10256   . e.g. cases -> casedist, dists_eq -> dist_eqs, [take_lemma] -> take_lemmas,
 10257   . separator between mutual domain defs: changed "," to "and",
 10258   . improved handling of sort constraints;  now they have to
 10259     appear on the left-hand side of the equations only;
 10260 
 10261 * fixed LAM <x,y,zs>.b syntax;
 10262 
 10263 * added extended adm_tac to simplifier in HOLCF -- can now discharge
 10264 adm (%x. P (t x)), where P is chainfinite and t continuous;
 10265 
 10266 
 10267 *** FOL and ZF ***
 10268 
 10269 * FOL: there is a new splitter `split_asm_tac' that can be used e.g.
 10270   with `addloop' of the simplifier to faciliate case splitting in premises.
 10271 
 10272 * qed_spec_mp, qed_goal_spec_mp, qed_goalw_spec_mp are available, as
 10273 in HOL, they strip ALL and --> from proved theorems;
 10274 
 10275 
 10276 
 10277 New in Isabelle94-8 (May 1997)
 10278 ------------------------------
 10279 
 10280 *** General Changes ***
 10281 
 10282 * new utilities to build / run / maintain Isabelle etc. (in parts
 10283 still somewhat experimental); old Makefiles etc. still functional;
 10284 
 10285 * new 'Isabelle System Manual';
 10286 
 10287 * INSTALL text, together with ./configure and ./build scripts;
 10288 
 10289 * reimplemented type inference for greater efficiency, better error
 10290 messages and clean internal interface;
 10291 
 10292 * prlim command for dealing with lots of subgoals (an easier way of
 10293 setting goals_limit);
 10294 
 10295 
 10296 *** Syntax ***
 10297 
 10298 * supports alternative (named) syntax tables (parser and pretty
 10299 printer); internal interface is provided by add_modesyntax(_i);
 10300 
 10301 * Pure, FOL, ZF, HOL, HOLCF now support symbolic input and output; to
 10302 be used in conjunction with the Isabelle symbol font; uses the
 10303 "symbols" syntax table;
 10304 
 10305 * added token_translation interface (may translate name tokens in
 10306 arbitrary ways, dependent on their type (free, bound, tfree, ...) and
 10307 the current print_mode); IMPORTANT: user print translation functions
 10308 are responsible for marking newly introduced bounds
 10309 (Syntax.mark_boundT);
 10310 
 10311 * token translations for modes "xterm" and "xterm_color" that display
 10312 names in bold, underline etc. or colors (which requires a color
 10313 version of xterm);
 10314 
 10315 * infixes may now be declared with names independent of their syntax;
 10316 
 10317 * added typed_print_translation (like print_translation, but may
 10318 access type of constant);
 10319 
 10320 
 10321 *** Classical Reasoner ***
 10322 
 10323 Blast_tac: a new tactic!  It is often more powerful than fast_tac, but has
 10324 some limitations.  Blast_tac...
 10325   + ignores addss, addbefore, addafter; this restriction is intrinsic
 10326   + ignores elimination rules that don't have the correct format
 10327         (the conclusion MUST be a formula variable)
 10328   + ignores types, which can make HOL proofs fail
 10329   + rules must not require higher-order unification, e.g. apply_type in ZF
 10330     [message "Function Var's argument not a bound variable" relates to this]
 10331   + its proof strategy is more general but can actually be slower
 10332 
 10333 * substitution with equality assumptions no longer permutes other
 10334 assumptions;
 10335 
 10336 * minor changes in semantics of addafter (now called addaltern); renamed
 10337 setwrapper to setWrapper and compwrapper to compWrapper; added safe wrapper
 10338 (and access functions for it);
 10339 
 10340 * improved combination of classical reasoner and simplifier:
 10341   + functions for handling clasimpsets
 10342   + improvement of addss: now the simplifier is called _after_ the
 10343     safe steps.
 10344   + safe variant of addss called addSss: uses safe simplifications
 10345     _during_ the safe steps. It is more complete as it allows multiple
 10346     instantiations of unknowns (e.g. with slow_tac).
 10347 
 10348 *** Simplifier ***
 10349 
 10350 * added interface for simplification procedures (functions that
 10351 produce *proven* rewrite rules on the fly, depending on current
 10352 redex);
 10353 
 10354 * ordering on terms as parameter (used for ordered rewriting);
 10355 
 10356 * new functions delcongs, deleqcongs, and Delcongs. richer rep_ss;
 10357 
 10358 * the solver is now split into a safe and an unsafe part.
 10359 This should be invisible for the normal user, except that the
 10360 functions setsolver and addsolver have been renamed to setSolver and
 10361 addSolver; added safe_asm_full_simp_tac;
 10362 
 10363 
 10364 *** HOL ***
 10365 
 10366 * a generic induction tactic `induct_tac' which works for all datatypes and
 10367 also for type `nat';
 10368 
 10369 * a generic case distinction tactic `exhaust_tac' which works for all
 10370 datatypes and also for type `nat';
 10371 
 10372 * each datatype comes with a function `size';
 10373 
 10374 * patterns in case expressions allow tuple patterns as arguments to
 10375 constructors, for example `case x of [] => ... | (x,y,z)#ps => ...';
 10376 
 10377 * primrec now also works with type nat;
 10378 
 10379 * recdef: a new declaration form, allows general recursive functions to be
 10380 defined in theory files.  See HOL/ex/Fib, HOL/ex/Primes, HOL/Subst/Unify.
 10381 
 10382 * the constant for negation has been renamed from "not" to "Not" to
 10383 harmonize with FOL, ZF, LK, etc.;
 10384 
 10385 * HOL/ex/LFilter theory of a corecursive "filter" functional for
 10386 infinite lists;
 10387 
 10388 * HOL/Modelcheck demonstrates invocation of model checker oracle;
 10389 
 10390 * HOL/ex/Ring.thy declares cring_simp, which solves equational
 10391 problems in commutative rings, using axiomatic type classes for + and *;
 10392 
 10393 * more examples in HOL/MiniML and HOL/Auth;
 10394 
 10395 * more default rewrite rules for quantifiers, union/intersection;
 10396 
 10397 * a new constant `arbitrary == @x.False';
 10398 
 10399 * HOLCF/IOA replaces old HOL/IOA;
 10400 
 10401 * HOLCF changes: derived all rules and arities
 10402   + axiomatic type classes instead of classes
 10403   + typedef instead of faking type definitions
 10404   + eliminated the internal constants less_fun, less_cfun, UU_fun, UU_cfun etc.
 10405   + new axclasses cpo, chfin, flat with flat < chfin < pcpo < cpo < po
 10406   + eliminated the types void, one, tr
 10407   + use unit lift and bool lift (with translations) instead of one and tr
 10408   + eliminated blift from Lift3.thy (use Def instead of blift)
 10409   all eliminated rules are derived as theorems --> no visible changes ;
 10410 
 10411 
 10412 *** ZF ***
 10413 
 10414 * ZF now has Fast_tac, Simp_tac and Auto_tac.  Union_iff is a now a default
 10415 rewrite rule; this may affect some proofs.  eq_cs is gone but can be put back
 10416 as ZF_cs addSIs [equalityI];
 10417 
 10418 
 10419 
 10420 New in Isabelle94-7 (November 96)
 10421 ---------------------------------
 10422 
 10423 * allowing negative levels (as offsets) in prlev and choplev;
 10424 
 10425 * super-linear speedup for large simplifications;
 10426 
 10427 * FOL, ZF and HOL now use miniscoping: rewriting pushes
 10428 quantifications in as far as possible (COULD MAKE EXISTING PROOFS
 10429 FAIL); can suppress it using the command Delsimps (ex_simps @
 10430 all_simps); De Morgan laws are also now included, by default;
 10431 
 10432 * improved printing of ==>  :  ~:
 10433 
 10434 * new object-logic "Sequents" adds linear logic, while replacing LK
 10435 and Modal (thanks to Sara Kalvala);
 10436 
 10437 * HOL/Auth: correctness proofs for authentication protocols;
 10438 
 10439 * HOL: new auto_tac combines rewriting and classical reasoning (many
 10440 examples on HOL/Auth);
 10441 
 10442 * HOL: new command AddIffs for declaring theorems of the form P=Q to
 10443 the rewriter and classical reasoner simultaneously;
 10444 
 10445 * function uresult no longer returns theorems in "standard" format;
 10446 regain previous version by: val uresult = standard o uresult;
 10447 
 10448 
 10449 
 10450 New in Isabelle94-6
 10451 -------------------
 10452 
 10453 * oracles -- these establish an interface between Isabelle and trusted
 10454 external reasoners, which may deliver results as theorems;
 10455 
 10456 * proof objects (in particular record all uses of oracles);
 10457 
 10458 * Simp_tac, Fast_tac, etc. that refer to implicit simpset / claset;
 10459 
 10460 * "constdefs" section in theory files;
 10461 
 10462 * "primrec" section (HOL) no longer requires names;
 10463 
 10464 * internal type "tactic" now simply "thm -> thm Sequence.seq";
 10465 
 10466 
 10467 
 10468 New in Isabelle94-5
 10469 -------------------
 10470 
 10471 * reduced space requirements;
 10472 
 10473 * automatic HTML generation from theories;
 10474 
 10475 * theory files no longer require "..." (quotes) around most types;
 10476 
 10477 * new examples, including two proofs of the Church-Rosser theorem;
 10478 
 10479 * non-curried (1994) version of HOL is no longer distributed;
 10480 
 10481 
 10482 
 10483 New in Isabelle94-4
 10484 -------------------
 10485 
 10486 * greatly reduced space requirements;
 10487 
 10488 * theory files (.thy) no longer require \...\ escapes at line breaks;
 10489 
 10490 * searchable theorem database (see the section "Retrieving theorems" on
 10491 page 8 of the Reference Manual);
 10492 
 10493 * new examples, including Grabczewski's monumental case study of the
 10494 Axiom of Choice;
 10495 
 10496 * The previous version of HOL renamed to Old_HOL;
 10497 
 10498 * The new version of HOL (previously called CHOL) uses a curried syntax
 10499 for functions.  Application looks like f a b instead of f(a,b);
 10500 
 10501 * Mutually recursive inductive definitions finally work in HOL;
 10502 
 10503 * In ZF, pattern-matching on tuples is now available in all abstractions and
 10504 translates to the operator "split";
 10505 
 10506 
 10507 
 10508 New in Isabelle94-3
 10509 -------------------
 10510 
 10511 * new infix operator, addss, allowing the classical reasoner to
 10512 perform simplification at each step of its search.  Example:
 10513         fast_tac (cs addss ss)
 10514 
 10515 * a new logic, CHOL, the same as HOL, but with a curried syntax
 10516 for functions.  Application looks like f a b instead of f(a,b).  Also pairs
 10517 look like (a,b) instead of <a,b>;
 10518 
 10519 * PLEASE NOTE: CHOL will eventually replace HOL!
 10520 
 10521 * In CHOL, pattern-matching on tuples is now available in all abstractions.
 10522 It translates to the operator "split".  A new theory of integers is available;
 10523 
 10524 * In ZF, integer numerals now denote two's-complement binary integers.
 10525 Arithmetic operations can be performed by rewriting.  See ZF/ex/Bin.ML;
 10526 
 10527 * Many new examples: I/O automata, Church-Rosser theorem, equivalents
 10528 of the Axiom of Choice;
 10529 
 10530 
 10531 
 10532 New in Isabelle94-2
 10533 -------------------
 10534 
 10535 * Significantly faster resolution;
 10536 
 10537 * the different sections in a .thy file can now be mixed and repeated
 10538 freely;
 10539 
 10540 * Database of theorems for FOL, HOL and ZF.  New
 10541 commands including qed, qed_goal and bind_thm store theorems in the database.
 10542 
 10543 * Simple database queries: return a named theorem (get_thm) or all theorems of
 10544 a given theory (thms_of), or find out what theory a theorem was proved in
 10545 (theory_of_thm);
 10546 
 10547 * Bugs fixed in the inductive definition and datatype packages;
 10548 
 10549 * The classical reasoner provides deepen_tac and depth_tac, making FOL_dup_cs
 10550 and HOL_dup_cs obsolete;
 10551 
 10552 * Syntactic ambiguities caused by the new treatment of syntax in Isabelle94-1
 10553 have been removed;
 10554 
 10555 * Simpler definition of function space in ZF;
 10556 
 10557 * new results about cardinal and ordinal arithmetic in ZF;
 10558 
 10559 * 'subtype' facility in HOL for introducing new types as subsets of existing
 10560 types;
 10561 
 10562 :mode=isabelle-news:wrap=hard:maxLineLen=72: