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