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