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