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