NEWS
 author Andreas Lochbihler Wed Nov 20 11:10:05 2013 +0100 (2013-11-20) changeset 54594 a2d1522cdd54 parent 54502 e7c9a14632d0 child 54533 05738b7d8191 permissions -rw-r--r--
setup lifting/transfer for String.literal
```     1 Isabelle NEWS -- history user-relevant changes
```
```     2 ==============================================
```
```     3
```
```     4 New in this Isabelle version
```
```     5 ----------------------------
```
```     6
```
```     7 *** HOL ***
```
```     8
```
```     9 * Qualified constant names Wellfounded.acc, Wellfounded.accp.
```
```    10 INCOMPATIBILITY.
```
```    11
```
```    12 * Fact generalization and consolidation:
```
```    13     neq_one_mod_two, mod_2_not_eq_zero_eq_one_int ~> not_mod_2_eq_0_eq_1
```
```    14 INCOMPATIBILITY.
```
```    15
```
```    16 * Purely algebraic definition of even.  Fact generalization and consolidation:
```
```    17     nat_even_iff_2_dvd, int_even_iff_2_dvd ~> even_iff_2_dvd
```
```    18     even_zero_(nat|int) ~> even_zero
```
```    19 INCOMPATIBILITY.
```
```    20
```
```    21 * Abolished neg_numeral.
```
```    22   * Canonical representation for minus one is "- 1".
```
```    23   * Canonical representation for other negative numbers is "- (numeral _)".
```
```    24   * When devising rule sets for number calculation, consider the
```
```    25     following cases: 0, 1, numeral _, - 1, - numeral _.
```
```    26   * Syntax for negative numerals is mere input syntax.
```
```    27 INCOMPATBILITY.
```
```    28
```
```    29 * Elimination of fact duplicates:
```
```    30     equals_zero_I ~> minus_unique
```
```    31     diff_eq_0_iff_eq ~> right_minus_eq
```
```    32 INCOMPATIBILITY.
```
```    33
```
```    34 * Fact name consolidation:
```
```    35     diff_def, diff_minus, ab_diff_minus ~> diff_conv_add_uminus
```
```    36     minus_le_self_iff ~> neg_less_eq_nonneg
```
```    37     le_minus_self_iff ~> less_eq_neg_nonpos
```
```    38     neg_less_nonneg ~> neg_less_pos
```
```    39     less_minus_self_iff ~> less_neg_neg [simp]
```
```    40 INCOMPATIBILITY.
```
```    41
```
```    42 * More simplification rules on unary and binary minus:
```
```    43 add_diff_cancel, add_diff_cancel_left, add_le_same_cancel1,
```
```    44 add_le_same_cancel2, add_less_same_cancel1, add_less_same_cancel2,
```
```    45 add_minus_cancel, diff_add_cancel, le_add_same_cancel1,
```
```    46 le_add_same_cancel2, less_add_same_cancel1, less_add_same_cancel2,
```
```    47 minus_add_cancel, uminus_add_conv_diff.  These correspondingly
```
```    48 have been taken away from fact collections algebra_simps and
```
```    49 field_simps.  INCOMPATIBILITY.
```
```    50
```
```    51 To restore proofs, the following patterns are helpful:
```
```    52
```
```    53 a) Arbitrary failing proof not involving "diff_def":
```
```    54 Consider simplification with algebra_simps or field_simps.
```
```    55
```
```    56 b) Lifting rules from addition to subtraction:
```
```    57 Try with "using <rule for addition> of [… "- _" …]" by simp".
```
```    58
```
```    59 c) Simplification with "diff_def": just drop "diff_def".
```
```    60 Consider simplification with algebra_simps or field_simps;
```
```    61 or the brute way with
```
```    62 "simp add: diff_conv_add_uminus del: add_uminus_conv_diff".
```
```    63
```
```    64 * SUP and INF generalized to conditionally_complete_lattice
```
```    65
```
```    66 * Theory Lubs moved HOL image to HOL-Library. It is replaced by
```
```    67 Conditionally_Complete_Lattices.   INCOMPATIBILITY.
```
```    68
```
```    69 * Introduce bdd_above and bdd_below in Conditionally_Complete_Lattices, use them
```
```    70 instead of explicitly stating boundedness of sets.
```
```    71
```
```    72
```
```    73 *** ML ***
```
```    74
```
```    75 * Toplevel function "use" refers to raw ML bootstrap environment,
```
```    76 without Isar context nor antiquotations.  Potential INCOMPATIBILITY.
```
```    77 Note that 'ML_file' is the canonical command to load ML files into the
```
```    78 formal context.
```
```    79
```
```    80
```
```    81
```
```    82 New in Isabelle2013-1 (November 2013)
```
```    83 -------------------------------------
```
```    84
```
```    85 *** General ***
```
```    86
```
```    87 * Discontinued obsolete 'uses' within theory header.  Note that
```
```    88 commands like 'ML_file' work without separate declaration of file
```
```    89 dependencies.  Minor INCOMPATIBILITY.
```
```    90
```
```    91 * Discontinued redundant 'use' command, which was superseded by
```
```    92 'ML_file' in Isabelle2013.  Minor INCOMPATIBILITY.
```
```    93
```
```    94 * Simplified subscripts within identifiers, using plain \<^sub>
```
```    95 instead of the second copy \<^isub> and \<^isup>.  Superscripts are
```
```    96 only for literal tokens within notation; explicit mixfix annotations
```
```    97 for consts or fixed variables may be used as fall-back for unusual
```
```    98 names.  Obsolete \<twosuperior> has been expanded to \<^sup>2 in
```
```    99 Isabelle/HOL.  INCOMPATIBILITY, use "isabelle update_sub_sup" to
```
```   100 standardize symbols as a starting point for further manual cleanup.
```
```   101 The ML reference variable "legacy_isub_isup" may be set as temporary
```
```   102 workaround, to make the prover accept a subset of the old identifier
```
```   103 syntax.
```
```   104
```
```   105 * Document antiquotations: term style "isub" has been renamed to
```
```   106 "sub".  Minor INCOMPATIBILITY.
```
```   107
```
```   108 * Uniform management of "quick_and_dirty" as system option (see also
```
```   109 "isabelle options"), configuration option within the context (see also
```
```   110 Config.get in Isabelle/ML), and attribute in Isabelle/Isar.  Minor
```
```   111 INCOMPATIBILITY, need to use more official Isabelle means to access
```
```   112 quick_and_dirty, instead of historical poking into mutable reference.
```
```   113
```
```   114 * Renamed command 'print_configs' to 'print_options'.  Minor
```
```   115 INCOMPATIBILITY.
```
```   116
```
```   117 * Proper diagnostic command 'print_state'.  Old 'pr' (with its
```
```   118 implicit change of some global references) is retained for now as
```
```   119 control command, e.g. for ProofGeneral 3.7.x.
```
```   120
```
```   121 * Discontinued 'print_drafts' command with its old-fashioned PS output
```
```   122 and Unix command-line print spooling.  Minor INCOMPATIBILITY: use
```
```   123 'display_drafts' instead and print via the regular document viewer.
```
```   124
```
```   125 * Updated and extended "isar-ref" and "implementation" manual,
```
```   126 eliminated old "ref" manual.
```
```   127
```
```   128
```
```   129 *** Prover IDE -- Isabelle/Scala/jEdit ***
```
```   130
```
```   131 * New manual "jedit" for Isabelle/jEdit, see isabelle doc or
```
```   132 Documentation panel.
```
```   133
```
```   134 * Dockable window "Documentation" provides access to Isabelle
```
```   135 documentation.
```
```   136
```
```   137 * Dockable window "Find" provides query operations for formal entities
```
```   138 (GUI front-end to 'find_theorems' command).
```
```   139
```
```   140 * Dockable window "Sledgehammer" manages asynchronous / parallel
```
```   141 sledgehammer runs over existing document sources, independently of
```
```   142 normal editing and checking process.
```
```   143
```
```   144 * Dockable window "Timing" provides an overview of relevant command
```
```   145 timing information, depending on option jedit_timing_threshold.  The
```
```   146 same timing information is shown in the extended tooltip of the
```
```   147 command keyword, when hovering the mouse over it while the CONTROL or
```
```   148 COMMAND modifier is pressed.
```
```   149
```
```   150 * Improved dockable window "Theories": Continuous checking of proof
```
```   151 document (visible and required parts) may be controlled explicitly,
```
```   152 using check box or shortcut "C+e ENTER".  Individual theory nodes may
```
```   153 be marked explicitly as required and checked in full, using check box
```
```   154 or shortcut "C+e SPACE".
```
```   155
```
```   156 * Improved completion mechanism, which is now managed by the
```
```   157 Isabelle/jEdit plugin instead of SideKick.  Refined table of Isabelle
```
```   158 symbol abbreviations (see \$ISABELLE_HOME/etc/symbols).
```
```   159
```
```   160 * Standard jEdit keyboard shortcut C+b complete-word is remapped to
```
```   161 isabelle.complete for explicit completion in Isabelle sources.
```
```   162 INCOMPATIBILITY wrt. jEdit defaults, may have to invent new shortcuts
```
```   163 to resolve conflict.
```
```   164
```
```   165 * Improved support of various "minor modes" for Isabelle NEWS,
```
```   166 options, session ROOT etc., with completion and SideKick tree view.
```
```   167
```
```   168 * Strictly monotonic document update, without premature cancellation of
```
```   169 running transactions that are still needed: avoid reset/restart of
```
```   170 such command executions while editing.
```
```   171
```
```   172 * Support for asynchronous print functions, as overlay to existing
```
```   173 document content.
```
```   174
```
```   175 * Support for automatic tools in HOL, which try to prove or disprove
```
```   176 toplevel theorem statements.
```
```   177
```
```   178 * Action isabelle.reset-font-size resets main text area font size
```
```   179 according to Isabelle/Scala plugin option "jedit_font_reset_size" (see
```
```   180 also "Plugin Options / Isabelle / General").  It can be bound to some
```
```   181 keyboard shortcut by the user (e.g. C+0 and/or C+NUMPAD0).
```
```   182
```
```   183 * File specifications in jEdit (e.g. file browser) may refer to
```
```   184 \$ISABELLE_HOME and \$ISABELLE_HOME_USER on all platforms.  Discontinued
```
```   185 obsolete \$ISABELLE_HOME_WINDOWS variable.
```
```   186
```
```   187 * Improved support for Linux look-and-feel "GTK+", see also "Utilities
```
```   188 / Global Options / Appearance".
```
```   189
```
```   190 * Improved support of native Mac OS X functionality via "MacOSX"
```
```   191 plugin, which is now enabled by default.
```
```   192
```
```   193
```
```   194 *** Pure ***
```
```   195
```
```   196 * Commands 'interpretation' and 'sublocale' are now target-sensitive.
```
```   197 In particular, 'interpretation' allows for non-persistent
```
```   198 interpretation within "context ... begin ... end" blocks offering a
```
```   199 light-weight alternative to 'sublocale'.  See "isar-ref" manual for
```
```   200 details.
```
```   201
```
```   202 * Improved locales diagnostic command 'print_dependencies'.
```
```   203
```
```   204 * Discontinued obsolete 'axioms' command, which has been marked as
```
```   205 legacy since Isabelle2009-2.  INCOMPATIBILITY, use 'axiomatization'
```
```   206 instead, while observing its uniform scope for polymorphism.
```
```   207
```
```   208 * Discontinued empty name bindings in 'axiomatization'.
```
```   209 INCOMPATIBILITY.
```
```   210
```
```   211 * System option "proofs" has been discontinued.  Instead the global
```
```   212 state of Proofterm.proofs is persistently compiled into logic images
```
```   213 as required, notably HOL-Proofs.  Users no longer need to change
```
```   214 Proofterm.proofs dynamically.  Minor INCOMPATIBILITY.
```
```   215
```
```   216 * Syntax translation functions (print_translation etc.) always depend
```
```   217 on Proof.context.  Discontinued former "(advanced)" option -- this is
```
```   218 now the default.  Minor INCOMPATIBILITY.
```
```   219
```
```   220 * Former global reference trace_unify_fail is now available as
```
```   221 configuration option "unify_trace_failure" (global context only).
```
```   222
```
```   223 * SELECT_GOAL now retains the syntactic context of the overall goal
```
```   224 state (schematic variables etc.).  Potential INCOMPATIBILITY in rare
```
```   225 situations.
```
```   226
```
```   227
```
```   228 *** HOL ***
```
```   229
```
```   230 * Stronger precedence of syntax for big intersection and union on
```
```   231 sets, in accordance with corresponding lattice operations.
```
```   232 INCOMPATIBILITY.
```
```   233
```
```   234 * Notation "{p:A. P}" now allows tuple patterns as well.
```
```   235
```
```   236 * Nested case expressions are now translated in a separate check phase
```
```   237 rather than during parsing. The data for case combinators is separated
```
```   238 from the datatype package. The declaration attribute
```
```   239 "case_translation" can be used to register new case combinators:
```
```   240
```
```   241   declare [[case_translation case_combinator constructor1 ... constructorN]]
```
```   242
```
```   243 * Code generator:
```
```   244   - 'code_printing' unifies 'code_const' / 'code_type' / 'code_class' /
```
```   245     'code_instance'.
```
```   246   - 'code_identifier' declares name hints for arbitrary identifiers in
```
```   247     generated code, subsuming 'code_modulename'.
```
```   248
```
```   249 See the isar-ref manual for syntax diagrams, and the HOL theories for
```
```   250 examples.
```
```   251
```
```   252 * Attibute 'code': 'code' now declares concrete and abstract code
```
```   253 equations uniformly.  Use explicit 'code equation' and 'code abstract'
```
```   254 to distinguish both when desired.
```
```   255
```
```   256 * Discontinued theories Code_Integer and Efficient_Nat by a more
```
```   257 fine-grain stack of theories Code_Target_Int, Code_Binary_Nat,
```
```   258 Code_Target_Nat and Code_Target_Numeral.  See the tutorial on code
```
```   259 generation for details.  INCOMPATIBILITY.
```
```   260
```
```   261 * Numeric types are mapped by default to target language numerals:
```
```   262 natural (replaces former code_numeral) and integer (replaces former
```
```   263 code_int).  Conversions are available as integer_of_natural /
```
```   264 natural_of_integer / integer_of_nat / nat_of_integer (in HOL) and
```
```   265 Code_Numeral.integer_of_natural / Code_Numeral.natural_of_integer (in
```
```   266 ML).  INCOMPATIBILITY.
```
```   267
```
```   268 * Function package: For mutually recursive functions f and g, separate
```
```   269 cases rules f.cases and g.cases are generated instead of unusable
```
```   270 f_g.cases which exposed internal sum types. Potential INCOMPATIBILITY,
```
```   271 in the case that the unusable rule was used nevertheless.
```
```   272
```
```   273 * Function package: For each function f, new rules f.elims are
```
```   274 generated, which eliminate equalities of the form "f x = t".
```
```   275
```
```   276 * New command 'fun_cases' derives ad-hoc elimination rules for
```
```   277 function equations as simplified instances of f.elims, analogous to
```
```   278 inductive_cases.  See ~~/src/HOL/ex/Fundefs.thy for some examples.
```
```   279
```
```   280 * Lifting:
```
```   281   - parametrized correspondence relations are now supported:
```
```   282     + parametricity theorems for the raw term can be specified in
```
```   283       the command lift_definition, which allow us to generate stronger
```
```   284       transfer rules
```
```   285     + setup_lifting generates stronger transfer rules if parametric
```
```   286       correspondence relation can be generated
```
```   287     + various new properties of the relator must be specified to support
```
```   288       parametricity
```
```   289     + parametricity theorem for the Quotient relation can be specified
```
```   290   - setup_lifting generates domain rules for the Transfer package
```
```   291   - stronger reflexivity prover of respectfulness theorems for type
```
```   292     copies
```
```   293   - ===> and --> are now local. The symbols can be introduced
```
```   294     by interpreting the locale lifting_syntax (typically in an
```
```   295     anonymous context)
```
```   296   - Lifting/Transfer relevant parts of Library/Quotient_* are now in
```
```   297     Main. Potential INCOMPATIBILITY
```
```   298   - new commands for restoring and deleting Lifting/Transfer context:
```
```   299     lifting_forget, lifting_update
```
```   300   - the command print_quotmaps was renamed to print_quot_maps.
```
```   301     INCOMPATIBILITY
```
```   302
```
```   303 * Transfer:
```
```   304   - better support for domains in Transfer: replace Domainp T
```
```   305     by the actual invariant in a transferred goal
```
```   306   - transfer rules can have as assumptions other transfer rules
```
```   307   - Experimental support for transferring from the raw level to the
```
```   308     abstract level: Transfer.transferred attribute
```
```   309   - Attribute version of the transfer method: untransferred attribute
```
```   310
```
```   311 * Reification and reflection:
```
```   312   - Reification is now directly available in HOL-Main in structure
```
```   313     "Reification".
```
```   314   - Reflection now handles multiple lists with variables also.
```
```   315   - The whole reflection stack has been decomposed into conversions.
```
```   316 INCOMPATIBILITY.
```
```   317
```
```   318 * Revised devices for recursive definitions over finite sets:
```
```   319   - Only one fundamental fold combinator on finite set remains:
```
```   320     Finite_Set.fold :: ('a => 'b => 'b) => 'b => 'a set => 'b
```
```   321     This is now identity on infinite sets.
```
```   322   - Locales ("mini packages") for fundamental definitions with
```
```   323     Finite_Set.fold: folding, folding_idem.
```
```   324   - Locales comm_monoid_set, semilattice_order_set and
```
```   325     semilattice_neutr_order_set for big operators on sets.
```
```   326     See theory Big_Operators for canonical examples.
```
```   327     Note that foundational constants comm_monoid_set.F and
```
```   328     semilattice_set.F correspond to former combinators fold_image
```
```   329     and fold1 respectively.  These are now gone.  You may use
```
```   330     those foundational constants as substitutes, but it is
```
```   331     preferable to interpret the above locales accordingly.
```
```   332   - Dropped class ab_semigroup_idem_mult (special case of lattice,
```
```   333     no longer needed in connection with Finite_Set.fold etc.)
```
```   334   - Fact renames:
```
```   335       card.union_inter ~> card_Un_Int [symmetric]
```
```   336       card.union_disjoint ~> card_Un_disjoint
```
```   337 INCOMPATIBILITY.
```
```   338
```
```   339 * Locale hierarchy for abstract orderings and (semi)lattices.
```
```   340
```
```   341 * Complete_Partial_Order.admissible is defined outside the type class
```
```   342 ccpo, but with mandatory prefix ccpo. Admissibility theorems lose the
```
```   343 class predicate assumption or sort constraint when possible.
```
```   344 INCOMPATIBILITY.
```
```   345
```
```   346 * Introduce type class "conditionally_complete_lattice": Like a
```
```   347 complete lattice but does not assume the existence of the top and
```
```   348 bottom elements.  Allows to generalize some lemmas about reals and
```
```   349 extended reals.  Removed SupInf and replaced it by the instantiation
```
```   350 of conditionally_complete_lattice for real. Renamed lemmas about
```
```   351 conditionally-complete lattice from Sup_... to cSup_... and from
```
```   352 Inf_...  to cInf_... to avoid hidding of similar complete lattice
```
```   353 lemmas.
```
```   354
```
```   355 * Introduce type class linear_continuum as combination of
```
```   356 conditionally-complete lattices and inner dense linorders which have
```
```   357 more than one element.  INCOMPATIBILITY.
```
```   358
```
```   359 * Introduced type classes order_top and order_bot. The old classes top
```
```   360 and bot only contain the syntax without assumptions.  INCOMPATIBILITY:
```
```   361 Rename bot -> order_bot, top -> order_top
```
```   362
```
```   363 * Introduce type classes "no_top" and "no_bot" for orderings without
```
```   364 top and bottom elements.
```
```   365
```
```   366 * Split dense_linorder into inner_dense_order and no_top, no_bot.
```
```   367
```
```   368 * Complex_Main: Unify and move various concepts from
```
```   369 HOL-Multivariate_Analysis to HOL-Complex_Main.
```
```   370
```
```   371  - Introduce type class (lin)order_topology and
```
```   372    linear_continuum_topology.  Allows to generalize theorems about
```
```   373    limits and order.  Instances are reals and extended reals.
```
```   374
```
```   375  - continuous and continuos_on from Multivariate_Analysis:
```
```   376    "continuous" is the continuity of a function at a filter.  "isCont"
```
```   377    is now an abbrevitation: "isCont x f == continuous (at _) f".
```
```   378
```
```   379    Generalized continuity lemmas from isCont to continuous on an
```
```   380    arbitrary filter.
```
```   381
```
```   382  - compact from Multivariate_Analysis. Use Bolzano's lemma to prove
```
```   383    compactness of closed intervals on reals. Continuous functions
```
```   384    attain infimum and supremum on compact sets. The inverse of a
```
```   385    continuous function is continuous, when the function is continuous
```
```   386    on a compact set.
```
```   387
```
```   388  - connected from Multivariate_Analysis. Use it to prove the
```
```   389    intermediate value theorem. Show connectedness of intervals on
```
```   390    linear_continuum_topology).
```
```   391
```
```   392  - first_countable_topology from Multivariate_Analysis. Is used to
```
```   393    show equivalence of properties on the neighbourhood filter of x and
```
```   394    on all sequences converging to x.
```
```   395
```
```   396  - FDERIV: Definition of has_derivative moved to Deriv.thy. Moved
```
```   397    theorems from Library/FDERIV.thy to Deriv.thy and base the
```
```   398    definition of DERIV on FDERIV. Add variants of DERIV and FDERIV
```
```   399    which are restricted to sets, i.e. to represent derivatives from
```
```   400    left or right.
```
```   401
```
```   402  - Removed the within-filter. It is replaced by the principal filter:
```
```   403
```
```   404      F within X = inf F (principal X)
```
```   405
```
```   406  - Introduce "at x within U" as a single constant, "at x" is now an
```
```   407    abbreviation for "at x within UNIV"
```
```   408
```
```   409  - Introduce named theorem collections tendsto_intros,
```
```   410    continuous_intros, continuous_on_intros and FDERIV_intros. Theorems
```
```   411    in tendsto_intros (or FDERIV_intros) are also available as
```
```   412    tendsto_eq_intros (or FDERIV_eq_intros) where the right-hand side
```
```   413    is replaced by a congruence rule. This allows to apply them as
```
```   414    intro rules and then proving equivalence by the simplifier.
```
```   415
```
```   416  - Restructured theories in HOL-Complex_Main:
```
```   417
```
```   418    + Moved RealDef and RComplete into Real
```
```   419
```
```   420    + Introduced Topological_Spaces and moved theorems about
```
```   421      topological spaces, filters, limits and continuity to it
```
```   422
```
```   423    + Renamed RealVector to Real_Vector_Spaces
```
```   424
```
```   425    + Split Lim, SEQ, Series into Topological_Spaces,
```
```   426      Real_Vector_Spaces, and Limits
```
```   427
```
```   428    + Moved Ln and Log to Transcendental
```
```   429
```
```   430    + Moved theorems about continuity from Deriv to Topological_Spaces
```
```   431
```
```   432  - Remove various auxiliary lemmas.
```
```   433
```
```   434 INCOMPATIBILITY.
```
```   435
```
```   436 * Nitpick:
```
```   437   - Added option "spy"
```
```   438   - Reduce incidence of "too high arity" errors
```
```   439
```
```   440 * Sledgehammer:
```
```   441   - Renamed option:
```
```   442       isar_shrink ~> isar_compress
```
```   443     INCOMPATIBILITY.
```
```   444   - Added options "isar_try0", "spy"
```
```   445   - Better support for "isar_proofs"
```
```   446   - MaSh has been fined-tuned and now runs as a local server
```
```   447
```
```   448 * Improved support for ad hoc overloading of constants (see also
```
```   449 isar-ref manual and ~~/src/HOL/ex/Adhoc_Overloading_Examples.thy).
```
```   450
```
```   451 * Library/Polynomial.thy:
```
```   452   - Use lifting for primitive definitions.
```
```   453   - Explicit conversions from and to lists of coefficients, used for
```
```   454     generated code.
```
```   455   - Replaced recursion operator poly_rec by fold_coeffs.
```
```   456   - Prefer pre-existing gcd operation for gcd.
```
```   457   - Fact renames:
```
```   458     poly_eq_iff ~> poly_eq_poly_eq_iff
```
```   459     poly_ext ~> poly_eqI
```
```   460     expand_poly_eq ~> poly_eq_iff
```
```   461 IMCOMPATIBILITY.
```
```   462
```
```   463 * New Library/Simps_Case_Conv.thy: Provides commands simps_of_case and
```
```   464 case_of_simps to convert function definitions between a list of
```
```   465 equations with patterns on the lhs and a single equation with case
```
```   466 expressions on the rhs. See also Ex/Simps_Case_Conv_Examples.thy.
```
```   467
```
```   468 * New Library/FSet.thy: type of finite sets defined as a subtype of
```
```   469 sets defined by Lifting/Transfer.
```
```   470
```
```   471 * Discontinued theory src/HOL/Library/Eval_Witness.  INCOMPATIBILITY.
```
```   472
```
```   473 * Consolidation of library theories on product orders:
```
```   474
```
```   475     Product_Lattice ~> Product_Order -- pointwise order on products
```
```   476     Product_ord ~> Product_Lexorder -- lexicographic order on products
```
```   477
```
```   478 INCOMPATIBILITY.
```
```   479
```
```   480 * Imperative-HOL: The MREC combinator is considered legacy and no
```
```   481 longer included by default. INCOMPATIBILITY, use partial_function
```
```   482 instead, or import theory Legacy_Mrec as a fallback.
```
```   483
```
```   484 * HOL-Algebra: Discontinued theories ~~/src/HOL/Algebra/abstract and
```
```   485 ~~/src/HOL/Algebra/poly.  Existing theories should be based on
```
```   486 ~~/src/HOL/Library/Polynomial instead.  The latter provides
```
```   487 integration with HOL's type classes for rings.  INCOMPATIBILITY.
```
```   488
```
```   489 * HOL-BNF:
```
```   490   - Various improvements to BNF-based (co)datatype package, including
```
```   491     new commands "primrec_new", "primcorec", and
```
```   492     "datatype_new_compat", as well as documentation. See
```
```   493     "datatypes.pdf" for details.
```
```   494   - New "coinduction" method to avoid some boilerplate (compared to
```
```   495     coinduct).
```
```   496   - Renamed keywords:
```
```   497     data ~> datatype_new
```
```   498     codata ~> codatatype
```
```   499     bnf_def ~> bnf
```
```   500   - Renamed many generated theorems, including
```
```   501     discs ~> disc
```
```   502     map_comp' ~> map_comp
```
```   503     map_id' ~> map_id
```
```   504     sels ~> sel
```
```   505     set_map' ~> set_map
```
```   506     sets ~> set
```
```   507 IMCOMPATIBILITY.
```
```   508
```
```   509
```
```   510 *** ML ***
```
```   511
```
```   512 * Spec_Check is a Quickcheck tool for Isabelle/ML.  The ML function
```
```   513 "check_property" allows to check specifications of the form "ALL x y
```
```   514 z. prop x y z".  See also ~~/src/Tools/Spec_Check/ with its
```
```   515 Examples.thy in particular.
```
```   516
```
```   517 * Improved printing of exception trace in Poly/ML 5.5.1, with regular
```
```   518 tracing output in the command transaction context instead of physical
```
```   519 stdout.  See also Toplevel.debug, Toplevel.debugging and
```
```   520 ML_Compiler.exn_trace.
```
```   521
```
```   522 * ML type "theory" is now immutable, without any special treatment of
```
```   523 drafts or linear updates (which could lead to "stale theory" errors in
```
```   524 the past).  Discontinued obsolete operations like Theory.copy,
```
```   525 Theory.checkpoint, and the auxiliary type theory_ref.  Minor
```
```   526 INCOMPATIBILITY.
```
```   527
```
```   528 * More uniform naming of goal functions for skipped proofs:
```
```   529
```
```   530     Skip_Proof.prove  ~>  Goal.prove_sorry
```
```   531     Skip_Proof.prove_global  ~>  Goal.prove_sorry_global
```
```   532
```
```   533 Minor INCOMPATIBILITY.
```
```   534
```
```   535 * Simplifier tactics and tools use proper Proof.context instead of
```
```   536 historic type simpset.  Old-style declarations like addsimps,
```
```   537 addsimprocs etc. operate directly on Proof.context.  Raw type simpset
```
```   538 retains its use as snapshot of the main Simplifier context, using
```
```   539 simpset_of and put_simpset on Proof.context.  INCOMPATIBILITY -- port
```
```   540 old tools by making them depend on (ctxt : Proof.context) instead of
```
```   541 (ss : simpset), then turn (simpset_of ctxt) into ctxt.
```
```   542
```
```   543 * Modifiers for classical wrappers (e.g. addWrapper, delWrapper)
```
```   544 operate on Proof.context instead of claset, for uniformity with addIs,
```
```   545 addEs, addDs etc. Note that claset_of and put_claset allow to manage
```
```   546 clasets separately from the context.
```
```   547
```
```   548 * Discontinued obsolete ML antiquotations @{claset} and @{simpset}.
```
```   549 INCOMPATIBILITY, use @{context} instead.
```
```   550
```
```   551 * Antiquotation @{theory_context A} is similar to @{theory A}, but
```
```   552 presents the result as initial Proof.context.
```
```   553
```
```   554
```
```   555 *** System ***
```
```   556
```
```   557 * Discontinued obsolete isabelle usedir, mkdir, make -- superseded by
```
```   558 "isabelle build" in Isabelle2013.  INCOMPATIBILITY.
```
```   559
```
```   560 * Discontinued obsolete isabelle-process options -f and -u (former
```
```   561 administrative aliases of option -e).  Minor INCOMPATIBILITY.
```
```   562
```
```   563 * Discontinued obsolete isabelle print tool, and PRINT_COMMAND
```
```   564 settings variable.
```
```   565
```
```   566 * Discontinued ISABELLE_DOC_FORMAT settings variable and historic
```
```   567 document formats: dvi.gz, ps, ps.gz -- the default document format is
```
```   568 always pdf.
```
```   569
```
```   570 * Isabelle settings variable ISABELLE_BUILD_JAVA_OPTIONS allows to
```
```   571 specify global resources of the JVM process run by isabelle build.
```
```   572
```
```   573 * Toplevel executable \$ISABELLE_HOME/bin/isabelle_scala_script allows
```
```   574 to run Isabelle/Scala source files as standalone programs.
```
```   575
```
```   576 * Improved "isabelle keywords" tool (for old-style ProofGeneral
```
```   577 keyword tables): use Isabelle/Scala operations, which inspect outer
```
```   578 syntax without requiring to build sessions first.
```
```   579
```
```   580 * Sessions may be organized via 'chapter' specifications in the ROOT
```
```   581 file, which determines a two-level hierarchy of browser info.  The old
```
```   582 tree-like organization via implicit sub-session relation (with its
```
```   583 tendency towards erratic fluctuation of URLs) has been discontinued.
```
```   584 The default chapter is called "Unsorted".  Potential INCOMPATIBILITY
```
```   585 for HTML presentation of theories.
```
```   586
```
```   587
```
```   588
```
```   589 New in Isabelle2013 (February 2013)
```
```   590 -----------------------------------
```
```   591
```
```   592 *** General ***
```
```   593
```
```   594 * Theorem status about oracles and unfinished/failed future proofs is
```
```   595 no longer printed by default, since it is incompatible with
```
```   596 incremental / parallel checking of the persistent document model.  ML
```
```   597 function Thm.peek_status may be used to inspect a snapshot of the
```
```   598 ongoing evaluation process.  Note that in batch mode --- notably
```
```   599 isabelle build --- the system ensures that future proofs of all
```
```   600 accessible theorems in the theory context are finished (as before).
```
```   601
```
```   602 * Configuration option show_markup controls direct inlining of markup
```
```   603 into the printed representation of formal entities --- notably type
```
```   604 and sort constraints.  This enables Prover IDE users to retrieve that
```
```   605 information via tooltips in the output window, for example.
```
```   606
```
```   607 * Command 'ML_file' evaluates ML text from a file directly within the
```
```   608 theory, without any predeclaration via 'uses' in the theory header.
```
```   609
```
```   610 * Old command 'use' command and corresponding keyword 'uses' in the
```
```   611 theory header are legacy features and will be discontinued soon.
```
```   612 Tools that load their additional source files may imitate the
```
```   613 'ML_file' implementation, such that the system can take care of
```
```   614 dependencies properly.
```
```   615
```
```   616 * Discontinued obsolete method fastsimp / tactic fast_simp_tac, which
```
```   617 is called fastforce / fast_force_tac already since Isabelle2011-1.
```
```   618
```
```   619 * Updated and extended "isar-ref" and "implementation" manual, reduced
```
```   620 remaining material in old "ref" manual.
```
```   621
```
```   622 * Improved support for auxiliary contexts that indicate block structure
```
```   623 for specifications.  Nesting of "context fixes ... context assumes ..."
```
```   624 and "class ... context ...".
```
```   625
```
```   626 * Attribute "consumes" allows a negative value as well, which is
```
```   627 interpreted relatively to the total number of premises of the rule in
```
```   628 the target context.  This form of declaration is stable when exported
```
```   629 from a nested 'context' with additional assumptions.  It is the
```
```   630 preferred form for definitional packages, notably cases/rules produced
```
```   631 in HOL/inductive and HOL/function.
```
```   632
```
```   633 * More informative error messages for Isar proof commands involving
```
```   634 lazy enumerations (method applications etc.).
```
```   635
```
```   636 * Refined 'help' command to retrieve outer syntax commands according
```
```   637 to name patterns (with clickable results).
```
```   638
```
```   639
```
```   640 *** Prover IDE -- Isabelle/Scala/jEdit ***
```
```   641
```
```   642 * Parallel terminal proofs ('by') are enabled by default, likewise
```
```   643 proofs that are built into packages like 'datatype', 'function'.  This
```
```   644 allows to "run ahead" checking the theory specifications on the
```
```   645 surface, while the prover is still crunching on internal
```
```   646 justifications.  Unfinished / cancelled proofs are restarted as
```
```   647 required to complete full proof checking eventually.
```
```   648
```
```   649 * Improved output panel with tooltips, hyperlinks etc. based on the
```
```   650 same Rich_Text_Area as regular Isabelle/jEdit buffers.  Activation of
```
```   651 tooltips leads to some window that supports the same recursively,
```
```   652 which can lead to stacks of tooltips as the semantic document content
```
```   653 is explored.  ESCAPE closes the whole stack, individual windows may be
```
```   654 closed separately, or detached to become independent jEdit dockables.
```
```   655
```
```   656 * Improved support for commands that produce graph output: the text
```
```   657 message contains a clickable area to open a new instance of the graph
```
```   658 browser on demand.
```
```   659
```
```   660 * More robust incremental parsing of outer syntax (partial comments,
```
```   661 malformed symbols).  Changing the balance of open/close quotes and
```
```   662 comment delimiters works more conveniently with unfinished situations
```
```   663 that frequently occur in user interaction.
```
```   664
```
```   665 * More efficient painting and improved reactivity when editing large
```
```   666 files.  More scalable management of formal document content.
```
```   667
```
```   668 * Smarter handling of tracing messages: prover process pauses after
```
```   669 certain number of messages per command transaction, with some user
```
```   670 dialog to stop or continue.  This avoids swamping the front-end with
```
```   671 potentially infinite message streams.
```
```   672
```
```   673 * More plugin options and preferences, based on Isabelle/Scala.  The
```
```   674 jEdit plugin option panel provides access to some Isabelle/Scala
```
```   675 options, including tuning parameters for editor reactivity and color
```
```   676 schemes.
```
```   677
```
```   678 * Dockable window "Symbols" provides some editing support for Isabelle
```
```   679 symbols.
```
```   680
```
```   681 * Dockable window "Monitor" shows ML runtime statistics.  Note that
```
```   682 continuous display of the chart slows down the system.
```
```   683
```
```   684 * Improved editing support for control styles: subscript, superscript,
```
```   685 bold, reset of style -- operating on single symbols or text
```
```   686 selections.  Cf. keyboard shortcuts C+e DOWN/UP/RIGHT/LEFT.
```
```   687
```
```   688 * Actions isabelle.increase-font-size and isabelle.decrease-font-size
```
```   689 adjust the main text area font size, and its derivatives for output,
```
```   690 tooltips etc.  Cf. keyboard shortcuts C-PLUS and C-MINUS, which often
```
```   691 need to be adapted to local keyboard layouts.
```
```   692
```
```   693 * More reactive completion popup by default: use \t (TAB) instead of
```
```   694 \n (NEWLINE) to minimize intrusion into regular flow of editing.  See
```
```   695 also "Plugin Options / SideKick / General / Code Completion Options".
```
```   696
```
```   697 * Implicit check and build dialog of the specified logic session
```
```   698 image.  For example, HOL, HOLCF, HOL-Nominal can be produced on
```
```   699 demand, without bundling big platform-dependent heap images in the
```
```   700 Isabelle distribution.
```
```   701
```
```   702 * Uniform Java 7 platform on Linux, Mac OS X, Windows: recent updates
```
```   703 from Oracle provide better multi-platform experience.  This version is
```
```   704 now bundled exclusively with Isabelle.
```
```   705
```
```   706
```
```   707 *** Pure ***
```
```   708
```
```   709 * Code generation for Haskell: restrict unqualified imports from
```
```   710 Haskell Prelude to a small set of fundamental operations.
```
```   711
```
```   712 * Command 'export_code': relative file names are interpreted
```
```   713 relatively to master directory of current theory rather than the
```
```   714 rather arbitrary current working directory.  INCOMPATIBILITY.
```
```   715
```
```   716 * Discontinued obsolete attribute "COMP".  Potential INCOMPATIBILITY,
```
```   717 use regular rule composition via "OF" / "THEN", or explicit proof
```
```   718 structure instead.  Note that Isabelle/ML provides a variety of
```
```   719 operators like COMP, INCR_COMP, COMP_INCR, which need to be applied
```
```   720 with some care where this is really required.
```
```   721
```
```   722 * Command 'typ' supports an additional variant with explicit sort
```
```   723 constraint, to infer and check the most general type conforming to a
```
```   724 given sort.  Example (in HOL):
```
```   725
```
```   726   typ "_ * _ * bool * unit" :: finite
```
```   727
```
```   728 * Command 'locale_deps' visualizes all locales and their relations as
```
```   729 a Hasse diagram.
```
```   730
```
```   731
```
```   732 *** HOL ***
```
```   733
```
```   734 * Sledgehammer:
```
```   735
```
```   736   - Added MaSh relevance filter based on machine-learning; see the
```
```   737     Sledgehammer manual for details.
```
```   738   - Polished Isar proofs generated with "isar_proofs" option.
```
```   739   - Rationalized type encodings ("type_enc" option).
```
```   740   - Renamed "kill_provers" subcommand to "kill_all".
```
```   741   - Renamed options:
```
```   742       isar_proof ~> isar_proofs
```
```   743       isar_shrink_factor ~> isar_shrink
```
```   744       max_relevant ~> max_facts
```
```   745       relevance_thresholds ~> fact_thresholds
```
```   746
```
```   747 * Quickcheck: added an optimisation for equality premises.  It is
```
```   748 switched on by default, and can be switched off by setting the
```
```   749 configuration quickcheck_optimise_equality to false.
```
```   750
```
```   751 * Quotient: only one quotient can be defined by quotient_type
```
```   752 INCOMPATIBILITY.
```
```   753
```
```   754 * Lifting:
```
```   755   - generation of an abstraction function equation in lift_definition
```
```   756   - quot_del attribute
```
```   757   - renamed no_abs_code -> no_code (INCOMPATIBILITY.)
```
```   758
```
```   759 * Simproc "finite_Collect" rewrites set comprehensions into pointfree
```
```   760 expressions.
```
```   761
```
```   762 * Preprocessing of the code generator rewrites set comprehensions into
```
```   763 pointfree expressions.
```
```   764
```
```   765 * The SMT solver Z3 has now by default a restricted set of directly
```
```   766 supported features. For the full set of features (div/mod, nonlinear
```
```   767 arithmetic, datatypes/records) with potential proof reconstruction
```
```   768 failures, enable the configuration option "z3_with_extensions".  Minor
```
```   769 INCOMPATIBILITY.
```
```   770
```
```   771 * Simplified 'typedef' specifications: historical options for implicit
```
```   772 set definition and alternative name have been discontinued.  The
```
```   773 former behavior of "typedef (open) t = A" is now the default, but
```
```   774 written just "typedef t = A".  INCOMPATIBILITY, need to adapt theories
```
```   775 accordingly.
```
```   776
```
```   777 * Removed constant "chars"; prefer "Enum.enum" on type "char"
```
```   778 directly.  INCOMPATIBILITY.
```
```   779
```
```   780 * Moved operation product, sublists and n_lists from theory Enum to
```
```   781 List.  INCOMPATIBILITY.
```
```   782
```
```   783 * Theorem UN_o generalized to SUP_comp.  INCOMPATIBILITY.
```
```   784
```
```   785 * Class "comm_monoid_diff" formalises properties of bounded
```
```   786 subtraction, with natural numbers and multisets as typical instances.
```
```   787
```
```   788 * Added combinator "Option.these" with type "'a option set => 'a set".
```
```   789
```
```   790 * Theory "Transitive_Closure": renamed lemmas
```
```   791
```
```   792   reflcl_tranclp -> reflclp_tranclp
```
```   793   rtranclp_reflcl -> rtranclp_reflclp
```
```   794
```
```   795 INCOMPATIBILITY.
```
```   796
```
```   797 * Theory "Rings": renamed lemmas (in class semiring)
```
```   798
```
```   799   left_distrib ~> distrib_right
```
```   800   right_distrib ~> distrib_left
```
```   801
```
```   802 INCOMPATIBILITY.
```
```   803
```
```   804 * Generalized the definition of limits:
```
```   805
```
```   806   - Introduced the predicate filterlim (LIM x F. f x :> G) which
```
```   807     expresses that when the input values x converge to F then the
```
```   808     output f x converges to G.
```
```   809
```
```   810   - Added filters for convergence to positive (at_top) and negative
```
```   811     infinity (at_bot).
```
```   812
```
```   813   - Moved infinity in the norm (at_infinity) from
```
```   814     Multivariate_Analysis to Complex_Main.
```
```   815
```
```   816   - Removed real_tendsto_inf, it is superseded by "LIM x F. f x :>
```
```   817     at_top".
```
```   818
```
```   819 INCOMPATIBILITY.
```
```   820
```
```   821 * Theory "Library/Option_ord" provides instantiation of option type to
```
```   822 lattice type classes.
```
```   823
```
```   824 * Theory "Library/Multiset": renamed
```
```   825
```
```   826     constant fold_mset ~> Multiset.fold
```
```   827     fact fold_mset_commute ~> fold_mset_comm
```
```   828
```
```   829 INCOMPATIBILITY.
```
```   830
```
```   831 * Renamed theory Library/List_Prefix to Library/Sublist, with related
```
```   832 changes as follows.
```
```   833
```
```   834   - Renamed constants (and related lemmas)
```
```   835
```
```   836       prefix ~> prefixeq
```
```   837       strict_prefix ~> prefix
```
```   838
```
```   839   - Replaced constant "postfix" by "suffixeq" with swapped argument
```
```   840     order (i.e., "postfix xs ys" is now "suffixeq ys xs") and dropped
```
```   841     old infix syntax "xs >>= ys"; use "suffixeq ys xs" instead.
```
```   842     Renamed lemmas accordingly.
```
```   843
```
```   844   - Added constant "list_hembeq" for homeomorphic embedding on
```
```   845     lists. Added abbreviation "sublisteq" for special case
```
```   846     "list_hembeq (op =)".
```
```   847
```
```   848   - Theory Library/Sublist no longer provides "order" and "bot" type
```
```   849     class instances for the prefix order (merely corresponding locale
```
```   850     interpretations). The type class instances are now in theory
```
```   851     Library/Prefix_Order.
```
```   852
```
```   853   - The sublist relation of theory Library/Sublist_Order is now based
```
```   854     on "Sublist.sublisteq".  Renamed lemmas accordingly:
```
```   855
```
```   856       le_list_append_le_same_iff ~> Sublist.sublisteq_append_le_same_iff
```
```   857       le_list_append_mono ~> Sublist.list_hembeq_append_mono
```
```   858       le_list_below_empty ~> Sublist.list_hembeq_Nil, Sublist.list_hembeq_Nil2
```
```   859       le_list_Cons_EX ~> Sublist.list_hembeq_ConsD
```
```   860       le_list_drop_Cons2 ~> Sublist.sublisteq_Cons2'
```
```   861       le_list_drop_Cons_neq ~> Sublist.sublisteq_Cons2_neq
```
```   862       le_list_drop_Cons ~> Sublist.sublisteq_Cons'
```
```   863       le_list_drop_many ~> Sublist.sublisteq_drop_many
```
```   864       le_list_filter_left ~> Sublist.sublisteq_filter_left
```
```   865       le_list_rev_drop_many ~> Sublist.sublisteq_rev_drop_many
```
```   866       le_list_rev_take_iff ~> Sublist.sublisteq_append
```
```   867       le_list_same_length ~> Sublist.sublisteq_same_length
```
```   868       le_list_take_many_iff ~> Sublist.sublisteq_append'
```
```   869       less_eq_list.drop ~> less_eq_list_drop
```
```   870       less_eq_list.induct ~> less_eq_list_induct
```
```   871       not_le_list_length ~> Sublist.not_sublisteq_length
```
```   872
```
```   873 INCOMPATIBILITY.
```
```   874
```
```   875 * New theory Library/Countable_Set.
```
```   876
```
```   877 * Theory Library/Debug and Library/Parallel provide debugging and
```
```   878 parallel execution for code generated towards Isabelle/ML.
```
```   879
```
```   880 * Theory Library/FuncSet: Extended support for Pi and extensional and
```
```   881 introduce the extensional dependent function space "PiE". Replaced
```
```   882 extensional_funcset by an abbreviation, and renamed lemmas from
```
```   883 extensional_funcset to PiE as follows:
```
```   884
```
```   885   extensional_empty  ~>  PiE_empty
```
```   886   extensional_funcset_empty_domain  ~>  PiE_empty_domain
```
```   887   extensional_funcset_empty_range  ~>  PiE_empty_range
```
```   888   extensional_funcset_arb  ~>  PiE_arb
```
```   889   extensional_funcset_mem  ~>  PiE_mem
```
```   890   extensional_funcset_extend_domainI  ~>  PiE_fun_upd
```
```   891   extensional_funcset_restrict_domain  ~>  fun_upd_in_PiE
```
```   892   extensional_funcset_extend_domain_eq  ~>  PiE_insert_eq
```
```   893   card_extensional_funcset  ~>  card_PiE
```
```   894   finite_extensional_funcset  ~>  finite_PiE
```
```   895
```
```   896 INCOMPATIBILITY.
```
```   897
```
```   898 * Theory Library/FinFun: theory of almost everywhere constant
```
```   899 functions (supersedes the AFP entry "Code Generation for Functions as
```
```   900 Data").
```
```   901
```
```   902 * Theory Library/Phantom: generic phantom type to make a type
```
```   903 parameter appear in a constant's type.  This alternative to adding
```
```   904 TYPE('a) as another parameter avoids unnecessary closures in generated
```
```   905 code.
```
```   906
```
```   907 * Theory Library/RBT_Impl: efficient construction of red-black trees
```
```   908 from sorted associative lists. Merging two trees with rbt_union may
```
```   909 return a structurally different tree than before.  Potential
```
```   910 INCOMPATIBILITY.
```
```   911
```
```   912 * Theory Library/IArray: immutable arrays with code generation.
```
```   913
```
```   914 * Theory Library/Finite_Lattice: theory of finite lattices.
```
```   915
```
```   916 * HOL/Multivariate_Analysis: replaced
```
```   917
```
```   918   "basis :: 'a::euclidean_space => nat => real"
```
```   919   "\<Chi>\<Chi> :: (nat => real) => 'a::euclidean_space"
```
```   920
```
```   921 on euclidean spaces by using the inner product "_ \<bullet> _" with
```
```   922 vectors from the Basis set: "\<Chi>\<Chi> i. f i" is superseded by
```
```   923 "SUM i : Basis. f i * r i".
```
```   924
```
```   925   With this change the following constants are also changed or removed:
```
```   926
```
```   927     DIM('a) :: nat  ~>  card (Basis :: 'a set)   (is an abbreviation)
```
```   928     a \$\$ i  ~>  inner a i  (where i : Basis)
```
```   929     cart_base i  removed
```
```   930     \<pi>, \<pi>'  removed
```
```   931
```
```   932   Theorems about these constants where removed.
```
```   933
```
```   934   Renamed lemmas:
```
```   935
```
```   936     component_le_norm  ~>  Basis_le_norm
```
```   937     euclidean_eq  ~>  euclidean_eq_iff
```
```   938     differential_zero_maxmin_component  ~>  differential_zero_maxmin_cart
```
```   939     euclidean_simps  ~>  inner_simps
```
```   940     independent_basis  ~>  independent_Basis
```
```   941     span_basis  ~>  span_Basis
```
```   942     in_span_basis  ~>  in_span_Basis
```
```   943     norm_bound_component_le  ~>  norm_boound_Basis_le
```
```   944     norm_bound_component_lt  ~>  norm_boound_Basis_lt
```
```   945     component_le_infnorm  ~>  Basis_le_infnorm
```
```   946
```
```   947 INCOMPATIBILITY.
```
```   948
```
```   949 * HOL/Probability:
```
```   950
```
```   951   - Added simproc "measurable" to automatically prove measurability.
```
```   952
```
```   953   - Added induction rules for sigma sets with disjoint union
```
```   954     (sigma_sets_induct_disjoint) and for Borel-measurable functions
```
```   955     (borel_measurable_induct).
```
```   956
```
```   957   - Added the Daniell-Kolmogorov theorem (the existence the limit of a
```
```   958     projective family).
```
```   959
```
```   960 * HOL/Cardinals: Theories of ordinals and cardinals (supersedes the
```
```   961 AFP entry "Ordinals_and_Cardinals").
```
```   962
```
```   963 * HOL/BNF: New (co)datatype package based on bounded natural functors
```
```   964 with support for mixed, nested recursion and interesting non-free
```
```   965 datatypes.
```
```   966
```
```   967 * HOL/Finite_Set and Relation: added new set and relation operations
```
```   968 expressed by Finite_Set.fold.
```
```   969
```
```   970 * New theory HOL/Library/RBT_Set: implementation of sets by red-black
```
```   971 trees for the code generator.
```
```   972
```
```   973 * HOL/Library/RBT and HOL/Library/Mapping have been converted to
```
```   974 Lifting/Transfer.
```
```   975 possible INCOMPATIBILITY.
```
```   976
```
```   977 * HOL/Set: renamed Set.project -> Set.filter
```
```   978 INCOMPATIBILITY.
```
```   979
```
```   980
```
```   981 *** Document preparation ***
```
```   982
```
```   983 * Dropped legacy antiquotations "term_style" and "thm_style", since
```
```   984 styles may be given as arguments to "term" and "thm" already.
```
```   985 Discontinued legacy styles "prem1" .. "prem19".
```
```   986
```
```   987 * Default LaTeX rendering for \<euro> is now based on eurosym package,
```
```   988 instead of slightly exotic babel/greek.
```
```   989
```
```   990 * Document variant NAME may use different LaTeX entry point
```
```   991 document/root_NAME.tex if that file exists, instead of the common
```
```   992 document/root.tex.
```
```   993
```
```   994 * Simplified custom document/build script, instead of old-style
```
```   995 document/IsaMakefile.  Minor INCOMPATIBILITY.
```
```   996
```
```   997
```
```   998 *** ML ***
```
```   999
```
```  1000 * The default limit for maximum number of worker threads is now 8,
```
```  1001 instead of 4, in correspondence to capabilities of contemporary
```
```  1002 hardware and Poly/ML runtime system.
```
```  1003
```
```  1004 * Type Seq.results and related operations support embedded error
```
```  1005 messages within lazy enumerations, and thus allow to provide
```
```  1006 informative errors in the absence of any usable results.
```
```  1007
```
```  1008 * Renamed Position.str_of to Position.here to emphasize that this is a
```
```  1009 formal device to inline positions into message text, but not
```
```  1010 necessarily printing visible text.
```
```  1011
```
```  1012
```
```  1013 *** System ***
```
```  1014
```
```  1015 * Advanced support for Isabelle sessions and build management, see
```
```  1016 "system" manual for the chapter of that name, especially the "isabelle
```
```  1017 build" tool and its examples.  The "isabelle mkroot" tool prepares
```
```  1018 session root directories for use with "isabelle build", similar to
```
```  1019 former "isabelle mkdir" for "isabelle usedir".  Note that this affects
```
```  1020 document preparation as well.  INCOMPATIBILITY, isabelle usedir /
```
```  1021 mkdir / make are rendered obsolete.
```
```  1022
```
```  1023 * Discontinued obsolete Isabelle/build script, it is superseded by the
```
```  1024 regular isabelle build tool.  For example:
```
```  1025
```
```  1026   isabelle build -s -b HOL
```
```  1027
```
```  1028 * Discontinued obsolete "isabelle makeall".
```
```  1029
```
```  1030 * Discontinued obsolete IsaMakefile and ROOT.ML files from the
```
```  1031 Isabelle distribution, except for rudimentary src/HOL/IsaMakefile that
```
```  1032 provides some traditional targets that invoke "isabelle build".  Note
```
```  1033 that this is inefficient!  Applications of Isabelle/HOL involving
```
```  1034 "isabelle make" should be upgraded to use "isabelle build" directly.
```
```  1035
```
```  1036 * The "isabelle options" tool prints Isabelle system options, as
```
```  1037 required for "isabelle build", for example.
```
```  1038
```
```  1039 * The "isabelle logo" tool produces EPS and PDF format simultaneously.
```
```  1040 Minor INCOMPATIBILITY in command-line options.
```
```  1041
```
```  1042 * The "isabelle install" tool has now a simpler command-line.  Minor
```
```  1043 INCOMPATIBILITY.
```
```  1044
```
```  1045 * The "isabelle components" tool helps to resolve add-on components
```
```  1046 that are not bundled, or referenced from a bare-bones repository
```
```  1047 version of Isabelle.
```
```  1048
```
```  1049 * Settings variable ISABELLE_PLATFORM_FAMILY refers to the general
```
```  1050 platform family: "linux", "macos", "windows".
```
```  1051
```
```  1052 * The ML system is configured as regular component, and no longer
```
```  1053 picked up from some surrounding directory.  Potential INCOMPATIBILITY
```
```  1054 for home-made settings.
```
```  1055
```
```  1056 * Improved ML runtime statistics (heap, threads, future tasks etc.).
```
```  1057
```
```  1058 * Discontinued support for Poly/ML 5.2.1, which was the last version
```
```  1059 without exception positions and advanced ML compiler/toplevel
```
```  1060 configuration.
```
```  1061
```
```  1062 * Discontinued special treatment of Proof General -- no longer guess
```
```  1063 PROOFGENERAL_HOME based on accidental file-system layout.  Minor
```
```  1064 INCOMPATIBILITY: provide PROOFGENERAL_HOME and PROOFGENERAL_OPTIONS
```
```  1065 settings manually, or use a Proof General version that has been
```
```  1066 bundled as Isabelle component.
```
```  1067
```
```  1068
```
```  1069
```
```  1070 New in Isabelle2012 (May 2012)
```
```  1071 ------------------------------
```
```  1072
```
```  1073 *** General ***
```
```  1074
```
```  1075 * Prover IDE (PIDE) improvements:
```
```  1076
```
```  1077   - more robust Sledgehammer integration (as before the sledgehammer
```
```  1078     command-line needs to be typed into the source buffer)
```
```  1079   - markup for bound variables
```
```  1080   - markup for types of term variables (displayed as tooltips)
```
```  1081   - support for user-defined Isar commands within the running session
```
```  1082   - improved support for Unicode outside original 16bit range
```
```  1083     e.g. glyph for \<A> (thanks to jEdit 4.5.1)
```
```  1084
```
```  1085 * Forward declaration of outer syntax keywords within the theory
```
```  1086 header -- minor INCOMPATIBILITY for user-defined commands.  Allow new
```
```  1087 commands to be used in the same theory where defined.
```
```  1088
```
```  1089 * Auxiliary contexts indicate block structure for specifications with
```
```  1090 additional parameters and assumptions.  Such unnamed contexts may be
```
```  1091 nested within other targets, like 'theory', 'locale', 'class',
```
```  1092 'instantiation' etc.  Results from the local context are generalized
```
```  1093 accordingly and applied to the enclosing target context.  Example:
```
```  1094
```
```  1095   context
```
```  1096     fixes x y z :: 'a
```
```  1097     assumes xy: "x = y" and yz: "y = z"
```
```  1098   begin
```
```  1099
```
```  1100   lemma my_trans: "x = z" using xy yz by simp
```
```  1101
```
```  1102   end
```
```  1103
```
```  1104   thm my_trans
```
```  1105
```
```  1106 The most basic application is to factor-out context elements of
```
```  1107 several fixes/assumes/shows theorem statements, e.g. see
```
```  1108 ~~/src/HOL/Isar_Examples/Group_Context.thy
```
```  1109
```
```  1110 Any other local theory specification element works within the "context
```
```  1111 ... begin ... end" block as well.
```
```  1112
```
```  1113 * Bundled declarations associate attributed fact expressions with a
```
```  1114 given name in the context.  These may be later included in other
```
```  1115 contexts.  This allows to manage context extensions casually, without
```
```  1116 the logical dependencies of locales and locale interpretation.  See
```
```  1117 commands 'bundle', 'include', 'including' etc. in the isar-ref manual.
```
```  1118
```
```  1119 * Commands 'lemmas' and 'theorems' allow local variables using 'for'
```
```  1120 declaration, and results are standardized before being stored.  Thus
```
```  1121 old-style "standard" after instantiation or composition of facts
```
```  1122 becomes obsolete.  Minor INCOMPATIBILITY, due to potential change of
```
```  1123 indices of schematic variables.
```
```  1124
```
```  1125 * Rule attributes in local theory declarations (e.g. locale or class)
```
```  1126 are now statically evaluated: the resulting theorem is stored instead
```
```  1127 of the original expression.  INCOMPATIBILITY in rare situations, where
```
```  1128 the historic accident of dynamic re-evaluation in interpretations
```
```  1129 etc. was exploited.
```
```  1130
```
```  1131 * New tutorial "Programming and Proving in Isabelle/HOL"
```
```  1132 ("prog-prove").  It completely supersedes "A Tutorial Introduction to
```
```  1133 Structured Isar Proofs" ("isar-overview"), which has been removed.  It
```
```  1134 also supersedes "Isabelle/HOL, A Proof Assistant for Higher-Order
```
```  1135 Logic" as the recommended beginners tutorial, but does not cover all
```
```  1136 of the material of that old tutorial.
```
```  1137
```
```  1138 * Updated and extended reference manuals: "isar-ref",
```
```  1139 "implementation", "system"; reduced remaining material in old "ref"
```
```  1140 manual.
```
```  1141
```
```  1142
```
```  1143 *** Pure ***
```
```  1144
```
```  1145 * Command 'definition' no longer exports the foundational "raw_def"
```
```  1146 into the user context.  Minor INCOMPATIBILITY, may use the regular
```
```  1147 "def" result with attribute "abs_def" to imitate the old version.
```
```  1148
```
```  1149 * Attribute "abs_def" turns an equation of the form "f x y == t" into
```
```  1150 "f == %x y. t", which ensures that "simp" or "unfold" steps always
```
```  1151 expand it.  This also works for object-logic equality.  (Formerly
```
```  1152 undocumented feature.)
```
```  1153
```
```  1154 * Sort constraints are now propagated in simultaneous statements, just
```
```  1155 like type constraints.  INCOMPATIBILITY in rare situations, where
```
```  1156 distinct sorts used to be assigned accidentally.  For example:
```
```  1157
```
```  1158   lemma "P (x::'a::foo)" and "Q (y::'a::bar)"  -- "now illegal"
```
```  1159
```
```  1160   lemma "P (x::'a)" and "Q (y::'a::bar)"
```
```  1161     -- "now uniform 'a::bar instead of default sort for first occurrence (!)"
```
```  1162
```
```  1163 * Rule composition via attribute "OF" (or ML functions OF/MRS) is more
```
```  1164 tolerant against multiple unifiers, as long as the final result is
```
```  1165 unique.  (As before, rules are composed in canonical right-to-left
```
```  1166 order to accommodate newly introduced premises.)
```
```  1167
```
```  1168 * Renamed some inner syntax categories:
```
```  1169
```
```  1170     num ~> num_token
```
```  1171     xnum ~> xnum_token
```
```  1172     xstr ~> str_token
```
```  1173
```
```  1174 Minor INCOMPATIBILITY.  Note that in practice "num_const" or
```
```  1175 "num_position" etc. are mainly used instead (which also include
```
```  1176 position information via constraints).
```
```  1177
```
```  1178 * Simplified configuration options for syntax ambiguity: see
```
```  1179 "syntax_ambiguity_warning" and "syntax_ambiguity_limit" in isar-ref
```
```  1180 manual.  Minor INCOMPATIBILITY.
```
```  1181
```
```  1182 * Discontinued configuration option "syntax_positions": atomic terms
```
```  1183 in parse trees are always annotated by position constraints.
```
```  1184
```
```  1185 * Old code generator for SML and its commands 'code_module',
```
```  1186 'code_library', 'consts_code', 'types_code' have been discontinued.
```
```  1187 Use commands of the generic code generator instead.  INCOMPATIBILITY.
```
```  1188
```
```  1189 * Redundant attribute "code_inline" has been discontinued. Use
```
```  1190 "code_unfold" instead.  INCOMPATIBILITY.
```
```  1191
```
```  1192 * Dropped attribute "code_unfold_post" in favor of the its dual
```
```  1193 "code_abbrev", which yields a common pattern in definitions like
```
```  1194
```
```  1195   definition [code_abbrev]: "f = t"
```
```  1196
```
```  1197 INCOMPATIBILITY.
```
```  1198
```
```  1199 * Obsolete 'types' command has been discontinued.  Use 'type_synonym'
```
```  1200 instead.  INCOMPATIBILITY.
```
```  1201
```
```  1202 * Discontinued old "prems" fact, which used to refer to the accidental
```
```  1203 collection of foundational premises in the context (already marked as
```
```  1204 legacy since Isabelle2011).
```
```  1205
```
```  1206
```
```  1207 *** HOL ***
```
```  1208
```
```  1209 * Type 'a set is now a proper type constructor (just as before
```
```  1210 Isabelle2008).  Definitions mem_def and Collect_def have disappeared.
```
```  1211 Non-trivial INCOMPATIBILITY.  For developments keeping predicates and
```
```  1212 sets separate, it is often sufficient to rephrase some set S that has
```
```  1213 been accidentally used as predicates by "%x. x : S", and some
```
```  1214 predicate P that has been accidentally used as set by "{x. P x}".
```
```  1215 Corresponding proofs in a first step should be pruned from any
```
```  1216 tinkering with former theorems mem_def and Collect_def as far as
```
```  1217 possible.
```
```  1218
```
```  1219 For developments which deliberately mix predicates and sets, a
```
```  1220 planning step is necessary to determine what should become a predicate
```
```  1221 and what a set.  It can be helpful to carry out that step in
```
```  1222 Isabelle2011-1 before jumping right into the current release.
```
```  1223
```
```  1224 * Code generation by default implements sets as container type rather
```
```  1225 than predicates.  INCOMPATIBILITY.
```
```  1226
```
```  1227 * New type synonym 'a rel = ('a * 'a) set
```
```  1228
```
```  1229 * The representation of numerals has changed.  Datatype "num"
```
```  1230 represents strictly positive binary numerals, along with functions
```
```  1231 "numeral :: num => 'a" and "neg_numeral :: num => 'a" to represent
```
```  1232 positive and negated numeric literals, respectively.  See also
```
```  1233 definitions in ~~/src/HOL/Num.thy.  Potential INCOMPATIBILITY, some
```
```  1234 user theories may require adaptations as follows:
```
```  1235
```
```  1236   - Theorems with number_ring or number_semiring constraints: These
```
```  1237     classes are gone; use comm_ring_1 or comm_semiring_1 instead.
```
```  1238
```
```  1239   - Theories defining numeric types: Remove number, number_semiring,
```
```  1240     and number_ring instances. Defer all theorems about numerals until
```
```  1241     after classes one and semigroup_add have been instantiated.
```
```  1242
```
```  1243   - Numeral-only simp rules: Replace each rule having a "number_of v"
```
```  1244     pattern with two copies, one for numeral and one for neg_numeral.
```
```  1245
```
```  1246   - Theorems about subclasses of semiring_1 or ring_1: These classes
```
```  1247     automatically support numerals now, so more simp rules and
```
```  1248     simprocs may now apply within the proof.
```
```  1249
```
```  1250   - Definitions and theorems using old constructors Pls/Min/Bit0/Bit1:
```
```  1251     Redefine using other integer operations.
```
```  1252
```
```  1253 * Transfer: New package intended to generalize the existing
```
```  1254 "descending" method and related theorem attributes from the Quotient
```
```  1255 package.  (Not all functionality is implemented yet, but future
```
```  1256 development will focus on Transfer as an eventual replacement for the
```
```  1257 corresponding parts of the Quotient package.)
```
```  1258
```
```  1259   - transfer_rule attribute: Maintains a collection of transfer rules,
```
```  1260     which relate constants at two different types. Transfer rules may
```
```  1261     relate different type instances of the same polymorphic constant,
```
```  1262     or they may relate an operation on a raw type to a corresponding
```
```  1263     operation on an abstract type (quotient or subtype). For example:
```
```  1264
```
```  1265     ((A ===> B) ===> list_all2 A ===> list_all2 B) map map
```
```  1266     (cr_int ===> cr_int ===> cr_int) (%(x,y) (u,v). (x+u, y+v)) plus_int
```
```  1267
```
```  1268   - transfer method: Replaces a subgoal on abstract types with an
```
```  1269     equivalent subgoal on the corresponding raw types. Constants are
```
```  1270     replaced with corresponding ones according to the transfer rules.
```
```  1271     Goals are generalized over all free variables by default; this is
```
```  1272     necessary for variables whose types change, but can be overridden
```
```  1273     for specific variables with e.g. "transfer fixing: x y z".  The
```
```  1274     variant transfer' method allows replacing a subgoal with one that
```
```  1275     is logically stronger (rather than equivalent).
```
```  1276
```
```  1277   - relator_eq attribute: Collects identity laws for relators of
```
```  1278     various type constructors, e.g. "list_all2 (op =) = (op =)".  The
```
```  1279     transfer method uses these lemmas to infer transfer rules for
```
```  1280     non-polymorphic constants on the fly.
```
```  1281
```
```  1282   - transfer_prover method: Assists with proving a transfer rule for a
```
```  1283     new constant, provided the constant is defined in terms of other
```
```  1284     constants that already have transfer rules. It should be applied
```
```  1285     after unfolding the constant definitions.
```
```  1286
```
```  1287   - HOL/ex/Transfer_Int_Nat.thy: Example theory demonstrating transfer
```
```  1288     from type nat to type int.
```
```  1289
```
```  1290 * Lifting: New package intended to generalize the quotient_definition
```
```  1291 facility of the Quotient package; designed to work with Transfer.
```
```  1292
```
```  1293   - lift_definition command: Defines operations on an abstract type in
```
```  1294     terms of a corresponding operation on a representation
```
```  1295     type.  Example syntax:
```
```  1296
```
```  1297     lift_definition dlist_insert :: "'a => 'a dlist => 'a dlist"
```
```  1298       is List.insert
```
```  1299
```
```  1300     Users must discharge a respectfulness proof obligation when each
```
```  1301     constant is defined. (For a type copy, i.e. a typedef with UNIV,
```
```  1302     the proof is discharged automatically.) The obligation is
```
```  1303     presented in a user-friendly, readable form; a respectfulness
```
```  1304     theorem in the standard format and a transfer rule are generated
```
```  1305     by the package.
```
```  1306
```
```  1307   - Integration with code_abstype: For typedefs (e.g. subtypes
```
```  1308     corresponding to a datatype invariant, such as dlist),
```
```  1309     lift_definition generates a code certificate theorem and sets up
```
```  1310     code generation for each constant.
```
```  1311
```
```  1312   - setup_lifting command: Sets up the Lifting package to work with a
```
```  1313     user-defined type. The user must provide either a quotient theorem
```
```  1314     or a type_definition theorem.  The package configures transfer
```
```  1315     rules for equality and quantifiers on the type, and sets up the
```
```  1316     lift_definition command to work with the type.
```
```  1317
```
```  1318   - Usage examples: See Quotient_Examples/Lift_DList.thy,
```
```  1319     Quotient_Examples/Lift_RBT.thy, Quotient_Examples/Lift_FSet.thy,
```
```  1320     Word/Word.thy and Library/Float.thy.
```
```  1321
```
```  1322 * Quotient package:
```
```  1323
```
```  1324   - The 'quotient_type' command now supports a 'morphisms' option with
```
```  1325     rep and abs functions, similar to typedef.
```
```  1326
```
```  1327   - 'quotient_type' sets up new types to work with the Lifting and
```
```  1328     Transfer packages, as with 'setup_lifting'.
```
```  1329
```
```  1330   - The 'quotient_definition' command now requires the user to prove a
```
```  1331     respectfulness property at the point where the constant is
```
```  1332     defined, similar to lift_definition; INCOMPATIBILITY.
```
```  1333
```
```  1334   - Renamed predicate 'Quotient' to 'Quotient3', and renamed theorems
```
```  1335     accordingly, INCOMPATIBILITY.
```
```  1336
```
```  1337 * New diagnostic command 'find_unused_assms' to find potentially
```
```  1338 superfluous assumptions in theorems using Quickcheck.
```
```  1339
```
```  1340 * Quickcheck:
```
```  1341
```
```  1342   - Quickcheck returns variable assignments as counterexamples, which
```
```  1343     allows to reveal the underspecification of functions under test.
```
```  1344     For example, refuting "hd xs = x", it presents the variable
```
```  1345     assignment xs = [] and x = a1 as a counterexample, assuming that
```
```  1346     any property is false whenever "hd []" occurs in it.
```
```  1347
```
```  1348     These counterexample are marked as potentially spurious, as
```
```  1349     Quickcheck also returns "xs = []" as a counterexample to the
```
```  1350     obvious theorem "hd xs = hd xs".
```
```  1351
```
```  1352     After finding a potentially spurious counterexample, Quickcheck
```
```  1353     continues searching for genuine ones.
```
```  1354
```
```  1355     By default, Quickcheck shows potentially spurious and genuine
```
```  1356     counterexamples. The option "genuine_only" sets quickcheck to only
```
```  1357     show genuine counterexamples.
```
```  1358
```
```  1359   - The command 'quickcheck_generator' creates random and exhaustive
```
```  1360     value generators for a given type and operations.
```
```  1361
```
```  1362     It generates values by using the operations as if they were
```
```  1363     constructors of that type.
```
```  1364
```
```  1365   - Support for multisets.
```
```  1366
```
```  1367   - Added "use_subtype" options.
```
```  1368
```
```  1369   - Added "quickcheck_locale" configuration to specify how to process
```
```  1370     conjectures in a locale context.
```
```  1371
```
```  1372 * Nitpick: Fixed infinite loop caused by the 'peephole_optim' option
```
```  1373 and affecting 'rat' and 'real'.
```
```  1374
```
```  1375 * Sledgehammer:
```
```  1376   - Integrated more tightly with SPASS, as described in the ITP 2012
```
```  1377     paper "More SPASS with Isabelle".
```
```  1378   - Made it try "smt" as a fallback if "metis" fails or times out.
```
```  1379   - Added support for the following provers: Alt-Ergo (via Why3 and
```
```  1380     TFF1), iProver, iProver-Eq.
```
```  1381   - Sped up the minimizer.
```
```  1382   - Added "lam_trans", "uncurry_aliases", and "minimize" options.
```
```  1383   - Renamed "slicing" ("no_slicing") option to "slice" ("dont_slice").
```
```  1384   - Renamed "sound" option to "strict".
```
```  1385
```
```  1386 * Metis: Added possibility to specify lambda translations scheme as a
```
```  1387 parenthesized argument (e.g., "by (metis (lifting) ...)").
```
```  1388
```
```  1389 * SMT: Renamed "smt_fixed" option to "smt_read_only_certificates".
```
```  1390
```
```  1391 * Command 'try0': Renamed from 'try_methods'. INCOMPATIBILITY.
```
```  1392
```
```  1393 * New "case_product" attribute to generate a case rule doing multiple
```
```  1394 case distinctions at the same time.  E.g.
```
```  1395
```
```  1396   list.exhaust [case_product nat.exhaust]
```
```  1397
```
```  1398 produces a rule which can be used to perform case distinction on both
```
```  1399 a list and a nat.
```
```  1400
```
```  1401 * New "eventually_elim" method as a generalized variant of the
```
```  1402 eventually_elim* rules.  Supports structured proofs.
```
```  1403
```
```  1404 * Typedef with implicit set definition is considered legacy.  Use
```
```  1405 "typedef (open)" form instead, which will eventually become the
```
```  1406 default.
```
```  1407
```
```  1408 * Record: code generation can be switched off manually with
```
```  1409
```
```  1410   declare [[record_coden = false]]  -- "default true"
```
```  1411
```
```  1412 * Datatype: type parameters allow explicit sort constraints.
```
```  1413
```
```  1414 * Concrete syntax for case expressions includes constraints for source
```
```  1415 positions, and thus produces Prover IDE markup for its bindings.
```
```  1416 INCOMPATIBILITY for old-style syntax translations that augment the
```
```  1417 pattern notation; e.g. see src/HOL/HOLCF/One.thy for translations of
```
```  1418 one_case.
```
```  1419
```
```  1420 * Clarified attribute "mono_set": pure declaration without modifying
```
```  1421 the result of the fact expression.
```
```  1422
```
```  1423 * More default pred/set conversions on a couple of relation operations
```
```  1424 and predicates.  Added powers of predicate relations.  Consolidation
```
```  1425 of some relation theorems:
```
```  1426
```
```  1427   converse_def ~> converse_unfold
```
```  1428   rel_comp_def ~> relcomp_unfold
```
```  1429   symp_def ~> (modified, use symp_def and sym_def instead)
```
```  1430   transp_def ~> transp_trans
```
```  1431   Domain_def ~> Domain_unfold
```
```  1432   Range_def ~> Domain_converse [symmetric]
```
```  1433
```
```  1434 Generalized theorems INF_INT_eq, INF_INT_eq2, SUP_UN_eq, SUP_UN_eq2.
```
```  1435
```
```  1436 See theory "Relation" for examples for making use of pred/set
```
```  1437 conversions by means of attributes "to_set" and "to_pred".
```
```  1438
```
```  1439 INCOMPATIBILITY.
```
```  1440
```
```  1441 * Renamed facts about the power operation on relations, i.e., relpow
```
```  1442 to match the constant's name:
```
```  1443
```
```  1444   rel_pow_1 ~> relpow_1
```
```  1445   rel_pow_0_I ~> relpow_0_I
```
```  1446   rel_pow_Suc_I ~> relpow_Suc_I
```
```  1447   rel_pow_Suc_I2 ~> relpow_Suc_I2
```
```  1448   rel_pow_0_E ~> relpow_0_E
```
```  1449   rel_pow_Suc_E ~> relpow_Suc_E
```
```  1450   rel_pow_E ~> relpow_E
```
```  1451   rel_pow_Suc_D2 ~> relpow_Suc_D2
```
```  1452   rel_pow_Suc_E2 ~> relpow_Suc_E2
```
```  1453   rel_pow_Suc_D2' ~> relpow_Suc_D2'
```
```  1454   rel_pow_E2 ~> relpow_E2
```
```  1455   rel_pow_add ~> relpow_add
```
```  1456   rel_pow_commute ~> relpow
```
```  1457   rel_pow_empty ~> relpow_empty:
```
```  1458   rtrancl_imp_UN_rel_pow ~> rtrancl_imp_UN_relpow
```
```  1459   rel_pow_imp_rtrancl ~> relpow_imp_rtrancl
```
```  1460   rtrancl_is_UN_rel_pow ~> rtrancl_is_UN_relpow
```
```  1461   rtrancl_imp_rel_pow ~> rtrancl_imp_relpow
```
```  1462   rel_pow_fun_conv ~> relpow_fun_conv
```
```  1463   rel_pow_finite_bounded1 ~> relpow_finite_bounded1
```
```  1464   rel_pow_finite_bounded ~> relpow_finite_bounded
```
```  1465   rtrancl_finite_eq_rel_pow ~> rtrancl_finite_eq_relpow
```
```  1466   trancl_finite_eq_rel_pow ~> trancl_finite_eq_relpow
```
```  1467   single_valued_rel_pow ~> single_valued_relpow
```
```  1468
```
```  1469 INCOMPATIBILITY.
```
```  1470
```
```  1471 * Theory Relation: Consolidated constant name for relation composition
```
```  1472 and corresponding theorem names:
```
```  1473
```
```  1474   - Renamed constant rel_comp to relcomp.
```
```  1475
```
```  1476   - Dropped abbreviation pred_comp. Use relcompp instead.
```
```  1477
```
```  1478   - Renamed theorems:
```
```  1479
```
```  1480     rel_compI ~> relcompI
```
```  1481     rel_compEpair ~> relcompEpair
```
```  1482     rel_compE ~> relcompE
```
```  1483     pred_comp_rel_comp_eq ~> relcompp_relcomp_eq
```
```  1484     rel_comp_empty1 ~> relcomp_empty1
```
```  1485     rel_comp_mono ~> relcomp_mono
```
```  1486     rel_comp_subset_Sigma ~> relcomp_subset_Sigma
```
```  1487     rel_comp_distrib ~> relcomp_distrib
```
```  1488     rel_comp_distrib2 ~> relcomp_distrib2
```
```  1489     rel_comp_UNION_distrib ~> relcomp_UNION_distrib
```
```  1490     rel_comp_UNION_distrib2 ~> relcomp_UNION_distrib2
```
```  1491     single_valued_rel_comp ~> single_valued_relcomp
```
```  1492     rel_comp_def ~> relcomp_unfold
```
```  1493     converse_rel_comp ~> converse_relcomp
```
```  1494     pred_compI ~> relcomppI
```
```  1495     pred_compE ~> relcomppE
```
```  1496     pred_comp_bot1 ~> relcompp_bot1
```
```  1497     pred_comp_bot2 ~> relcompp_bot2
```
```  1498     transp_pred_comp_less_eq ~> transp_relcompp_less_eq
```
```  1499     pred_comp_mono ~> relcompp_mono
```
```  1500     pred_comp_distrib ~> relcompp_distrib
```
```  1501     pred_comp_distrib2 ~> relcompp_distrib2
```
```  1502     converse_pred_comp ~> converse_relcompp
```
```  1503
```
```  1504     finite_rel_comp ~> finite_relcomp
```
```  1505
```
```  1506     set_rel_comp ~> set_relcomp
```
```  1507
```
```  1508 INCOMPATIBILITY.
```
```  1509
```
```  1510 * Theory Divides: Discontinued redundant theorems about div and mod.
```
```  1511 INCOMPATIBILITY, use the corresponding generic theorems instead.
```
```  1512
```
```  1513   DIVISION_BY_ZERO ~> div_by_0, mod_by_0
```
```  1514   zdiv_self ~> div_self
```
```  1515   zmod_self ~> mod_self
```
```  1516   zdiv_zero ~> div_0
```
```  1517   zmod_zero ~> mod_0
```
```  1518   zdiv_zmod_equality ~> div_mod_equality2
```
```  1519   zdiv_zmod_equality2 ~> div_mod_equality
```
```  1520   zmod_zdiv_trivial ~> mod_div_trivial
```
```  1521   zdiv_zminus_zminus ~> div_minus_minus
```
```  1522   zmod_zminus_zminus ~> mod_minus_minus
```
```  1523   zdiv_zminus2 ~> div_minus_right
```
```  1524   zmod_zminus2 ~> mod_minus_right
```
```  1525   zdiv_minus1_right ~> div_minus1_right
```
```  1526   zmod_minus1_right ~> mod_minus1_right
```
```  1527   zdvd_mult_div_cancel ~> dvd_mult_div_cancel
```
```  1528   zmod_zmult1_eq ~> mod_mult_right_eq
```
```  1529   zpower_zmod ~> power_mod
```
```  1530   zdvd_zmod ~> dvd_mod
```
```  1531   zdvd_zmod_imp_zdvd ~> dvd_mod_imp_dvd
```
```  1532   mod_mult_distrib ~> mult_mod_left
```
```  1533   mod_mult_distrib2 ~> mult_mod_right
```
```  1534
```
```  1535 * Removed redundant theorems nat_mult_2 and nat_mult_2_right; use
```
```  1536 generic mult_2 and mult_2_right instead. INCOMPATIBILITY.
```
```  1537
```
```  1538 * Finite_Set.fold now qualified.  INCOMPATIBILITY.
```
```  1539
```
```  1540 * Consolidated theorem names concerning fold combinators:
```
```  1541
```
```  1542   inf_INFI_fold_inf ~> inf_INF_fold_inf
```
```  1543   sup_SUPR_fold_sup ~> sup_SUP_fold_sup
```
```  1544   INFI_fold_inf ~> INF_fold_inf
```
```  1545   SUPR_fold_sup ~> SUP_fold_sup
```
```  1546   union_set ~> union_set_fold
```
```  1547   minus_set ~> minus_set_fold
```
```  1548   INFI_set_fold ~> INF_set_fold
```
```  1549   SUPR_set_fold ~> SUP_set_fold
```
```  1550   INF_code ~> INF_set_foldr
```
```  1551   SUP_code ~> SUP_set_foldr
```
```  1552   foldr.simps ~> foldr.simps (in point-free formulation)
```
```  1553   foldr_fold_rev ~> foldr_conv_fold
```
```  1554   foldl_fold ~> foldl_conv_fold
```
```  1555   foldr_foldr ~> foldr_conv_foldl
```
```  1556   foldl_foldr ~> foldl_conv_foldr
```
```  1557   fold_set_remdups ~> fold_set_fold_remdups
```
```  1558   fold_set ~> fold_set_fold
```
```  1559   fold1_set ~> fold1_set_fold
```
```  1560
```
```  1561 INCOMPATIBILITY.
```
```  1562
```
```  1563 * Dropped rarely useful theorems concerning fold combinators:
```
```  1564 foldl_apply, foldl_fun_comm, foldl_rev, fold_weak_invariant,
```
```  1565 rev_foldl_cons, fold_set_remdups, fold_set, fold_set1,
```
```  1566 concat_conv_foldl, foldl_weak_invariant, foldl_invariant,
```
```  1567 foldr_invariant, foldl_absorb0, foldl_foldr1_lemma, foldl_foldr1,
```
```  1568 listsum_conv_fold, listsum_foldl, sort_foldl_insort, foldl_assoc,
```
```  1569 foldr_conv_foldl, start_le_sum, elem_le_sum, sum_eq_0_conv.
```
```  1570 INCOMPATIBILITY.  For the common phrases "%xs. List.foldr plus xs 0"
```
```  1571 and "List.foldl plus 0", prefer "List.listsum".  Otherwise it can be
```
```  1572 useful to boil down "List.foldr" and "List.foldl" to "List.fold" by
```
```  1573 unfolding "foldr_conv_fold" and "foldl_conv_fold".
```
```  1574
```
```  1575 * Dropped lemmas minus_set_foldr, union_set_foldr, union_coset_foldr,
```
```  1576 inter_coset_foldr, Inf_fin_set_foldr, Sup_fin_set_foldr,
```
```  1577 Min_fin_set_foldr, Max_fin_set_foldr, Inf_set_foldr, Sup_set_foldr,
```
```  1578 INF_set_foldr, SUP_set_foldr.  INCOMPATIBILITY.  Prefer corresponding
```
```  1579 lemmas over fold rather than foldr, or make use of lemmas
```
```  1580 fold_conv_foldr and fold_rev.
```
```  1581
```
```  1582 * Congruence rules Option.map_cong and Option.bind_cong for recursion
```
```  1583 through option types.
```
```  1584
```
```  1585 * "Transitive_Closure.ntrancl": bounded transitive closure on
```
```  1586 relations.
```
```  1587
```
```  1588 * Constant "Set.not_member" now qualified.  INCOMPATIBILITY.
```
```  1589
```
```  1590 * Theory Int: Discontinued many legacy theorems specific to type int.
```
```  1591 INCOMPATIBILITY, use the corresponding generic theorems instead.
```
```  1592
```
```  1593   zminus_zminus ~> minus_minus
```
```  1594   zminus_0 ~> minus_zero
```
```  1595   zminus_zadd_distrib ~> minus_add_distrib
```
```  1596   zadd_commute ~> add_commute
```
```  1597   zadd_assoc ~> add_assoc
```
```  1598   zadd_left_commute ~> add_left_commute
```
```  1599   zadd_ac ~> add_ac
```
```  1600   zmult_ac ~> mult_ac
```
```  1601   zadd_0 ~> add_0_left
```
```  1602   zadd_0_right ~> add_0_right
```
```  1603   zadd_zminus_inverse2 ~> left_minus
```
```  1604   zmult_zminus ~> mult_minus_left
```
```  1605   zmult_commute ~> mult_commute
```
```  1606   zmult_assoc ~> mult_assoc
```
```  1607   zadd_zmult_distrib ~> left_distrib
```
```  1608   zadd_zmult_distrib2 ~> right_distrib
```
```  1609   zdiff_zmult_distrib ~> left_diff_distrib
```
```  1610   zdiff_zmult_distrib2 ~> right_diff_distrib
```
```  1611   zmult_1 ~> mult_1_left
```
```  1612   zmult_1_right ~> mult_1_right
```
```  1613   zle_refl ~> order_refl
```
```  1614   zle_trans ~> order_trans
```
```  1615   zle_antisym ~> order_antisym
```
```  1616   zle_linear ~> linorder_linear
```
```  1617   zless_linear ~> linorder_less_linear
```
```  1618   zadd_left_mono ~> add_left_mono
```
```  1619   zadd_strict_right_mono ~> add_strict_right_mono
```
```  1620   zadd_zless_mono ~> add_less_le_mono
```
```  1621   int_0_less_1 ~> zero_less_one
```
```  1622   int_0_neq_1 ~> zero_neq_one
```
```  1623   zless_le ~> less_le
```
```  1624   zpower_zadd_distrib ~> power_add
```
```  1625   zero_less_zpower_abs_iff ~> zero_less_power_abs_iff
```
```  1626   zero_le_zpower_abs ~> zero_le_power_abs
```
```  1627
```
```  1628 * Theory Deriv: Renamed
```
```  1629
```
```  1630   DERIV_nonneg_imp_nonincreasing ~> DERIV_nonneg_imp_nondecreasing
```
```  1631
```
```  1632 * Theory Library/Multiset: Improved code generation of multisets.
```
```  1633
```
```  1634 * Theory HOL/Library/Set_Algebras: Addition and multiplication on sets
```
```  1635 are expressed via type classes again. The special syntax
```
```  1636 \<oplus>/\<otimes> has been replaced by plain +/*. Removed constant
```
```  1637 setsum_set, which is now subsumed by Big_Operators.setsum.
```
```  1638 INCOMPATIBILITY.
```
```  1639
```
```  1640 * Theory HOL/Library/Diagonalize has been removed. INCOMPATIBILITY,
```
```  1641 use theory HOL/Library/Nat_Bijection instead.
```
```  1642
```
```  1643 * Theory HOL/Library/RBT_Impl: Backing implementation of red-black
```
```  1644 trees is now inside a type class context.  Names of affected
```
```  1645 operations and lemmas have been prefixed by rbt_.  INCOMPATIBILITY for
```
```  1646 theories working directly with raw red-black trees, adapt the names as
```
```  1647 follows:
```
```  1648
```
```  1649   Operations:
```
```  1650   bulkload -> rbt_bulkload
```
```  1651   del_from_left -> rbt_del_from_left
```
```  1652   del_from_right -> rbt_del_from_right
```
```  1653   del -> rbt_del
```
```  1654   delete -> rbt_delete
```
```  1655   ins -> rbt_ins
```
```  1656   insert -> rbt_insert
```
```  1657   insertw -> rbt_insert_with
```
```  1658   insert_with_key -> rbt_insert_with_key
```
```  1659   map_entry -> rbt_map_entry
```
```  1660   lookup -> rbt_lookup
```
```  1661   sorted -> rbt_sorted
```
```  1662   tree_greater -> rbt_greater
```
```  1663   tree_less -> rbt_less
```
```  1664   tree_less_symbol -> rbt_less_symbol
```
```  1665   union -> rbt_union
```
```  1666   union_with -> rbt_union_with
```
```  1667   union_with_key -> rbt_union_with_key
```
```  1668
```
```  1669   Lemmas:
```
```  1670   balance_left_sorted -> balance_left_rbt_sorted
```
```  1671   balance_left_tree_greater -> balance_left_rbt_greater
```
```  1672   balance_left_tree_less -> balance_left_rbt_less
```
```  1673   balance_right_sorted -> balance_right_rbt_sorted
```
```  1674   balance_right_tree_greater -> balance_right_rbt_greater
```
```  1675   balance_right_tree_less -> balance_right_rbt_less
```
```  1676   balance_sorted -> balance_rbt_sorted
```
```  1677   balance_tree_greater -> balance_rbt_greater
```
```  1678   balance_tree_less -> balance_rbt_less
```
```  1679   bulkload_is_rbt -> rbt_bulkload_is_rbt
```
```  1680   combine_sorted -> combine_rbt_sorted
```
```  1681   combine_tree_greater -> combine_rbt_greater
```
```  1682   combine_tree_less -> combine_rbt_less
```
```  1683   delete_in_tree -> rbt_delete_in_tree
```
```  1684   delete_is_rbt -> rbt_delete_is_rbt
```
```  1685   del_from_left_tree_greater -> rbt_del_from_left_rbt_greater
```
```  1686   del_from_left_tree_less -> rbt_del_from_left_rbt_less
```
```  1687   del_from_right_tree_greater -> rbt_del_from_right_rbt_greater
```
```  1688   del_from_right_tree_less -> rbt_del_from_right_rbt_less
```
```  1689   del_in_tree -> rbt_del_in_tree
```
```  1690   del_inv1_inv2 -> rbt_del_inv1_inv2
```
```  1691   del_sorted -> rbt_del_rbt_sorted
```
```  1692   del_tree_greater -> rbt_del_rbt_greater
```
```  1693   del_tree_less -> rbt_del_rbt_less
```
```  1694   dom_lookup_Branch -> dom_rbt_lookup_Branch
```
```  1695   entries_lookup -> entries_rbt_lookup
```
```  1696   finite_dom_lookup -> finite_dom_rbt_lookup
```
```  1697   insert_sorted -> rbt_insert_rbt_sorted
```
```  1698   insertw_is_rbt -> rbt_insertw_is_rbt
```
```  1699   insertwk_is_rbt -> rbt_insertwk_is_rbt
```
```  1700   insertwk_sorted -> rbt_insertwk_rbt_sorted
```
```  1701   insertw_sorted -> rbt_insertw_rbt_sorted
```
```  1702   ins_sorted -> ins_rbt_sorted
```
```  1703   ins_tree_greater -> ins_rbt_greater
```
```  1704   ins_tree_less -> ins_rbt_less
```
```  1705   is_rbt_sorted -> is_rbt_rbt_sorted
```
```  1706   lookup_balance -> rbt_lookup_balance
```
```  1707   lookup_bulkload -> rbt_lookup_rbt_bulkload
```
```  1708   lookup_delete -> rbt_lookup_rbt_delete
```
```  1709   lookup_Empty -> rbt_lookup_Empty
```
```  1710   lookup_from_in_tree -> rbt_lookup_from_in_tree
```
```  1711   lookup_in_tree -> rbt_lookup_in_tree
```
```  1712   lookup_ins -> rbt_lookup_ins
```
```  1713   lookup_insert -> rbt_lookup_rbt_insert
```
```  1714   lookup_insertw -> rbt_lookup_rbt_insertw
```
```  1715   lookup_insertwk -> rbt_lookup_rbt_insertwk
```
```  1716   lookup_keys -> rbt_lookup_keys
```
```  1717   lookup_map -> rbt_lookup_map
```
```  1718   lookup_map_entry -> rbt_lookup_rbt_map_entry
```
```  1719   lookup_tree_greater -> rbt_lookup_rbt_greater
```
```  1720   lookup_tree_less -> rbt_lookup_rbt_less
```
```  1721   lookup_union -> rbt_lookup_rbt_union
```
```  1722   map_entry_color_of -> rbt_map_entry_color_of
```
```  1723   map_entry_inv1 -> rbt_map_entry_inv1
```
```  1724   map_entry_inv2 -> rbt_map_entry_inv2
```
```  1725   map_entry_is_rbt -> rbt_map_entry_is_rbt
```
```  1726   map_entry_sorted -> rbt_map_entry_rbt_sorted
```
```  1727   map_entry_tree_greater -> rbt_map_entry_rbt_greater
```
```  1728   map_entry_tree_less -> rbt_map_entry_rbt_less
```
```  1729   map_tree_greater -> map_rbt_greater
```
```  1730   map_tree_less -> map_rbt_less
```
```  1731   map_sorted -> map_rbt_sorted
```
```  1732   paint_sorted -> paint_rbt_sorted
```
```  1733   paint_lookup -> paint_rbt_lookup
```
```  1734   paint_tree_greater -> paint_rbt_greater
```
```  1735   paint_tree_less -> paint_rbt_less
```
```  1736   sorted_entries -> rbt_sorted_entries
```
```  1737   tree_greater_eq_trans -> rbt_greater_eq_trans
```
```  1738   tree_greater_nit -> rbt_greater_nit
```
```  1739   tree_greater_prop -> rbt_greater_prop
```
```  1740   tree_greater_simps -> rbt_greater_simps
```
```  1741   tree_greater_trans -> rbt_greater_trans
```
```  1742   tree_less_eq_trans -> rbt_less_eq_trans
```
```  1743   tree_less_nit -> rbt_less_nit
```
```  1744   tree_less_prop -> rbt_less_prop
```
```  1745   tree_less_simps -> rbt_less_simps
```
```  1746   tree_less_trans -> rbt_less_trans
```
```  1747   tree_ord_props -> rbt_ord_props
```
```  1748   union_Branch -> rbt_union_Branch
```
```  1749   union_is_rbt -> rbt_union_is_rbt
```
```  1750   unionw_is_rbt -> rbt_unionw_is_rbt
```
```  1751   unionwk_is_rbt -> rbt_unionwk_is_rbt
```
```  1752   unionwk_sorted -> rbt_unionwk_rbt_sorted
```
```  1753
```
```  1754 * Theory HOL/Library/Float: Floating point numbers are now defined as
```
```  1755 a subset of the real numbers.  All operations are defined using the
```
```  1756 lifing-framework and proofs use the transfer method.  INCOMPATIBILITY.
```
```  1757
```
```  1758   Changed Operations:
```
```  1759   float_abs -> abs
```
```  1760   float_nprt -> nprt
```
```  1761   float_pprt -> pprt
```
```  1762   pow2 -> use powr
```
```  1763   round_down -> float_round_down
```
```  1764   round_up -> float_round_up
```
```  1765   scale -> exponent
```
```  1766
```
```  1767   Removed Operations:
```
```  1768   ceiling_fl, lb_mult, lb_mod, ub_mult, ub_mod
```
```  1769
```
```  1770   Renamed Lemmas:
```
```  1771   abs_float_def -> Float.compute_float_abs
```
```  1772   bitlen_ge0 -> bitlen_nonneg
```
```  1773   bitlen.simps -> Float.compute_bitlen
```
```  1774   float_components -> Float_mantissa_exponent
```
```  1775   float_divl.simps -> Float.compute_float_divl
```
```  1776   float_divr.simps -> Float.compute_float_divr
```
```  1777   float_eq_odd -> mult_powr_eq_mult_powr_iff
```
```  1778   float_power -> real_of_float_power
```
```  1779   lapprox_posrat_def -> Float.compute_lapprox_posrat
```
```  1780   lapprox_rat.simps -> Float.compute_lapprox_rat
```
```  1781   le_float_def' -> Float.compute_float_le
```
```  1782   le_float_def -> less_eq_float.rep_eq
```
```  1783   less_float_def' -> Float.compute_float_less
```
```  1784   less_float_def -> less_float.rep_eq
```
```  1785   normfloat_def -> Float.compute_normfloat
```
```  1786   normfloat_imp_odd_or_zero -> mantissa_not_dvd and mantissa_noteq_0
```
```  1787   normfloat -> normfloat_def
```
```  1788   normfloat_unique -> use normfloat_def
```
```  1789   number_of_float_Float -> Float.compute_float_numeral, Float.compute_float_neg_numeral
```
```  1790   one_float_def -> Float.compute_float_one
```
```  1791   plus_float_def -> Float.compute_float_plus
```
```  1792   rapprox_posrat_def -> Float.compute_rapprox_posrat
```
```  1793   rapprox_rat.simps -> Float.compute_rapprox_rat
```
```  1794   real_of_float_0 -> zero_float.rep_eq
```
```  1795   real_of_float_1 -> one_float.rep_eq
```
```  1796   real_of_float_abs -> abs_float.rep_eq
```
```  1797   real_of_float_add -> plus_float.rep_eq
```
```  1798   real_of_float_minus -> uminus_float.rep_eq
```
```  1799   real_of_float_mult -> times_float.rep_eq
```
```  1800   real_of_float_simp -> Float.rep_eq
```
```  1801   real_of_float_sub -> minus_float.rep_eq
```
```  1802   round_down.simps -> Float.compute_float_round_down
```
```  1803   round_up.simps -> Float.compute_float_round_up
```
```  1804   times_float_def -> Float.compute_float_times
```
```  1805   uminus_float_def -> Float.compute_float_uminus
```
```  1806   zero_float_def -> Float.compute_float_zero
```
```  1807
```
```  1808   Lemmas not necessary anymore, use the transfer method:
```
```  1809   bitlen_B0, bitlen_B1, bitlen_ge1, bitlen_Min, bitlen_Pls, float_divl,
```
```  1810   float_divr, float_le_simp, float_less1_mantissa_bound,
```
```  1811   float_less_simp, float_less_zero, float_le_zero,
```
```  1812   float_pos_less1_e_neg, float_pos_m_pos, float_split, float_split2,
```
```  1813   floor_pos_exp, lapprox_posrat, lapprox_posrat_bottom, lapprox_rat,
```
```  1814   lapprox_rat_bottom, normalized_float, rapprox_posrat,
```
```  1815   rapprox_posrat_le1, rapprox_rat, real_of_float_ge0_exp,
```
```  1816   real_of_float_neg_exp, real_of_float_nge0_exp, round_down floor_fl,
```
```  1817   round_up, zero_le_float, zero_less_float
```
```  1818
```
```  1819 * New theory HOL/Library/DAList provides an abstract type for
```
```  1820 association lists with distinct keys.
```
```  1821
```
```  1822 * Session HOL/IMP: Added new theory of abstract interpretation of
```
```  1823 annotated commands.
```
```  1824
```
```  1825 * Session HOL-Import: Re-implementation from scratch is faster,
```
```  1826 simpler, and more scalable.  Requires a proof bundle, which is
```
```  1827 available as an external component.  Discontinued old (and mostly
```
```  1828 dead) Importer for HOL4 and HOL Light.  INCOMPATIBILITY.
```
```  1829
```
```  1830 * Session HOL-Word: Discontinued many redundant theorems specific to
```
```  1831 type 'a word. INCOMPATIBILITY, use the corresponding generic theorems
```
```  1832 instead.
```
```  1833
```
```  1834   word_sub_alt ~> word_sub_wi
```
```  1835   word_add_alt ~> word_add_def
```
```  1836   word_mult_alt ~> word_mult_def
```
```  1837   word_minus_alt ~> word_minus_def
```
```  1838   word_0_alt ~> word_0_wi
```
```  1839   word_1_alt ~> word_1_wi
```
```  1840   word_add_0 ~> add_0_left
```
```  1841   word_add_0_right ~> add_0_right
```
```  1842   word_mult_1 ~> mult_1_left
```
```  1843   word_mult_1_right ~> mult_1_right
```
```  1844   word_add_commute ~> add_commute
```
```  1845   word_add_assoc ~> add_assoc
```
```  1846   word_add_left_commute ~> add_left_commute
```
```  1847   word_mult_commute ~> mult_commute
```
```  1848   word_mult_assoc ~> mult_assoc
```
```  1849   word_mult_left_commute ~> mult_left_commute
```
```  1850   word_left_distrib ~> left_distrib
```
```  1851   word_right_distrib ~> right_distrib
```
```  1852   word_left_minus ~> left_minus
```
```  1853   word_diff_0_right ~> diff_0_right
```
```  1854   word_diff_self ~> diff_self
```
```  1855   word_sub_def ~> diff_minus
```
```  1856   word_diff_minus ~> diff_minus
```
```  1857   word_add_ac ~> add_ac
```
```  1858   word_mult_ac ~> mult_ac
```
```  1859   word_plus_ac0 ~> add_0_left add_0_right add_ac
```
```  1860   word_times_ac1 ~> mult_1_left mult_1_right mult_ac
```
```  1861   word_order_trans ~> order_trans
```
```  1862   word_order_refl ~> order_refl
```
```  1863   word_order_antisym ~> order_antisym
```
```  1864   word_order_linear ~> linorder_linear
```
```  1865   lenw1_zero_neq_one ~> zero_neq_one
```
```  1866   word_number_of_eq ~> number_of_eq
```
```  1867   word_of_int_add_hom ~> wi_hom_add
```
```  1868   word_of_int_sub_hom ~> wi_hom_sub
```
```  1869   word_of_int_mult_hom ~> wi_hom_mult
```
```  1870   word_of_int_minus_hom ~> wi_hom_neg
```
```  1871   word_of_int_succ_hom ~> wi_hom_succ
```
```  1872   word_of_int_pred_hom ~> wi_hom_pred
```
```  1873   word_of_int_0_hom ~> word_0_wi
```
```  1874   word_of_int_1_hom ~> word_1_wi
```
```  1875
```
```  1876 * Session HOL-Word: New proof method "word_bitwise" for splitting
```
```  1877 machine word equalities and inequalities into logical circuits,
```
```  1878 defined in HOL/Word/WordBitwise.thy.  Supports addition, subtraction,
```
```  1879 multiplication, shifting by constants, bitwise operators and numeric
```
```  1880 constants.  Requires fixed-length word types, not 'a word.  Solves
```
```  1881 many standard word identities outright and converts more into first
```
```  1882 order problems amenable to blast or similar.  See also examples in
```
```  1883 HOL/Word/Examples/WordExamples.thy.
```
```  1884
```
```  1885 * Session HOL-Probability: Introduced the type "'a measure" to
```
```  1886 represent measures, this replaces the records 'a algebra and 'a
```
```  1887 measure_space.  The locales based on subset_class now have two
```
```  1888 locale-parameters the space \<Omega> and the set of measurable sets M.
```
```  1889 The product of probability spaces uses now the same constant as the
```
```  1890 finite product of sigma-finite measure spaces "PiM :: ('i => 'a)
```
```  1891 measure".  Most constants are defined now outside of locales and gain
```
```  1892 an additional parameter, like null_sets, almost_eventually or \<mu>'.
```
```  1893 Measure space constructions for distributions and densities now got
```
```  1894 their own constants distr and density.  Instead of using locales to
```
```  1895 describe measure spaces with a finite space, the measure count_space
```
```  1896 and point_measure is introduced.  INCOMPATIBILITY.
```
```  1897
```
```  1898   Renamed constants:
```
```  1899   measure -> emeasure
```
```  1900   finite_measure.\<mu>' -> measure
```
```  1901   product_algebra_generator -> prod_algebra
```
```  1902   product_prob_space.emb -> prod_emb
```
```  1903   product_prob_space.infprod_algebra -> PiM
```
```  1904
```
```  1905   Removed locales:
```
```  1906   completeable_measure_space
```
```  1907   finite_measure_space
```
```  1908   finite_prob_space
```
```  1909   finite_product_finite_prob_space
```
```  1910   finite_product_sigma_algebra
```
```  1911   finite_sigma_algebra
```
```  1912   measure_space
```
```  1913   pair_finite_prob_space
```
```  1914   pair_finite_sigma_algebra
```
```  1915   pair_finite_space
```
```  1916   pair_sigma_algebra
```
```  1917   product_sigma_algebra
```
```  1918
```
```  1919   Removed constants:
```
```  1920   conditional_space
```
```  1921   distribution -> use distr measure, or distributed predicate
```
```  1922   image_space
```
```  1923   joint_distribution -> use distr measure, or distributed predicate
```
```  1924   pair_measure_generator
```
```  1925   product_prob_space.infprod_algebra -> use PiM
```
```  1926   subvimage
```
```  1927
```
```  1928   Replacement theorems:
```
```  1929   finite_additivity_sufficient -> ring_of_sets.countably_additiveI_finite
```
```  1930   finite_measure.empty_measure -> measure_empty
```
```  1931   finite_measure.finite_continuity_from_above -> finite_measure.finite_Lim_measure_decseq
```
```  1932   finite_measure.finite_continuity_from_below -> finite_measure.finite_Lim_measure_incseq
```
```  1933   finite_measure.finite_measure_countably_subadditive -> finite_measure.finite_measure_subadditive_countably
```
```  1934   finite_measure.finite_measure_eq -> finite_measure.emeasure_eq_measure
```
```  1935   finite_measure.finite_measure -> finite_measure.emeasure_finite
```
```  1936   finite_measure.finite_measure_finite_singleton -> finite_measure.finite_measure_eq_setsum_singleton
```
```  1937   finite_measure.positive_measure' -> measure_nonneg
```
```  1938   finite_measure.real_measure -> finite_measure.emeasure_real
```
```  1939   finite_product_prob_space.finite_measure_times -> finite_product_prob_space.finite_measure_PiM_emb
```
```  1940   finite_product_sigma_algebra.in_P -> sets_PiM_I_finite
```
```  1941   finite_product_sigma_algebra.P_empty -> space_PiM_empty, sets_PiM_empty
```
```  1942   information_space.conditional_entropy_eq -> information_space.conditional_entropy_simple_distributed
```
```  1943   information_space.conditional_entropy_positive -> information_space.conditional_entropy_nonneg_simple
```
```  1944   information_space.conditional_mutual_information_eq_mutual_information -> information_space.conditional_mutual_information_eq_mutual_information_simple
```
```  1945   information_space.conditional_mutual_information_generic_positive -> information_space.conditional_mutual_information_nonneg_simple
```
```  1946   information_space.conditional_mutual_information_positive -> information_space.conditional_mutual_information_nonneg_simple
```
```  1947   information_space.entropy_commute -> information_space.entropy_commute_simple
```
```  1948   information_space.entropy_eq -> information_space.entropy_simple_distributed
```
```  1949   information_space.entropy_generic_eq -> information_space.entropy_simple_distributed
```
```  1950   information_space.entropy_positive -> information_space.entropy_nonneg_simple
```
```  1951   information_space.entropy_uniform_max -> information_space.entropy_uniform
```
```  1952   information_space.KL_eq_0_imp -> information_space.KL_eq_0_iff_eq
```
```  1953   information_space.KL_eq_0 -> information_space.KL_same_eq_0
```
```  1954   information_space.KL_ge_0 -> information_space.KL_nonneg
```
```  1955   information_space.mutual_information_eq -> information_space.mutual_information_simple_distributed
```
```  1956   information_space.mutual_information_positive -> information_space.mutual_information_nonneg_simple
```
```  1957   Int_stable_cuboids -> Int_stable_atLeastAtMost
```
```  1958   Int_stable_product_algebra_generator -> positive_integral
```
```  1959   measure_preserving -> equality "distr M N f = N" "f : measurable M N"
```
```  1960   measure_space.additive -> emeasure_additive
```
```  1961   measure_space.AE_iff_null_set -> AE_iff_null
```
```  1962   measure_space.almost_everywhere_def -> eventually_ae_filter
```
```  1963   measure_space.almost_everywhere_vimage -> AE_distrD
```
```  1964   measure_space.continuity_from_above -> INF_emeasure_decseq
```
```  1965   measure_space.continuity_from_above_Lim -> Lim_emeasure_decseq
```
```  1966   measure_space.continuity_from_below_Lim -> Lim_emeasure_incseq
```
```  1967   measure_space.continuity_from_below -> SUP_emeasure_incseq
```
```  1968   measure_space_density -> emeasure_density
```
```  1969   measure_space.density_is_absolutely_continuous -> absolutely_continuousI_density
```
```  1970   measure_space.integrable_vimage -> integrable_distr
```
```  1971   measure_space.integral_translated_density -> integral_density
```
```  1972   measure_space.integral_vimage -> integral_distr
```
```  1973   measure_space.measure_additive -> plus_emeasure
```
```  1974   measure_space.measure_compl -> emeasure_compl
```
```  1975   measure_space.measure_countable_increasing -> emeasure_countable_increasing
```
```  1976   measure_space.measure_countably_subadditive -> emeasure_subadditive_countably
```
```  1977   measure_space.measure_decseq -> decseq_emeasure
```
```  1978   measure_space.measure_Diff -> emeasure_Diff
```
```  1979   measure_space.measure_Diff_null_set -> emeasure_Diff_null_set
```
```  1980   measure_space.measure_eq_0 -> emeasure_eq_0
```
```  1981   measure_space.measure_finitely_subadditive -> emeasure_subadditive_finite
```
```  1982   measure_space.measure_finite_singleton -> emeasure_eq_setsum_singleton
```
```  1983   measure_space.measure_incseq -> incseq_emeasure
```
```  1984   measure_space.measure_insert -> emeasure_insert
```
```  1985   measure_space.measure_mono -> emeasure_mono
```
```  1986   measure_space.measure_not_negative -> emeasure_not_MInf
```
```  1987   measure_space.measure_preserving_Int_stable -> measure_eqI_generator_eq
```
```  1988   measure_space.measure_setsum -> setsum_emeasure
```
```  1989   measure_space.measure_setsum_split -> setsum_emeasure_cover
```
```  1990   measure_space.measure_space_vimage -> emeasure_distr
```
```  1991   measure_space.measure_subadditive_finite -> emeasure_subadditive_finite
```
```  1992   measure_space.measure_subadditive -> subadditive
```
```  1993   measure_space.measure_top -> emeasure_space
```
```  1994   measure_space.measure_UN_eq_0 -> emeasure_UN_eq_0
```
```  1995   measure_space.measure_Un_null_set -> emeasure_Un_null_set
```
```  1996   measure_space.positive_integral_translated_density -> positive_integral_density
```
```  1997   measure_space.positive_integral_vimage -> positive_integral_distr
```
```  1998   measure_space.real_continuity_from_above -> Lim_measure_decseq
```
```  1999   measure_space.real_continuity_from_below -> Lim_measure_incseq
```
```  2000   measure_space.real_measure_countably_subadditive -> measure_subadditive_countably
```
```  2001   measure_space.real_measure_Diff -> measure_Diff
```
```  2002   measure_space.real_measure_finite_Union -> measure_finite_Union
```
```  2003   measure_space.real_measure_setsum_singleton -> measure_eq_setsum_singleton
```
```  2004   measure_space.real_measure_subadditive -> measure_subadditive
```
```  2005   measure_space.real_measure_Union -> measure_Union
```
```  2006   measure_space.real_measure_UNION -> measure_UNION
```
```  2007   measure_space.simple_function_vimage -> simple_function_comp
```
```  2008   measure_space.simple_integral_vimage -> simple_integral_distr
```
```  2009   measure_space.simple_integral_vimage -> simple_integral_distr
```
```  2010   measure_unique_Int_stable -> measure_eqI_generator_eq
```
```  2011   measure_unique_Int_stable_vimage -> measure_eqI_generator_eq
```
```  2012   pair_sigma_algebra.measurable_cut_fst -> sets_Pair1
```
```  2013   pair_sigma_algebra.measurable_cut_snd -> sets_Pair2
```
```  2014   pair_sigma_algebra.measurable_pair_image_fst -> measurable_Pair1
```
```  2015   pair_sigma_algebra.measurable_pair_image_snd -> measurable_Pair2
```
```  2016   pair_sigma_algebra.measurable_product_swap -> measurable_pair_swap_iff
```
```  2017   pair_sigma_algebra.pair_sigma_algebra_measurable -> measurable_pair_swap
```
```  2018   pair_sigma_algebra.pair_sigma_algebra_swap_measurable -> measurable_pair_swap'
```
```  2019   pair_sigma_algebra.sets_swap -> sets_pair_swap
```
```  2020   pair_sigma_finite.measure_cut_measurable_fst -> pair_sigma_finite.measurable_emeasure_Pair1
```
```  2021   pair_sigma_finite.measure_cut_measurable_snd -> pair_sigma_finite.measurable_emeasure_Pair2
```
```  2022   pair_sigma_finite.measure_preserving_swap -> pair_sigma_finite.distr_pair_swap
```
```  2023   pair_sigma_finite.pair_measure_alt2 -> pair_sigma_finite.emeasure_pair_measure_alt2
```
```  2024   pair_sigma_finite.pair_measure_alt -> pair_sigma_finite.emeasure_pair_measure_alt
```
```  2025   pair_sigma_finite.pair_measure_times -> pair_sigma_finite.emeasure_pair_measure_Times
```
```  2026   prob_space.indep_distribution_eq_measure -> prob_space.indep_vars_iff_distr_eq_PiM
```
```  2027   prob_space.indep_var_distributionD -> prob_space.indep_var_distribution_eq
```
```  2028   prob_space.measure_space_1 -> prob_space.emeasure_space_1
```
```  2029   prob_space.prob_space_vimage -> prob_space_distr
```
```  2030   prob_space.random_variable_restrict -> measurable_restrict
```
```  2031   prob_space_unique_Int_stable -> measure_eqI_prob_space
```
```  2032   product_algebraE -> prod_algebraE_all
```
```  2033   product_algebra_generator_der -> prod_algebra_eq_finite
```
```  2034   product_algebra_generator_into_space -> prod_algebra_sets_into_space
```
```  2035   product_algebraI -> sets_PiM_I_finite
```
```  2036   product_measure_exists -> product_sigma_finite.sigma_finite
```
```  2037   product_prob_space.finite_index_eq_finite_product -> product_prob_space.sets_PiM_generator
```
```  2038   product_prob_space.finite_measure_infprod_emb_Pi -> product_prob_space.measure_PiM_emb
```
```  2039   product_prob_space.infprod_spec -> product_prob_space.emeasure_PiM_emb_not_empty
```
```  2040   product_prob_space.measurable_component -> measurable_component_singleton
```
```  2041   product_prob_space.measurable_emb -> measurable_prod_emb
```
```  2042   product_prob_space.measurable_into_infprod_algebra -> measurable_PiM_single
```
```  2043   product_prob_space.measurable_singleton_infprod -> measurable_component_singleton
```
```  2044   product_prob_space.measure_emb -> emeasure_prod_emb
```
```  2045   product_prob_space.measure_preserving_restrict -> product_prob_space.distr_restrict
```
```  2046   product_sigma_algebra.product_algebra_into_space -> space_closed
```
```  2047   product_sigma_finite.measure_fold -> product_sigma_finite.distr_merge
```
```  2048   product_sigma_finite.measure_preserving_component_singelton -> product_sigma_finite.distr_singleton
```
```  2049   product_sigma_finite.measure_preserving_merge -> product_sigma_finite.distr_merge
```
```  2050   sequence_space.measure_infprod -> sequence_space.measure_PiM_countable
```
```  2051   sets_product_algebra -> sets_PiM
```
```  2052   sigma_algebra.measurable_sigma -> measurable_measure_of
```
```  2053   sigma_finite_measure.disjoint_sigma_finite -> sigma_finite_disjoint
```
```  2054   sigma_finite_measure.RN_deriv_vimage -> sigma_finite_measure.RN_deriv_distr
```
```  2055   sigma_product_algebra_sigma_eq -> sigma_prod_algebra_sigma_eq
```
```  2056   space_product_algebra -> space_PiM
```
```  2057
```
```  2058 * Session HOL-TPTP: support to parse and import TPTP problems (all
```
```  2059 languages) into Isabelle/HOL.
```
```  2060
```
```  2061
```
```  2062 *** FOL ***
```
```  2063
```
```  2064 * New "case_product" attribute (see HOL).
```
```  2065
```
```  2066
```
```  2067 *** ZF ***
```
```  2068
```
```  2069 * Greater support for structured proofs involving induction or case
```
```  2070 analysis.
```
```  2071
```
```  2072 * Much greater use of mathematical symbols.
```
```  2073
```
```  2074 * Removal of many ML theorem bindings.  INCOMPATIBILITY.
```
```  2075
```
```  2076
```
```  2077 *** ML ***
```
```  2078
```
```  2079 * Antiquotation @{keyword "name"} produces a parser for outer syntax
```
```  2080 from a minor keyword introduced via theory header declaration.
```
```  2081
```
```  2082 * Antiquotation @{command_spec "name"} produces the
```
```  2083 Outer_Syntax.command_spec from a major keyword introduced via theory
```
```  2084 header declaration; it can be passed to Outer_Syntax.command etc.
```
```  2085
```
```  2086 * Local_Theory.define no longer hard-wires default theorem name
```
```  2087 "foo_def", but retains the binding as given.  If that is Binding.empty
```
```  2088 / Attrib.empty_binding, the result is not registered as user-level
```
```  2089 fact.  The Local_Theory.define_internal variant allows to specify a
```
```  2090 non-empty name (used for the foundation in the background theory),
```
```  2091 while omitting the fact binding in the user-context.  Potential
```
```  2092 INCOMPATIBILITY for derived definitional packages: need to specify
```
```  2093 naming policy for primitive definitions more explicitly.
```
```  2094
```
```  2095 * Renamed Thm.capply to Thm.apply, and Thm.cabs to Thm.lambda in
```
```  2096 conformance with similar operations in structure Term and Logic.
```
```  2097
```
```  2098 * Antiquotation @{attributes [...]} embeds attribute source
```
```  2099 representation into the ML text, which is particularly useful with
```
```  2100 declarations like Local_Theory.note.
```
```  2101
```
```  2102 * Structure Proof_Context follows standard naming scheme.  Old
```
```  2103 ProofContext has been discontinued.  INCOMPATIBILITY.
```
```  2104
```
```  2105 * Refined Local_Theory.declaration {syntax, pervasive}, with subtle
```
```  2106 change of semantics: update is applied to auxiliary local theory
```
```  2107 context as well.
```
```  2108
```
```  2109 * Modernized some old-style infix operations:
```
```  2110
```
```  2111   addeqcongs    ~> Simplifier.add_eqcong
```
```  2112   deleqcongs    ~> Simplifier.del_eqcong
```
```  2113   addcongs      ~> Simplifier.add_cong
```
```  2114   delcongs      ~> Simplifier.del_cong
```
```  2115   setmksimps    ~> Simplifier.set_mksimps
```
```  2116   setmkcong     ~> Simplifier.set_mkcong
```
```  2117   setmksym      ~> Simplifier.set_mksym
```
```  2118   setmkeqTrue   ~> Simplifier.set_mkeqTrue
```
```  2119   settermless   ~> Simplifier.set_termless
```
```  2120   setsubgoaler  ~> Simplifier.set_subgoaler
```
```  2121   addsplits     ~> Splitter.add_split
```
```  2122   delsplits     ~> Splitter.del_split
```
```  2123
```
```  2124
```
```  2125 *** System ***
```
```  2126
```
```  2127 * USER_HOME settings variable points to cross-platform user home
```
```  2128 directory, which coincides with HOME on POSIX systems only.  Likewise,
```
```  2129 the Isabelle path specification "~" now expands to \$USER_HOME, instead
```
```  2130 of former \$HOME.  A different default for USER_HOME may be set
```
```  2131 explicitly in shell environment, before Isabelle settings are
```
```  2132 evaluated.  Minor INCOMPATIBILITY: need to adapt Isabelle path where
```
```  2133 the generic user home was intended.
```
```  2134
```
```  2135 * ISABELLE_HOME_WINDOWS refers to ISABELLE_HOME in windows file name
```
```  2136 notation, which is useful for the jEdit file browser, for example.
```
```  2137
```
```  2138 * ISABELLE_JDK_HOME settings variable points to JDK with javac and jar
```
```  2139 (not just JRE).
```
```  2140
```
```  2141
```
```  2142
```
```  2143 New in Isabelle2011-1 (October 2011)
```
```  2144 ------------------------------------
```
```  2145
```
```  2146 *** General ***
```
```  2147
```
```  2148 * Improved Isabelle/jEdit Prover IDE (PIDE), which can be invoked as
```
```  2149 "isabelle jedit" or "ISABELLE_HOME/Isabelle" on the command line.
```
```  2150
```
```  2151   - Management of multiple theory files directly from the editor
```
```  2152     buffer store -- bypassing the file-system (no requirement to save
```
```  2153     files for checking).
```
```  2154
```
```  2155   - Markup of formal entities within the text buffer, with semantic
```
```  2156     highlighting, tooltips and hyperlinks to jump to defining source
```
```  2157     positions.
```
```  2158
```
```  2159   - Improved text rendering, with sub/superscripts in the source
```
```  2160     buffer (including support for copy/paste wrt. output panel, HTML
```
```  2161     theory output and other non-Isabelle text boxes).
```
```  2162
```
```  2163   - Refined scheduling of proof checking and printing of results,
```
```  2164     based on interactive editor view.  (Note: jEdit folding and
```
```  2165     narrowing allows to restrict buffer perspectives explicitly.)
```
```  2166
```
```  2167   - Reduced CPU performance requirements, usable on machines with few
```
```  2168     cores.
```
```  2169
```
```  2170   - Reduced memory requirements due to pruning of unused document
```
```  2171     versions (garbage collection).
```
```  2172
```
```  2173 See also ~~/src/Tools/jEdit/README.html for further information,
```
```  2174 including some remaining limitations.
```
```  2175
```
```  2176 * Theory loader: source files are exclusively located via the master
```
```  2177 directory of each theory node (where the .thy file itself resides).
```
```  2178 The global load path (such as src/HOL/Library) has been discontinued.
```
```  2179 Note that the path element ~~ may be used to reference theories in the
```
```  2180 Isabelle home folder -- for instance, "~~/src/HOL/Library/FuncSet".
```
```  2181 INCOMPATIBILITY.
```
```  2182
```
```  2183 * Theory loader: source files are identified by content via SHA1
```
```  2184 digests.  Discontinued former path/modtime identification and optional
```
```  2185 ISABELLE_FILE_IDENT plugin scripts.
```
```  2186
```
```  2187 * Parallelization of nested Isar proofs is subject to
```
```  2188 Goal.parallel_proofs_threshold (default 100).  See also isabelle
```
```  2189 usedir option -Q.
```
```  2190
```
```  2191 * Name space: former unsynchronized references are now proper
```
```  2192 configuration options, with more conventional names:
```
```  2193
```
```  2194   long_names   ~> names_long
```
```  2195   short_names  ~> names_short
```
```  2196   unique_names ~> names_unique
```
```  2197
```
```  2198 Minor INCOMPATIBILITY, need to declare options in context like this:
```
```  2199
```
```  2200   declare [[names_unique = false]]
```
```  2201
```
```  2202 * Literal facts `prop` may contain dummy patterns, e.g. `_ = _`.  Note
```
```  2203 that the result needs to be unique, which means fact specifications
```
```  2204 may have to be refined after enriching a proof context.
```
```  2205
```
```  2206 * Attribute "case_names" has been refined: the assumptions in each case
```
```  2207 can be named now by following the case name with [name1 name2 ...].
```
```  2208
```
```  2209 * Isabelle/Isar reference manual has been updated and extended:
```
```  2210   - "Synopsis" provides a catalog of main Isar language concepts.
```
```  2211   - Formal references in syntax diagrams, via @{rail} antiquotation.
```
```  2212   - Updated material from classic "ref" manual, notably about
```
```  2213     "Classical Reasoner".
```
```  2214
```
```  2215
```
```  2216 *** HOL ***
```
```  2217
```
```  2218 * Class bot and top require underlying partial order rather than
```
```  2219 preorder: uniqueness of bot and top is guaranteed.  INCOMPATIBILITY.
```
```  2220
```
```  2221 * Class complete_lattice: generalized a couple of lemmas from sets;
```
```  2222 generalized theorems INF_cong and SUP_cong.  New type classes for
```
```  2223 complete boolean algebras and complete linear orders.  Lemmas
```
```  2224 Inf_less_iff, less_Sup_iff, INF_less_iff, less_SUP_iff now reside in
```
```  2225 class complete_linorder.
```
```  2226
```
```  2227 Changed proposition of lemmas Inf_bool_def, Sup_bool_def, Inf_fun_def,
```
```  2228 Sup_fun_def, Inf_apply, Sup_apply.
```
```  2229
```
```  2230 Removed redundant lemmas (the right hand side gives hints how to
```
```  2231 replace them for (metis ...), or (simp only: ...) proofs):
```
```  2232
```
```  2233   Inf_singleton ~> Inf_insert [where A="{}", unfolded Inf_empty inf_top_right]
```
```  2234   Sup_singleton ~> Sup_insert [where A="{}", unfolded Sup_empty sup_bot_right]
```
```  2235   Inf_binary ~> Inf_insert, Inf_empty, and inf_top_right
```
```  2236   Sup_binary ~> Sup_insert, Sup_empty, and sup_bot_right
```
```  2237   Int_eq_Inter ~> Inf_insert, Inf_empty, and inf_top_right
```
```  2238   Un_eq_Union ~> Sup_insert, Sup_empty, and sup_bot_right
```
```  2239   Inter_def ~> INF_def, image_def
```
```  2240   Union_def ~> SUP_def, image_def
```
```  2241   INT_eq ~> INF_def, and image_def
```
```  2242   UN_eq ~> SUP_def, and image_def
```
```  2243   INF_subset ~> INF_superset_mono [OF _ order_refl]
```
```  2244
```
```  2245 More consistent and comprehensive names:
```
```  2246
```
```  2247   INTER_eq_Inter_image ~> INF_def
```
```  2248   UNION_eq_Union_image ~> SUP_def
```
```  2249   INFI_def ~> INF_def
```
```  2250   SUPR_def ~> SUP_def
```
```  2251   INF_leI ~> INF_lower
```
```  2252   INF_leI2 ~> INF_lower2
```
```  2253   le_INFI ~> INF_greatest
```
```  2254   le_SUPI ~> SUP_upper
```
```  2255   le_SUPI2 ~> SUP_upper2
```
```  2256   SUP_leI ~> SUP_least
```
```  2257   INFI_bool_eq ~> INF_bool_eq
```
```  2258   SUPR_bool_eq ~> SUP_bool_eq
```
```  2259   INFI_apply ~> INF_apply
```
```  2260   SUPR_apply ~> SUP_apply
```
```  2261   INTER_def ~> INTER_eq
```
```  2262   UNION_def ~> UNION_eq
```
```  2263
```
```  2264 INCOMPATIBILITY.
```
```  2265
```
```  2266 * Renamed theory Complete_Lattice to Complete_Lattices.
```
```  2267 INCOMPATIBILITY.
```
```  2268
```
```  2269 * Theory Complete_Lattices: lemmas Inf_eq_top_iff, INF_eq_top_iff,
```
```  2270 INF_image, Inf_insert, INF_top, Inf_top_conv, INF_top_conv, SUP_bot,
```
```  2271 Sup_bot_conv, SUP_bot_conv, Sup_eq_top_iff, SUP_eq_top_iff, SUP_image,
```
```  2272 Sup_insert are now declared as [simp].  INCOMPATIBILITY.
```
```  2273
```
```  2274 * Theory Lattice: lemmas compl_inf_bot, compl_le_comp_iff,
```
```  2275 compl_sup_top, inf_idem, inf_left_idem, inf_sup_absorb, sup_idem,
```
```  2276 sup_inf_absob, sup_left_idem are now declared as [simp].  Minor
```
```  2277 INCOMPATIBILITY.
```
```  2278
```
```  2279 * Added syntactic classes "inf" and "sup" for the respective
```
```  2280 constants.  INCOMPATIBILITY: Changes in the argument order of the
```
```  2281 (mostly internal) locale predicates for some derived classes.
```
```  2282
```
```  2283 * Theorem collections ball_simps and bex_simps do not contain theorems
```
```  2284 referring to UNION any longer; these have been moved to collection
```
```  2285 UN_ball_bex_simps.  INCOMPATIBILITY.
```
```  2286
```
```  2287 * Theory Archimedean_Field: floor now is defined as parameter of a
```
```  2288 separate type class floor_ceiling.
```
```  2289
```
```  2290 * Theory Finite_Set: more coherent development of fold_set locales:
```
```  2291
```
```  2292     locale fun_left_comm ~> locale comp_fun_commute
```
```  2293     locale fun_left_comm_idem ~> locale comp_fun_idem
```
```  2294
```
```  2295 Both use point-free characterization; interpretation proofs may need
```
```  2296 adjustment.  INCOMPATIBILITY.
```
```  2297
```
```  2298 * Theory Limits: Type "'a net" has been renamed to "'a filter", in
```
```  2299 accordance with standard mathematical terminology. INCOMPATIBILITY.
```
```  2300
```
```  2301 * Theory Complex_Main: The locale interpretations for the
```
```  2302 bounded_linear and bounded_bilinear locales have been removed, in
```
```  2303 order to reduce the number of duplicate lemmas. Users must use the
```
```  2304 original names for distributivity theorems, potential INCOMPATIBILITY.
```
```  2305
```
```  2306   divide.add ~> add_divide_distrib
```
```  2307   divide.diff ~> diff_divide_distrib
```
```  2308   divide.setsum ~> setsum_divide_distrib
```
```  2309   mult.add_right ~> right_distrib
```
```  2310   mult.diff_right ~> right_diff_distrib
```
```  2311   mult_right.setsum ~> setsum_right_distrib
```
```  2312   mult_left.diff ~> left_diff_distrib
```
```  2313
```
```  2314 * Theory Complex_Main: Several redundant theorems have been removed or
```
```  2315 replaced by more general versions. INCOMPATIBILITY.
```
```  2316
```
```  2317   real_diff_def ~> minus_real_def
```
```  2318   real_divide_def ~> divide_real_def
```
```  2319   real_less_def ~> less_le
```
```  2320   real_abs_def ~> abs_real_def
```
```  2321   real_sgn_def ~> sgn_real_def
```
```  2322   real_mult_commute ~> mult_commute
```
```  2323   real_mult_assoc ~> mult_assoc
```
```  2324   real_mult_1 ~> mult_1_left
```
```  2325   real_add_mult_distrib ~> left_distrib
```
```  2326   real_zero_not_eq_one ~> zero_neq_one
```
```  2327   real_mult_inverse_left ~> left_inverse
```
```  2328   INVERSE_ZERO ~> inverse_zero
```
```  2329   real_le_refl ~> order_refl
```
```  2330   real_le_antisym ~> order_antisym
```
```  2331   real_le_trans ~> order_trans
```
```  2332   real_le_linear ~> linear
```
```  2333   real_le_eq_diff ~> le_iff_diff_le_0
```
```  2334   real_add_left_mono ~> add_left_mono
```
```  2335   real_mult_order ~> mult_pos_pos
```
```  2336   real_mult_less_mono2 ~> mult_strict_left_mono
```
```  2337   real_of_int_real_of_nat ~> real_of_int_of_nat_eq
```
```  2338   real_0_le_divide_iff ~> zero_le_divide_iff
```
```  2339   realpow_two_disj ~> power2_eq_iff
```
```  2340   real_squared_diff_one_factored ~> square_diff_one_factored
```
```  2341   realpow_two_diff ~> square_diff_square_factored
```
```  2342   reals_complete2 ~> complete_real
```
```  2343   real_sum_squared_expand ~> power2_sum
```
```  2344   exp_ln_eq ~> ln_unique
```
```  2345   expi_add ~> exp_add
```
```  2346   expi_zero ~> exp_zero
```
```  2347   lemma_DERIV_subst ~> DERIV_cong
```
```  2348   LIMSEQ_Zfun_iff ~> tendsto_Zfun_iff
```
```  2349   LIMSEQ_const ~> tendsto_const
```
```  2350   LIMSEQ_norm ~> tendsto_norm
```
```  2351   LIMSEQ_add ~> tendsto_add
```
```  2352   LIMSEQ_minus ~> tendsto_minus
```
```  2353   LIMSEQ_minus_cancel ~> tendsto_minus_cancel
```
```  2354   LIMSEQ_diff ~> tendsto_diff
```
```  2355   bounded_linear.LIMSEQ ~> bounded_linear.tendsto
```
```  2356   bounded_bilinear.LIMSEQ ~> bounded_bilinear.tendsto
```
```  2357   LIMSEQ_mult ~> tendsto_mult
```
```  2358   LIMSEQ_inverse ~> tendsto_inverse
```
```  2359   LIMSEQ_divide ~> tendsto_divide
```
```  2360   LIMSEQ_pow ~> tendsto_power
```
```  2361   LIMSEQ_setsum ~> tendsto_setsum
```
```  2362   LIMSEQ_setprod ~> tendsto_setprod
```
```  2363   LIMSEQ_norm_zero ~> tendsto_norm_zero_iff
```
```  2364   LIMSEQ_rabs_zero ~> tendsto_rabs_zero_iff
```
```  2365   LIMSEQ_imp_rabs ~> tendsto_rabs
```
```  2366   LIMSEQ_add_minus ~> tendsto_add [OF _ tendsto_minus]
```
```  2367   LIMSEQ_add_const ~> tendsto_add [OF _ tendsto_const]
```
```  2368   LIMSEQ_diff_const ~> tendsto_diff [OF _ tendsto_const]
```
```  2369   LIMSEQ_Complex ~> tendsto_Complex
```
```  2370   LIM_ident ~> tendsto_ident_at
```
```  2371   LIM_const ~> tendsto_const
```
```  2372   LIM_add ~> tendsto_add
```
```  2373   LIM_add_zero ~> tendsto_add_zero
```
```  2374   LIM_minus ~> tendsto_minus
```
```  2375   LIM_diff ~> tendsto_diff
```
```  2376   LIM_norm ~> tendsto_norm
```
```  2377   LIM_norm_zero ~> tendsto_norm_zero
```
```  2378   LIM_norm_zero_cancel ~> tendsto_norm_zero_cancel
```
```  2379   LIM_norm_zero_iff ~> tendsto_norm_zero_iff
```
```  2380   LIM_rabs ~> tendsto_rabs
```
```  2381   LIM_rabs_zero ~> tendsto_rabs_zero
```
```  2382   LIM_rabs_zero_cancel ~> tendsto_rabs_zero_cancel
```
```  2383   LIM_rabs_zero_iff ~> tendsto_rabs_zero_iff
```
```  2384   LIM_compose ~> tendsto_compose
```
```  2385   LIM_mult ~> tendsto_mult
```
```  2386   LIM_scaleR ~> tendsto_scaleR
```
```  2387   LIM_of_real ~> tendsto_of_real
```
```  2388   LIM_power ~> tendsto_power
```
```  2389   LIM_inverse ~> tendsto_inverse
```
```  2390   LIM_sgn ~> tendsto_sgn
```
```  2391   isCont_LIM_compose ~> isCont_tendsto_compose
```
```  2392   bounded_linear.LIM ~> bounded_linear.tendsto
```
```  2393   bounded_linear.LIM_zero ~> bounded_linear.tendsto_zero
```
```  2394   bounded_bilinear.LIM ~> bounded_bilinear.tendsto
```
```  2395   bounded_bilinear.LIM_prod_zero ~> bounded_bilinear.tendsto_zero
```
```  2396   bounded_bilinear.LIM_left_zero ~> bounded_bilinear.tendsto_left_zero
```
```  2397   bounded_bilinear.LIM_right_zero ~> bounded_bilinear.tendsto_right_zero
```
```  2398   LIM_inverse_fun ~> tendsto_inverse [OF tendsto_ident_at]
```
```  2399
```
```  2400 * Theory Complex_Main: The definition of infinite series was
```
```  2401 generalized.  Now it is defined on the type class {topological_space,
```
```  2402 comm_monoid_add}.  Hence it is useable also for extended real numbers.
```
```  2403
```
```  2404 * Theory Complex_Main: The complex exponential function "expi" is now
```
```  2405 a type-constrained abbreviation for "exp :: complex => complex"; thus
```
```  2406 several polymorphic lemmas about "exp" are now applicable to "expi".
```
```  2407
```
```  2408 * Code generation:
```
```  2409
```
```  2410   - Theory Library/Code_Char_ord provides native ordering of
```
```  2411     characters in the target language.
```
```  2412
```
```  2413   - Commands code_module and code_library are legacy, use export_code
```
```  2414     instead.
```
```  2415
```
```  2416   - Method "evaluation" is legacy, use method "eval" instead.
```
```  2417
```
```  2418   - Legacy evaluator "SML" is deactivated by default.  May be
```
```  2419     reactivated by the following theory command:
```
```  2420
```
```  2421       setup {* Value.add_evaluator ("SML", Codegen.eval_term) *}
```
```  2422
```
```  2423 * Declare ext [intro] by default.  Rare INCOMPATIBILITY.
```
```  2424
```
```  2425 * New proof method "induction" that gives induction hypotheses the
```
```  2426 name "IH", thus distinguishing them from further hypotheses that come
```
```  2427 from rule induction.  The latter are still called "hyps".  Method
```
```  2428 "induction" is a thin wrapper around "induct" and follows the same
```
```  2429 syntax.
```
```  2430
```
```  2431 * Method "fastsimp" has been renamed to "fastforce", but "fastsimp" is
```
```  2432 still available as a legacy feature for some time.
```
```  2433
```
```  2434 * Nitpick:
```
```  2435   - Added "need" and "total_consts" options.
```
```  2436   - Reintroduced "show_skolems" option by popular demand.
```
```  2437   - Renamed attribute: nitpick_def ~> nitpick_unfold.
```
```  2438     INCOMPATIBILITY.
```
```  2439
```
```  2440 * Sledgehammer:
```
```  2441   - Use quasi-sound (and efficient) translations by default.
```
```  2442   - Added support for the following provers: E-ToFoF, LEO-II,
```
```  2443     Satallax, SNARK, Waldmeister, and Z3 with TPTP syntax.
```
```  2444   - Automatically preplay and minimize proofs before showing them if
```
```  2445     this can be done within reasonable time.
```
```  2446   - sledgehammer available_provers ~> sledgehammer supported_provers.
```
```  2447     INCOMPATIBILITY.
```
```  2448   - Added "preplay_timeout", "slicing", "type_enc", "sound",
```
```  2449     "max_mono_iters", and "max_new_mono_instances" options.
```
```  2450   - Removed "explicit_apply" and "full_types" options as well as "Full
```
```  2451     Types" Proof General menu item. INCOMPATIBILITY.
```
```  2452
```
```  2453 * Metis:
```
```  2454   - Removed "metisF" -- use "metis" instead. INCOMPATIBILITY.
```
```  2455   - Obsoleted "metisFT" -- use "metis (full_types)" instead.
```
```  2456     INCOMPATIBILITY.
```
```  2457
```
```  2458 * Command 'try':
```
```  2459   - Renamed 'try_methods' and added "simp:", "intro:", "dest:", and
```
```  2460     "elim:" options. INCOMPATIBILITY.
```
```  2461   - Introduced 'try' that not only runs 'try_methods' but also
```
```  2462     'solve_direct', 'sledgehammer', 'quickcheck', and 'nitpick'.
```
```  2463
```
```  2464 * Quickcheck:
```
```  2465   - Added "eval" option to evaluate terms for the found counterexample
```
```  2466     (currently only supported by the default (exhaustive) tester).
```
```  2467   - Added post-processing of terms to obtain readable counterexamples
```
```  2468     (currently only supported by the default (exhaustive) tester).
```
```  2469   - New counterexample generator quickcheck[narrowing] enables
```
```  2470     narrowing-based testing.  Requires the Glasgow Haskell compiler
```
```  2471     with its installation location defined in the Isabelle settings
```
```  2472     environment as ISABELLE_GHC.
```
```  2473   - Removed quickcheck tester "SML" based on the SML code generator
```
```  2474     (formly in HOL/Library).
```
```  2475
```
```  2476 * Function package: discontinued option "tailrec".  INCOMPATIBILITY,
```
```  2477 use 'partial_function' instead.
```
```  2478
```
```  2479 * Theory Library/Extended_Reals replaces now the positive extended
```
```  2480 reals found in probability theory. This file is extended by
```
```  2481 Multivariate_Analysis/Extended_Real_Limits.
```
```  2482
```
```  2483 * Theory Library/Old_Recdef: old 'recdef' package has been moved here,
```
```  2484 from where it must be imported explicitly if it is really required.
```
```  2485 INCOMPATIBILITY.
```
```  2486
```
```  2487 * Theory Library/Wfrec: well-founded recursion combinator "wfrec" has
```
```  2488 been moved here.  INCOMPATIBILITY.
```
```  2489
```
```  2490 * Theory Library/Saturated provides type of numbers with saturated
```
```  2491 arithmetic.
```
```  2492
```
```  2493 * Theory Library/Product_Lattice defines a pointwise ordering for the
```
```  2494 product type 'a * 'b, and provides instance proofs for various order
```
```  2495 and lattice type classes.
```
```  2496
```
```  2497 * Theory Library/Countable now provides the "countable_datatype" proof
```
```  2498 method for proving "countable" class instances for datatypes.
```
```  2499
```
```  2500 * Theory Library/Cset_Monad allows do notation for computable sets
```
```  2501 (cset) via the generic monad ad-hoc overloading facility.
```
```  2502
```
```  2503 * Library: Theories of common data structures are split into theories
```
```  2504 for implementation, an invariant-ensuring type, and connection to an
```
```  2505 abstract type. INCOMPATIBILITY.
```
```  2506
```
```  2507   - RBT is split into RBT and RBT_Mapping.
```
```  2508   - AssocList is split and renamed into AList and AList_Mapping.
```
```  2509   - DList is split into DList_Impl, DList, and DList_Cset.
```
```  2510   - Cset is split into Cset and List_Cset.
```
```  2511
```
```  2512 * Theory Library/Nat_Infinity has been renamed to
```
```  2513 Library/Extended_Nat, with name changes of the following types and
```
```  2514 constants:
```
```  2515
```
```  2516   type inat   ~> type enat
```
```  2517   Fin         ~> enat
```
```  2518   Infty       ~> infinity (overloaded)
```
```  2519   iSuc        ~> eSuc
```
```  2520   the_Fin     ~> the_enat
```
```  2521
```
```  2522 Every theorem name containing "inat", "Fin", "Infty", or "iSuc" has
```
```  2523 been renamed accordingly. INCOMPATIBILITY.
```
```  2524
```
```  2525 * Session Multivariate_Analysis: The euclidean_space type class now
```
```  2526 fixes a constant "Basis :: 'a set" consisting of the standard
```
```  2527 orthonormal basis for the type. Users now have the option of
```
```  2528 quantifying over this set instead of using the "basis" function, e.g.
```
```  2529 "ALL x:Basis. P x" vs "ALL i<DIM('a). P (basis i)".
```
```  2530
```
```  2531 * Session Multivariate_Analysis: Type "('a, 'b) cart" has been renamed
```
```  2532 to "('a, 'b) vec" (the syntax "'a ^ 'b" remains unaffected). Constants
```
```  2533 "Cart_nth" and "Cart_lambda" have been respectively renamed to
```
```  2534 "vec_nth" and "vec_lambda"; theorems mentioning those names have
```
```  2535 changed to match. Definition theorems for overloaded constants now use
```
```  2536 the standard "foo_vec_def" naming scheme. A few other theorems have
```
```  2537 been renamed as follows (INCOMPATIBILITY):
```
```  2538
```
```  2539   Cart_eq          ~> vec_eq_iff
```
```  2540   dist_nth_le_cart ~> dist_vec_nth_le
```
```  2541   tendsto_vector   ~> vec_tendstoI
```
```  2542   Cauchy_vector    ~> vec_CauchyI
```
```  2543
```
```  2544 * Session Multivariate_Analysis: Several duplicate theorems have been
```
```  2545 removed, and other theorems have been renamed or replaced with more
```
```  2546 general versions. INCOMPATIBILITY.
```
```  2547
```
```  2548   finite_choice ~> finite_set_choice
```
```  2549   eventually_conjI ~> eventually_conj
```
```  2550   eventually_and ~> eventually_conj_iff
```
```  2551   eventually_false ~> eventually_False
```
```  2552   setsum_norm ~> norm_setsum
```
```  2553   Lim_sequentially ~> LIMSEQ_def
```
```  2554   Lim_ident_at ~> LIM_ident
```
```  2555   Lim_const ~> tendsto_const
```
```  2556   Lim_cmul ~> tendsto_scaleR [OF tendsto_const]
```
```  2557   Lim_neg ~> tendsto_minus
```
```  2558   Lim_add ~> tendsto_add
```
```  2559   Lim_sub ~> tendsto_diff
```
```  2560   Lim_mul ~> tendsto_scaleR
```
```  2561   Lim_vmul ~> tendsto_scaleR [OF _ tendsto_const]
```
```  2562   Lim_null_norm ~> tendsto_norm_zero_iff [symmetric]
```
```  2563   Lim_linear ~> bounded_linear.tendsto
```
```  2564   Lim_component ~> tendsto_euclidean_component
```
```  2565   Lim_component_cart ~> tendsto_vec_nth
```
```  2566   Lim_inner ~> tendsto_inner [OF tendsto_const]
```
```  2567   dot_lsum ~> inner_setsum_left
```
```  2568   dot_rsum ~> inner_setsum_right
```
```  2569   continuous_cmul ~> continuous_scaleR [OF continuous_const]
```
```  2570   continuous_neg ~> continuous_minus
```
```  2571   continuous_sub ~> continuous_diff
```
```  2572   continuous_vmul ~> continuous_scaleR [OF _ continuous_const]
```
```  2573   continuous_mul ~> continuous_scaleR
```
```  2574   continuous_inv ~> continuous_inverse
```
```  2575   continuous_at_within_inv ~> continuous_at_within_inverse
```
```  2576   continuous_at_inv ~> continuous_at_inverse
```
```  2577   continuous_at_norm ~> continuous_norm [OF continuous_at_id]
```
```  2578   continuous_at_infnorm ~> continuous_infnorm [OF continuous_at_id]
```
```  2579   continuous_at_component ~> continuous_component [OF continuous_at_id]
```
```  2580   continuous_on_neg ~> continuous_on_minus
```
```  2581   continuous_on_sub ~> continuous_on_diff
```
```  2582   continuous_on_cmul ~> continuous_on_scaleR [OF continuous_on_const]
```
```  2583   continuous_on_vmul ~> continuous_on_scaleR [OF _ continuous_on_const]
```
```  2584   continuous_on_mul ~> continuous_on_scaleR
```
```  2585   continuous_on_mul_real ~> continuous_on_mult
```
```  2586   continuous_on_inner ~> continuous_on_inner [OF continuous_on_const]
```
```  2587   continuous_on_norm ~> continuous_on_norm [OF continuous_on_id]
```
```  2588   continuous_on_inverse ~> continuous_on_inv
```
```  2589   uniformly_continuous_on_neg ~> uniformly_continuous_on_minus
```
```  2590   uniformly_continuous_on_sub ~> uniformly_continuous_on_diff
```
```  2591   subset_interior ~> interior_mono
```
```  2592   subset_closure ~> closure_mono
```
```  2593   closure_univ ~> closure_UNIV
```
```  2594   real_arch_lt ~> reals_Archimedean2
```
```  2595   real_arch ~> reals_Archimedean3
```
```  2596   real_abs_norm ~> abs_norm_cancel
```
```  2597   real_abs_sub_norm ~> norm_triangle_ineq3
```
```  2598   norm_cauchy_schwarz_abs ~> Cauchy_Schwarz_ineq2
```
```  2599
```
```  2600 * Session HOL-Probability:
```
```  2601   - Caratheodory's extension lemma is now proved for ring_of_sets.
```
```  2602   - Infinite products of probability measures are now available.
```
```  2603   - Sigma closure is independent, if the generator is independent
```
```  2604   - Use extended reals instead of positive extended
```
```  2605     reals. INCOMPATIBILITY.
```
```  2606
```
```  2607 * Session HOLCF: Discontinued legacy theorem names, INCOMPATIBILITY.
```
```  2608
```
```  2609   expand_fun_below ~> fun_below_iff
```
```  2610   below_fun_ext ~> fun_belowI
```
```  2611   expand_cfun_eq ~> cfun_eq_iff
```
```  2612   ext_cfun ~> cfun_eqI
```
```  2613   expand_cfun_below ~> cfun_below_iff
```
```  2614   below_cfun_ext ~> cfun_belowI
```
```  2615   monofun_fun_fun ~> fun_belowD
```
```  2616   monofun_fun_arg ~> monofunE
```
```  2617   monofun_lub_fun ~> adm_monofun [THEN admD]
```
```  2618   cont_lub_fun ~> adm_cont [THEN admD]
```
```  2619   cont2cont_Rep_CFun ~> cont2cont_APP
```
```  2620   cont_Rep_CFun_app ~> cont_APP_app
```
```  2621   cont_Rep_CFun_app_app ~> cont_APP_app_app
```
```  2622   cont_cfun_fun ~> cont_Rep_cfun1 [THEN contE]
```
```  2623   cont_cfun_arg ~> cont_Rep_cfun2 [THEN contE]
```
```  2624   contlub_cfun ~> lub_APP [symmetric]
```
```  2625   contlub_LAM ~> lub_LAM [symmetric]
```
```  2626   thelubI ~> lub_eqI
```
```  2627   UU_I ~> bottomI
```
```  2628   lift_distinct1 ~> lift.distinct(1)
```
```  2629   lift_distinct2 ~> lift.distinct(2)
```
```  2630   Def_not_UU ~> lift.distinct(2)
```
```  2631   Def_inject ~> lift.inject
```
```  2632   below_UU_iff ~> below_bottom_iff
```
```  2633   eq_UU_iff ~> eq_bottom_iff
```
```  2634
```
```  2635
```
```  2636 *** Document preparation ***
```
```  2637
```
```  2638 * Antiquotation @{rail} layouts railroad syntax diagrams, see also
```
```  2639 isar-ref manual, both for description and actual application of the
```
```  2640 same.
```
```  2641
```
```  2642 * Antiquotation @{value} evaluates the given term and presents its
```
```  2643 result.
```
```  2644
```
```  2645 * Antiquotations: term style "isub" provides ad-hoc conversion of
```
```  2646 variables x1, y23 into subscripted form x\<^isub>1,
```
```  2647 y\<^isub>2\<^isub>3.
```
```  2648
```
```  2649 * Predefined LaTeX macros for Isabelle symbols \<bind> and \<then>
```
```  2650 (e.g. see ~~/src/HOL/Library/Monad_Syntax.thy).
```
```  2651
```
```  2652 * Localized \isabellestyle switch can be used within blocks or groups
```
```  2653 like this:
```
```  2654
```
```  2655   \isabellestyle{it}  %preferred default
```
```  2656   {\isabellestylett @{text "typewriter stuff"}}
```
```  2657
```
```  2658 * Discontinued special treatment of hard tabulators.  Implicit
```
```  2659 tab-width is now defined as 1.  Potential INCOMPATIBILITY for visual
```
```  2660 layouts.
```
```  2661
```
```  2662
```
```  2663 *** ML ***
```
```  2664
```
```  2665 * The inner syntax of sort/type/term/prop supports inlined YXML
```
```  2666 representations within quoted string tokens.  By encoding logical
```
```  2667 entities via Term_XML (in ML or Scala) concrete syntax can be
```
```  2668 bypassed, which is particularly useful for producing bits of text
```
```  2669 under external program control.
```
```  2670
```
```  2671 * Antiquotations for ML and document preparation are managed as theory
```
```  2672 data, which requires explicit setup.
```
```  2673
```
```  2674 * Isabelle_Process.is_active allows tools to check if the official
```
```  2675 process wrapper is running (Isabelle/Scala/jEdit) or the old TTY loop
```
```  2676 (better known as Proof General).
```
```  2677
```
```  2678 * Structure Proof_Context follows standard naming scheme.  Old
```
```  2679 ProofContext is still available for some time as legacy alias.
```
```  2680
```
```  2681 * Structure Timing provides various operations for timing; supersedes
```
```  2682 former start_timing/end_timing etc.
```
```  2683
```
```  2684 * Path.print is the official way to show file-system paths to users
```
```  2685 (including quotes etc.).
```
```  2686
```
```  2687 * Inner syntax: identifiers in parse trees of generic categories
```
```  2688 "logic", "aprop", "idt" etc. carry position information (disguised as
```
```  2689 type constraints).  Occasional INCOMPATIBILITY with non-compliant
```
```  2690 translations that choke on unexpected type constraints.  Positions can
```
```  2691 be stripped in ML translations via Syntax.strip_positions /
```
```  2692 Syntax.strip_positions_ast, or via the syntax constant
```
```  2693 "_strip_positions" within parse trees.  As last resort, positions can
```
```  2694 be disabled via the configuration option Syntax.positions, which is
```
```  2695 called "syntax_positions" in Isar attribute syntax.
```
```  2696
```
```  2697 * Discontinued special status of various ML structures that contribute
```
```  2698 to structure Syntax (Ast, Lexicon, Mixfix, Parser, Printer etc.): less
```
```  2699 pervasive content, no inclusion in structure Syntax.  INCOMPATIBILITY,
```
```  2700 refer directly to Ast.Constant, Lexicon.is_identifier,
```
```  2701 Syntax_Trans.mk_binder_tr etc.
```
```  2702
```
```  2703 * Typed print translation: discontinued show_sorts argument, which is
```
```  2704 already available via context of "advanced" translation.
```
```  2705
```
```  2706 * Refined PARALLEL_GOALS tactical: degrades gracefully for schematic
```
```  2707 goal states; body tactic needs to address all subgoals uniformly.
```
```  2708
```
```  2709 * Slightly more special eq_list/eq_set, with shortcut involving
```
```  2710 pointer equality (assumes that eq relation is reflexive).
```
```  2711
```
```  2712 * Classical tactics use proper Proof.context instead of historic types
```
```  2713 claset/clasimpset.  Old-style declarations like addIs, addEs, addDs
```
```  2714 operate directly on Proof.context.  Raw type claset retains its use as
```
```  2715 snapshot of the classical context, which can be recovered via
```
```  2716 (put_claset HOL_cs) etc.  Type clasimpset has been discontinued.
```
```  2717 INCOMPATIBILITY, classical tactics and derived proof methods require
```
```  2718 proper Proof.context.
```
```  2719
```
```  2720
```
```  2721 *** System ***
```
```  2722
```
```  2723 * Discontinued support for Poly/ML 5.2, which was the last version
```
```  2724 without proper multithreading and TimeLimit implementation.
```
```  2725
```
```  2726 * Discontinued old lib/scripts/polyml-platform, which has been
```
```  2727 obsolete since Isabelle2009-2.
```
```  2728
```
```  2729 * Various optional external tools are referenced more robustly and
```
```  2730 uniformly by explicit Isabelle settings as follows:
```
```  2731
```
```  2732   ISABELLE_CSDP   (formerly CSDP_EXE)
```
```  2733   ISABELLE_GHC    (formerly EXEC_GHC or GHC_PATH)
```
```  2734   ISABELLE_OCAML  (formerly EXEC_OCAML)
```
```  2735   ISABELLE_SWIPL  (formerly EXEC_SWIPL)
```
```  2736   ISABELLE_YAP    (formerly EXEC_YAP)
```
```  2737
```
```  2738 Note that automated detection from the file-system or search path has
```
```  2739 been discontinued.  INCOMPATIBILITY.
```
```  2740
```
```  2741 * Scala layer provides JVM method invocation service for static
```
```  2742 methods of type (String)String, see Invoke_Scala.method in ML.  For
```
```  2743 example:
```
```  2744
```
```  2745   Invoke_Scala.method "java.lang.System.getProperty" "java.home"
```
```  2746
```
```  2747 Together with YXML.string_of_body/parse_body and XML.Encode/Decode
```
```  2748 this allows to pass structured values between ML and Scala.
```
```  2749
```
```  2750 * The IsabelleText fonts includes some further glyphs to support the
```
```  2751 Prover IDE.  Potential INCOMPATIBILITY: users who happen to have
```
```  2752 installed a local copy (which is normally *not* required) need to
```
```  2753 delete or update it from ~~/lib/fonts/.
```
```  2754
```
```  2755
```
```  2756
```
```  2757 New in Isabelle2011 (January 2011)
```
```  2758 ----------------------------------
```
```  2759
```
```  2760 *** General ***
```
```  2761
```
```  2762 * Experimental Prover IDE based on Isabelle/Scala and jEdit (see
```
```  2763 src/Tools/jEdit).  This also serves as IDE for Isabelle/ML, with
```
```  2764 useful tooltips and hyperlinks produced from its static analysis.  The
```
```  2765 bundled component provides an executable Isabelle tool that can be run
```
```  2766 like this:
```
```  2767
```
```  2768   Isabelle2011/bin/isabelle jedit
```
```  2769
```
```  2770 * Significantly improved Isabelle/Isar implementation manual.
```
```  2771
```
```  2772 * System settings: ISABELLE_HOME_USER now includes ISABELLE_IDENTIFIER
```
```  2773 (and thus refers to something like \$HOME/.isabelle/Isabelle2011),
```
```  2774 while the default heap location within that directory lacks that extra
```
```  2775 suffix.  This isolates multiple Isabelle installations from each
```
```  2776 other, avoiding problems with old settings in new versions.
```
```  2777 INCOMPATIBILITY, need to copy/upgrade old user settings manually.
```
```  2778
```
```  2779 * Source files are always encoded as UTF-8, instead of old-fashioned
```
```  2780 ISO-Latin-1.  INCOMPATIBILITY.  Isabelle LaTeX documents might require
```
```  2781 the following package declarations:
```
```  2782
```
```  2783   \usepackage[utf8]{inputenc}
```
```  2784   \usepackage{textcomp}
```
```  2785
```
```  2786 * Explicit treatment of UTF-8 sequences as Isabelle symbols, such that
```
```  2787 a Unicode character is treated as a single symbol, not a sequence of
```
```  2788 non-ASCII bytes as before.  Since Isabelle/ML string literals may
```
```  2789 contain symbols without further backslash escapes, Unicode can now be
```
```  2790 used here as well.  Recall that Symbol.explode in ML provides a
```
```  2791 consistent view on symbols, while raw explode (or String.explode)
```
```  2792 merely give a byte-oriented representation.
```
```  2793
```
```  2794 * Theory loader: source files are primarily located via the master
```
```  2795 directory of each theory node (where the .thy file itself resides).
```
```  2796 The global load path is still partially available as legacy feature.
```
```  2797 Minor INCOMPATIBILITY due to subtle change in file lookup: use
```
```  2798 explicit paths, relatively to the theory.
```
```  2799
```
```  2800 * Special treatment of ML file names has been discontinued.
```
```  2801 Historically, optional extensions .ML or .sml were added on demand --
```
```  2802 at the cost of clarity of file dependencies.  Recall that Isabelle/ML
```
```  2803 files exclusively use the .ML extension.  Minor INCOMPATIBILTY.
```
```  2804
```
```  2805 * Various options that affect pretty printing etc. are now properly
```
```  2806 handled within the context via configuration options, instead of
```
```  2807 unsynchronized references or print modes.  There are both ML Config.T
```
```  2808 entities and Isar declaration attributes to access these.
```
```  2809
```
```  2810   ML (Config.T)                 Isar (attribute)
```
```  2811
```
```  2812   eta_contract                  eta_contract
```
```  2813   show_brackets                 show_brackets
```
```  2814   show_sorts                    show_sorts
```
```  2815   show_types                    show_types
```
```  2816   show_question_marks           show_question_marks
```
```  2817   show_consts                   show_consts
```
```  2818   show_abbrevs                  show_abbrevs
```
```  2819
```
```  2820   Syntax.ast_trace              syntax_ast_trace
```
```  2821   Syntax.ast_stat               syntax_ast_stat
```
```  2822   Syntax.ambiguity_level        syntax_ambiguity_level
```
```  2823
```
```  2824   Goal_Display.goals_limit      goals_limit
```
```  2825   Goal_Display.show_main_goal   show_main_goal
```
```  2826
```
```  2827   Method.rule_trace             rule_trace
```
```  2828
```
```  2829   Thy_Output.display            thy_output_display
```
```  2830   Thy_Output.quotes             thy_output_quotes
```
```  2831   Thy_Output.indent             thy_output_indent
```
```  2832   Thy_Output.source             thy_output_source
```
```  2833   Thy_Output.break              thy_output_break
```
```  2834
```
```  2835 Note that corresponding "..._default" references in ML may only be
```
```  2836 changed globally at the ROOT session setup, but *not* within a theory.
```
```  2837 The option "show_abbrevs" supersedes the former print mode
```
```  2838 "no_abbrevs" with inverted meaning.
```
```  2839
```
```  2840 * More systematic naming of some configuration options.
```
```  2841 INCOMPATIBILITY.
```
```  2842
```
```  2843   trace_simp  ~>  simp_trace
```
```  2844   debug_simp  ~>  simp_debug
```
```  2845
```
```  2846 * Support for real valued configuration options, using simplistic
```
```  2847 floating-point notation that coincides with the inner syntax for
```
```  2848 float_token.
```
```  2849
```
```  2850 * Support for real valued preferences (with approximative PGIP type):
```
```  2851 front-ends need to accept "pgint" values in float notation.
```
```  2852 INCOMPATIBILITY.
```
```  2853
```
```  2854 * The IsabelleText font now includes Cyrillic, Hebrew, Arabic from
```
```  2855 DejaVu Sans.
```
```  2856
```
```  2857 * Discontinued support for Poly/ML 5.0 and 5.1 versions.
```
```  2858
```
```  2859
```
```  2860 *** Pure ***
```
```  2861
```
```  2862 * Command 'type_synonym' (with single argument) replaces somewhat
```
```  2863 outdated 'types', which is still available as legacy feature for some
```
```  2864 time.
```
```  2865
```
```  2866 * Command 'nonterminal' (with 'and' separated list of arguments)
```
```  2867 replaces somewhat outdated 'nonterminals'.  INCOMPATIBILITY.
```
```  2868
```
```  2869 * Command 'notepad' replaces former 'example_proof' for
```
```  2870 experimentation in Isar without any result.  INCOMPATIBILITY.
```
```  2871
```
```  2872 * Locale interpretation commands 'interpret' and 'sublocale' accept
```
```  2873 lists of equations to map definitions in a locale to appropriate
```
```  2874 entities in the context of the interpretation.  The 'interpretation'
```
```  2875 command already provided this functionality.
```
```  2876
```
```  2877 * Diagnostic command 'print_dependencies' prints the locale instances
```
```  2878 that would be activated if the specified expression was interpreted in
```
```  2879 the current context.  Variant "print_dependencies!" assumes a context
```
```  2880 without interpretations.
```
```  2881
```
```  2882 * Diagnostic command 'print_interps' prints interpretations in proofs
```
```  2883 in addition to interpretations in theories.
```
```  2884
```
```  2885 * Discontinued obsolete 'global' and 'local' commands to manipulate
```
```  2886 the theory name space.  Rare INCOMPATIBILITY.  The ML functions
```
```  2887 Sign.root_path and Sign.local_path may be applied directly where this
```
```  2888 feature is still required for historical reasons.
```
```  2889
```
```  2890 * Discontinued obsolete 'constdefs' command.  INCOMPATIBILITY, use
```
```  2891 'definition' instead.
```
```  2892
```
```  2893 * The "prems" fact, which refers to the accidental collection of
```
```  2894 foundational premises in the context, is now explicitly marked as
```
```  2895 legacy feature and will be discontinued soon.  Consider using "assms"
```
```  2896 of the head statement or reference facts by explicit names.
```
```  2897
```
```  2898 * Document antiquotations @{class} and @{type} print classes and type
```
```  2899 constructors.
```
```  2900
```
```  2901 * Document antiquotation @{file} checks file/directory entries within
```
```  2902 the local file system.
```
```  2903
```
```  2904
```
```  2905 *** HOL ***
```
```  2906
```
```  2907 * Coercive subtyping: functions can be declared as coercions and type
```
```  2908 inference will add them as necessary upon input of a term.  Theory
```
```  2909 Complex_Main declares real :: nat => real and real :: int => real as
```
```  2910 coercions. A coercion function f is declared like this:
```
```  2911
```
```  2912   declare [[coercion f]]
```
```  2913
```
```  2914 To lift coercions through type constructors (e.g. from nat => real to
```
```  2915 nat list => real list), map functions can be declared, e.g.
```
```  2916
```
```  2917   declare [[coercion_map map]]
```
```  2918
```
```  2919 Currently coercion inference is activated only in theories including
```
```  2920 real numbers, i.e. descendants of Complex_Main.  This is controlled by
```
```  2921 the configuration option "coercion_enabled", e.g. it can be enabled in
```
```  2922 other theories like this:
```
```  2923
```
```  2924   declare [[coercion_enabled]]
```
```  2925
```
```  2926 * Command 'partial_function' provides basic support for recursive
```
```  2927 function definitions over complete partial orders.  Concrete instances
```
```  2928 are provided for i) the option type, ii) tail recursion on arbitrary
```
```  2929 types, and iii) the heap monad of Imperative_HOL.  See
```
```  2930 src/HOL/ex/Fundefs.thy and src/HOL/Imperative_HOL/ex/Linked_Lists.thy
```
```  2931 for examples.
```
```  2932
```
```  2933 * Function package: f.psimps rules are no longer implicitly declared
```
```  2934 as [simp].  INCOMPATIBILITY.
```
```  2935
```
```  2936 * Datatype package: theorems generated for executable equality (class
```
```  2937 "eq") carry proper names and are treated as default code equations.
```
```  2938
```
```  2939 * Inductive package: now offers command 'inductive_simps' to
```
```  2940 automatically derive instantiated and simplified equations for
```
```  2941 inductive predicates, similar to 'inductive_cases'.
```
```  2942
```
```  2943 * Command 'enriched_type' allows to register properties of the
```
```  2944 functorial structure of types.
```
```  2945
```
```  2946 * Improved infrastructure for term evaluation using code generator
```
```  2947 techniques, in particular static evaluation conversions.
```
```  2948
```
```  2949 * Code generator: Scala (2.8 or higher) has been added to the target
```
```  2950 languages.
```
```  2951
```
```  2952 * Code generator: globbing constant expressions "*" and "Theory.*"
```
```  2953 have been replaced by the more idiomatic "_" and "Theory._".
```
```  2954 INCOMPATIBILITY.
```
```  2955
```
```  2956 * Code generator: export_code without explicit file declaration prints
```
```  2957 to standard output.  INCOMPATIBILITY.
```
```  2958
```
```  2959 * Code generator: do not print function definitions for case
```
```  2960 combinators any longer.
```
```  2961
```
```  2962 * Code generator: simplification with rules determined with
```
```  2963 src/Tools/Code/code_simp.ML and method "code_simp".
```
```  2964
```
```  2965 * Code generator for records: more idiomatic representation of record
```
```  2966 types.  Warning: records are not covered by ancient SML code
```
```  2967 generation any longer.  INCOMPATIBILITY.  In cases of need, a suitable
```
```  2968 rep_datatype declaration helps to succeed then:
```
```  2969
```
```  2970   record 'a foo = ...
```
```  2971   ...
```
```  2972   rep_datatype foo_ext ...
```
```  2973
```
```  2974 * Records: logical foundation type for records does not carry a
```
```  2975 '_type' suffix any longer (obsolete due to authentic syntax).
```
```  2976 INCOMPATIBILITY.
```
```  2977
```
```  2978 * Quickcheck now by default uses exhaustive testing instead of random
```
```  2979 testing.  Random testing can be invoked by "quickcheck [random]",
```
```  2980 exhaustive testing by "quickcheck [exhaustive]".
```
```  2981
```
```  2982 * Quickcheck instantiates polymorphic types with small finite
```
```  2983 datatypes by default. This enables a simple execution mechanism to
```
```  2984 handle quantifiers and function equality over the finite datatypes.
```
```  2985
```
```  2986 * Quickcheck random generator has been renamed from "code" to
```
```  2987 "random".  INCOMPATIBILITY.
```
```  2988
```
```  2989 * Quickcheck now has a configurable time limit which is set to 30
```
```  2990 seconds by default. This can be changed by adding [timeout = n] to the
```
```  2991 quickcheck command. The time limit for Auto Quickcheck is still set
```
```  2992 independently.
```
```  2993
```
```  2994 * Quickcheck in locales considers interpretations of that locale for
```
```  2995 counter example search.
```
```  2996
```
```  2997 * Sledgehammer:
```
```  2998   - Added "smt" and "remote_smt" provers based on the "smt" proof
```
```  2999     method. See the Sledgehammer manual for details ("isabelle doc
```
```  3000     sledgehammer").
```
```  3001   - Renamed commands:
```
```  3002     sledgehammer atp_info ~> sledgehammer running_provers
```
```  3003     sledgehammer atp_kill ~> sledgehammer kill_provers
```
```  3004     sledgehammer available_atps ~> sledgehammer available_provers
```
```  3005     INCOMPATIBILITY.
```
```  3006   - Renamed options:
```
```  3007     sledgehammer [atps = ...] ~> sledgehammer [provers = ...]
```
```  3008     sledgehammer [atp = ...] ~> sledgehammer [prover = ...]
```
```  3009     sledgehammer [timeout = 77 s] ~> sledgehammer [timeout = 77]
```
```  3010     (and "ms" and "min" are no longer supported)
```
```  3011     INCOMPATIBILITY.
```
```  3012
```
```  3013 * Nitpick:
```
```  3014   - Renamed options:
```
```  3015     nitpick [timeout = 77 s] ~> nitpick [timeout = 77]
```
```  3016     nitpick [tac_timeout = 777 ms] ~> nitpick [tac_timeout = 0.777]
```
```  3017     INCOMPATIBILITY.
```
```  3018   - Added support for partial quotient types.
```
```  3019   - Added local versions of the "Nitpick.register_xxx" functions.
```
```  3020   - Added "whack" option.
```
```  3021   - Allow registration of quotient types as codatatypes.
```
```  3022   - Improved "merge_type_vars" option to merge more types.
```
```  3023   - Removed unsound "fast_descrs" option.
```
```  3024   - Added custom symmetry breaking for datatypes, making it possible to reach
```
```  3025     higher cardinalities.
```
```  3026   - Prevent the expansion of too large definitions.
```
```  3027
```
```  3028 * Proof methods "metis" and "meson" now have configuration options
```
```  3029 "meson_trace", "metis_trace", and "metis_verbose" that can be enabled
```
```  3030 to diagnose these tools. E.g.
```
```  3031
```
```  3032     using [[metis_trace = true]]
```
```  3033
```
```  3034 * Auto Solve: Renamed "Auto Solve Direct".  The tool is now available
```
```  3035 manually as command 'solve_direct'.
```
```  3036
```
```  3037 * The default SMT solver Z3 must be enabled explicitly (due to
```
```  3038 licensing issues) by setting the environment variable
```
```  3039 Z3_NON_COMMERCIAL in etc/settings of the component, for example.  For
```
```  3040 commercial applications, the SMT solver CVC3 is provided as fall-back;
```
```  3041 changing the SMT solver is done via the configuration option
```
```  3042 "smt_solver".
```
```  3043
```
```  3044 * Remote SMT solvers need to be referred to by the "remote_" prefix,
```
```  3045 i.e. "remote_cvc3" and "remote_z3".
```
```  3046
```
```  3047 * Added basic SMT support for datatypes, records, and typedefs using
```
```  3048 the oracle mode (no proofs).  Direct support of pairs has been dropped
```
```  3049 in exchange (pass theorems fst_conv snd_conv pair_collapse to the SMT
```
```  3050 support for a similar behavior).  Minor INCOMPATIBILITY.
```
```  3051
```
```  3052 * Changed SMT configuration options:
```
```  3053   - Renamed:
```
```  3054     z3_proofs ~> smt_oracle (with inverted meaning)
```
```  3055     z3_trace_assms ~> smt_trace_used_facts
```
```  3056     INCOMPATIBILITY.
```
```  3057   - Added:
```
```  3058     smt_verbose
```
```  3059     smt_random_seed
```
```  3060     smt_datatypes
```
```  3061     smt_infer_triggers
```
```  3062     smt_monomorph_limit
```
```  3063     cvc3_options
```
```  3064     remote_cvc3_options
```
```  3065     remote_z3_options
```
```  3066     yices_options
```
```  3067
```
```  3068 * Boogie output files (.b2i files) need to be declared in the theory
```
```  3069 header.
```
```  3070
```
```  3071 * Simplification procedure "list_to_set_comprehension" rewrites list
```
```  3072 comprehensions applied to List.set to set comprehensions.  Occasional
```
```  3073 INCOMPATIBILITY, may be deactivated like this:
```
```  3074
```
```  3075   declare [[simproc del: list_to_set_comprehension]]
```
```  3076
```
```  3077 * Removed old version of primrec package.  INCOMPATIBILITY.
```
```  3078
```
```  3079 * Removed simplifier congruence rule of "prod_case", as has for long
```
```  3080 been the case with "split".  INCOMPATIBILITY.
```
```  3081
```
```  3082 * String.literal is a type, but not a datatype.  INCOMPATIBILITY.
```
```  3083
```
```  3084 * Removed [split_format ... and ... and ...] version of
```
```  3085 [split_format].  Potential INCOMPATIBILITY.
```
```  3086
```
```  3087 * Predicate "sorted" now defined inductively, with nice induction
```
```  3088 rules.  INCOMPATIBILITY: former sorted.simps now named sorted_simps.
```
```  3089
```
```  3090 * Constant "contents" renamed to "the_elem", to free the generic name
```
```  3091 contents for other uses.  INCOMPATIBILITY.
```
```  3092
```
```  3093 * Renamed class eq and constant eq (for code generation) to class
```
```  3094 equal and constant equal, plus renaming of related facts and various
```
```  3095 tuning.  INCOMPATIBILITY.
```
```  3096
```
```  3097 * Dropped type classes mult_mono and mult_mono1.  INCOMPATIBILITY.
```
```  3098
```
```  3099 * Removed output syntax "'a ~=> 'b" for "'a => 'b option".
```
```  3100 INCOMPATIBILITY.
```
```  3101
```
```  3102 * Renamed theory Fset to Cset, type Fset.fset to Cset.set, in order to
```
```  3103 avoid confusion with finite sets.  INCOMPATIBILITY.
```
```  3104
```
```  3105 * Abandoned locales equiv, congruent and congruent2 for equivalence
```
```  3106 relations.  INCOMPATIBILITY: use equivI rather than equiv_intro (same
```
```  3107 for congruent(2)).
```
```  3108
```
```  3109 * Some previously unqualified names have been qualified:
```
```  3110
```
```  3111   types
```
```  3112     bool ~> HOL.bool
```
```  3113     nat ~> Nat.nat
```
```  3114
```
```  3115   constants
```
```  3116     Trueprop ~> HOL.Trueprop
```
```  3117     True ~> HOL.True
```
```  3118     False ~> HOL.False
```
```  3119     op & ~> HOL.conj
```
```  3120     op | ~> HOL.disj
```
```  3121     op --> ~> HOL.implies
```
```  3122     op = ~> HOL.eq
```
```  3123     Not ~> HOL.Not
```
```  3124     The ~> HOL.The
```
```  3125     All ~> HOL.All
```
```  3126     Ex ~> HOL.Ex
```
```  3127     Ex1 ~> HOL.Ex1
```
```  3128     Let ~> HOL.Let
```
```  3129     If ~> HOL.If
```
```  3130     Ball ~> Set.Ball
```
```  3131     Bex ~> Set.Bex
```
```  3132     Suc ~> Nat.Suc
```
```  3133     Pair ~> Product_Type.Pair
```
```  3134     fst ~> Product_Type.fst
```
```  3135     snd ~> Product_Type.snd
```
```  3136     curry ~> Product_Type.curry
```
```  3137     op : ~> Set.member
```
```  3138     Collect ~> Set.Collect
```
```  3139
```
```  3140 INCOMPATIBILITY.
```
```  3141
```
```  3142 * More canonical naming convention for some fundamental definitions:
```
```  3143
```
```  3144     bot_bool_eq ~> bot_bool_def
```
```  3145     top_bool_eq ~> top_bool_def
```
```  3146     inf_bool_eq ~> inf_bool_def
```
```  3147     sup_bool_eq ~> sup_bool_def
```
```  3148     bot_fun_eq  ~> bot_fun_def
```
```  3149     top_fun_eq  ~> top_fun_def
```
```  3150     inf_fun_eq  ~> inf_fun_def
```
```  3151     sup_fun_eq  ~> sup_fun_def
```
```  3152
```
```  3153 INCOMPATIBILITY.
```
```  3154
```
```  3155 * More stylized fact names:
```
```  3156
```
```  3157   expand_fun_eq ~> fun_eq_iff
```
```  3158   expand_set_eq ~> set_eq_iff
```
```  3159   set_ext       ~> set_eqI
```
```  3160   nat_number    ~> eval_nat_numeral
```
```  3161
```
```  3162 INCOMPATIBILITY.
```
```  3163
```
```  3164 * Refactoring of code-generation specific operations in theory List:
```
```  3165
```
```  3166   constants
```
```  3167     null ~> List.null
```
```  3168
```
```  3169   facts
```
```  3170     mem_iff ~> member_def
```
```  3171     null_empty ~> null_def
```
```  3172
```
```  3173 INCOMPATIBILITY.  Note that these were not supposed to be used
```
```  3174 regularly unless for striking reasons; their main purpose was code
```
```  3175 generation.
```
```  3176
```
```  3177 Various operations from the Haskell prelude are used for generating
```
```  3178 Haskell code.
```
```  3179
```
```  3180 * Term "bij f" is now an abbreviation of "bij_betw f UNIV UNIV".  Term
```
```  3181 "surj f" is now an abbreviation of "range f = UNIV".  The theorems
```
```  3182 bij_def and surj_def are unchanged.  INCOMPATIBILITY.
```
```  3183
```
```  3184 * Abolished some non-alphabetic type names: "prod" and "sum" replace
```
```  3185 "*" and "+" respectively.  INCOMPATIBILITY.
```
```  3186
```
```  3187 * Name "Plus" of disjoint sum operator "<+>" is now hidden.  Write
```
```  3188 "Sum_Type.Plus" instead.
```
```  3189
```
```  3190 * Constant "split" has been merged with constant "prod_case"; names of
```
```  3191 ML functions, facts etc. involving split have been retained so far,
```
```  3192 though.  INCOMPATIBILITY.
```
```  3193
```
```  3194 * Dropped old infix syntax "_ mem _" for List.member; use "_ : set _"
```
```  3195 instead.  INCOMPATIBILITY.
```
```  3196
```
```  3197 * Removed lemma "Option.is_none_none" which duplicates "is_none_def".
```
```  3198 INCOMPATIBILITY.
```
```  3199
```
```  3200 * Former theory Library/Enum is now part of the HOL-Main image.
```
```  3201 INCOMPATIBILITY: all constants of the Enum theory now have to be
```
```  3202 referred to by its qualified name.
```
```  3203
```
```  3204   enum    ~>  Enum.enum
```
```  3205   nlists  ~>  Enum.nlists
```
```  3206   product ~>  Enum.product
```
```  3207
```
```  3208 * Theory Library/Monad_Syntax provides do-syntax for monad types.
```
```  3209 Syntax in Library/State_Monad has been changed to avoid ambiguities.
```
```  3210 INCOMPATIBILITY.
```
```  3211
```
```  3212 * Theory Library/SetsAndFunctions has been split into
```
```  3213 Library/Function_Algebras and Library/Set_Algebras; canonical names
```
```  3214 for instance definitions for functions; various improvements.
```
```  3215 INCOMPATIBILITY.
```
```  3216
```
```  3217 * Theory Library/Multiset provides stable quicksort implementation of
```
```  3218 sort_key.
```
```  3219
```
```  3220 * Theory Library/Multiset: renamed empty_idemp ~> empty_neutral.
```
```  3221 INCOMPATIBILITY.
```
```  3222
```
```  3223 * Session Multivariate_Analysis: introduced a type class for euclidean
```
```  3224 space.  Most theorems are now stated in terms of euclidean spaces
```
```  3225 instead of finite cartesian products.
```
```  3226
```
```  3227   types
```
```  3228     real ^ 'n ~>  'a::real_vector
```
```  3229               ~>  'a::euclidean_space
```
```  3230               ~>  'a::ordered_euclidean_space
```
```  3231         (depends on your needs)
```
```  3232
```
```  3233   constants
```
```  3234      _ \$ _        ~> _ \$\$ _
```
```  3235      \<chi> x. _  ~> \<chi>\<chi> x. _
```
```  3236      CARD('n)     ~> DIM('a)
```
```  3237
```
```  3238 Also note that the indices are now natural numbers and not from some
```
```  3239 finite type. Finite cartesian products of euclidean spaces, products
```
```  3240 of euclidean spaces the real and complex numbers are instantiated to
```
```  3241 be euclidean_spaces.  INCOMPATIBILITY.
```
```  3242
```
```  3243 * Session Probability: introduced pextreal as positive extended real
```
```  3244 numbers.  Use pextreal as value for measures.  Introduce the
```
```  3245 Radon-Nikodym derivative, product spaces and Fubini's theorem for
```
```  3246 arbitrary sigma finite measures.  Introduces Lebesgue measure based on
```
```  3247 the integral in Multivariate Analysis.  INCOMPATIBILITY.
```
```  3248
```
```  3249 * Session Imperative_HOL: revamped, corrected dozens of inadequacies.
```
```  3250 INCOMPATIBILITY.
```
```  3251
```
```  3252 * Session SPARK (with image HOL-SPARK) provides commands to load and
```
```  3253 prove verification conditions generated by the SPARK Ada program
```
```  3254 verifier.  See also src/HOL/SPARK and src/HOL/SPARK/Examples.
```
```  3255
```
```  3256
```
```  3257 *** HOL-Algebra ***
```
```  3258
```
```  3259 * Theorems for additive ring operations (locale abelian_monoid and
```
```  3260 descendants) are generated by interpretation from their multiplicative
```
```  3261 counterparts.  Names (in particular theorem names) have the mandatory
```
```  3262 qualifier 'add'.  Previous theorem names are redeclared for
```
```  3263 compatibility.
```
```  3264
```
```  3265 * Structure "int_ring" is now an abbreviation (previously a
```
```  3266 definition).  This fits more natural with advanced interpretations.
```
```  3267
```
```  3268
```
```  3269 *** HOLCF ***
```
```  3270
```
```  3271 * The domain package now runs in definitional mode by default: The
```
```  3272 former command 'new_domain' is now called 'domain'.  To use the domain
```
```  3273 package in its original axiomatic mode, use 'domain (unsafe)'.
```
```  3274 INCOMPATIBILITY.
```
```  3275
```
```  3276 * The new class "domain" is now the default sort.  Class "predomain"
```
```  3277 is an unpointed version of "domain". Theories can be updated by
```
```  3278 replacing sort annotations as shown below.  INCOMPATIBILITY.
```
```  3279
```
```  3280   'a::type ~> 'a::countable
```
```  3281   'a::cpo  ~> 'a::predomain
```
```  3282   'a::pcpo ~> 'a::domain
```
```  3283
```
```  3284 * The old type class "rep" has been superseded by class "domain".
```
```  3285 Accordingly, users of the definitional package must remove any
```
```  3286 "default_sort rep" declarations.  INCOMPATIBILITY.
```
```  3287
```
```  3288 * The domain package (definitional mode) now supports unpointed
```
```  3289 predomain argument types, as long as they are marked 'lazy'. (Strict
```
```  3290 arguments must be in class "domain".) For example, the following
```
```  3291 domain definition now works:
```
```  3292
```
```  3293   domain natlist = nil | cons (lazy "nat discr") (lazy "natlist")
```
```  3294
```
```  3295 * Theory HOLCF/Library/HOL_Cpo provides cpo and predomain class
```
```  3296 instances for types from main HOL: bool, nat, int, char, 'a + 'b,
```
```  3297 'a option, and 'a list.  Additionally, it configures fixrec and the
```
```  3298 domain package to work with these types.  For example:
```
```  3299
```
```  3300   fixrec isInl :: "('a + 'b) u -> tr"
```
```  3301     where "isInl\$(up\$(Inl x)) = TT" | "isInl\$(up\$(Inr y)) = FF"
```
```  3302
```
```  3303   domain V = VFun (lazy "V -> V") | VCon (lazy "nat") (lazy "V list")
```
```  3304
```
```  3305 * The "(permissive)" option of fixrec has been replaced with a
```
```  3306 per-equation "(unchecked)" option. See
```
```  3307 src/HOL/HOLCF/Tutorial/Fixrec_ex.thy for examples. INCOMPATIBILITY.
```
```  3308
```
```  3309 * The "bifinite" class no longer fixes a constant "approx"; the class
```
```  3310 now just asserts that such a function exists.  INCOMPATIBILITY.
```
```  3311
```
```  3312 * Former type "alg_defl" has been renamed to "defl".  HOLCF no longer
```
```  3313 defines an embedding of type 'a defl into udom by default; instances
```
```  3314 of "bifinite" and "domain" classes are available in
```
```  3315 src/HOL/HOLCF/Library/Defl_Bifinite.thy.
```
```  3316
```
```  3317 * The syntax "REP('a)" has been replaced with "DEFL('a)".
```
```  3318
```
```  3319 * The predicate "directed" has been removed.  INCOMPATIBILITY.
```
```  3320
```
```  3321 * The type class "finite_po" has been removed.  INCOMPATIBILITY.
```
```  3322
```
```  3323 * The function "cprod_map" has been renamed to "prod_map".
```
```  3324 INCOMPATIBILITY.
```
```  3325
```
```  3326 * The monadic bind operator on each powerdomain has new binder syntax
```
```  3327 similar to sets, e.g. "\<Union>\<sharp>x\<in>xs. t" represents
```
```  3328 "upper_bind\<cdot>xs\<cdot>(\<Lambda> x. t)".
```
```  3329
```
```  3330 * The infix syntax for binary union on each powerdomain has changed
```
```  3331 from e.g. "+\<sharp>" to "\<union>\<sharp>", for consistency with set
```
```  3332 syntax.  INCOMPATIBILITY.
```
```  3333
```
```  3334 * The constant "UU" has been renamed to "bottom".  The syntax "UU" is
```
```  3335 still supported as an input translation.
```
```  3336
```
```  3337 * Renamed some theorems (the original names are also still available).
```
```  3338
```
```  3339   expand_fun_below   ~> fun_below_iff
```
```  3340   below_fun_ext      ~> fun_belowI
```
```  3341   expand_cfun_eq     ~> cfun_eq_iff
```
```  3342   ext_cfun           ~> cfun_eqI
```
```  3343   expand_cfun_below  ~> cfun_below_iff
```
```  3344   below_cfun_ext     ~> cfun_belowI
```
```  3345   cont2cont_Rep_CFun ~> cont2cont_APP
```
```  3346
```
```  3347 * The Abs and Rep functions for various types have changed names.
```
```  3348 Related theorem names have also changed to match. INCOMPATIBILITY.
```
```  3349
```
```  3350   Rep_CFun  ~> Rep_cfun
```
```  3351   Abs_CFun  ~> Abs_cfun
```
```  3352   Rep_Sprod ~> Rep_sprod
```
```  3353   Abs_Sprod ~> Abs_sprod
```
```  3354   Rep_Ssum  ~> Rep_ssum
```
```  3355   Abs_Ssum  ~> Abs_ssum
```
```  3356
```
```  3357 * Lemmas with names of the form *_defined_iff or *_strict_iff have
```
```  3358 been renamed to *_bottom_iff.  INCOMPATIBILITY.
```
```  3359
```
```  3360 * Various changes to bisimulation/coinduction with domain package:
```
```  3361
```
```  3362   - Definitions of "bisim" constants no longer mention definedness.
```
```  3363   - With mutual recursion, "bisim" predicate is now curried.
```
```  3364   - With mutual recursion, each type gets a separate coind theorem.
```
```  3365   - Variable names in bisim_def and coinduct rules have changed.
```
```  3366
```
```  3367 INCOMPATIBILITY.
```
```  3368
```
```  3369 * Case combinators generated by the domain package for type "foo" are
```
```  3370 now named "foo_case" instead of "foo_when".  INCOMPATIBILITY.
```
```  3371
```
```  3372 * Several theorems have been renamed to more accurately reflect the
```
```  3373 names of constants and types involved.  INCOMPATIBILITY.
```
```  3374
```
```  3375   thelub_const    ~> lub_const
```
```  3376   lub_const       ~> is_lub_const
```
```  3377   thelubI         ~> lub_eqI
```
```  3378   is_lub_lub      ~> is_lubD2
```
```  3379   lubI            ~> is_lub_lub
```
```  3380   unique_lub      ~> is_lub_unique
```
```  3381   is_ub_lub       ~> is_lub_rangeD1
```
```  3382   lub_bin_chain   ~> is_lub_bin_chain
```
```  3383   lub_fun         ~> is_lub_fun
```
```  3384   thelub_fun      ~> lub_fun
```
```  3385   thelub_cfun     ~> lub_cfun
```
```  3386   thelub_Pair     ~> lub_Pair
```
```  3387   lub_cprod       ~> is_lub_prod
```
```  3388   thelub_cprod    ~> lub_prod
```
```  3389   minimal_cprod   ~> minimal_prod
```
```  3390   inst_cprod_pcpo ~> inst_prod_pcpo
```
```  3391   UU_I            ~> bottomI
```
```  3392   compact_UU      ~> compact_bottom
```
```  3393   deflation_UU    ~> deflation_bottom
```
```  3394   finite_deflation_UU ~> finite_deflation_bottom
```
```  3395
```
```  3396 * Many legacy theorem names have been discontinued.  INCOMPATIBILITY.
```
```  3397
```
```  3398   sq_ord_less_eq_trans ~> below_eq_trans
```
```  3399   sq_ord_eq_less_trans ~> eq_below_trans
```
```  3400   refl_less            ~> below_refl
```
```  3401   trans_less           ~> below_trans
```
```  3402   antisym_less         ~> below_antisym
```
```  3403   antisym_less_inverse ~> po_eq_conv [THEN iffD1]
```
```  3404   box_less             ~> box_below
```
```  3405   rev_trans_less       ~> rev_below_trans
```
```  3406   not_less2not_eq      ~> not_below2not_eq
```
```  3407   less_UU_iff          ~> below_UU_iff
```
```  3408   flat_less_iff        ~> flat_below_iff
```
```  3409   adm_less             ~> adm_below
```
```  3410   adm_not_less         ~> adm_not_below
```
```  3411   adm_compact_not_less ~> adm_compact_not_below
```
```  3412   less_fun_def         ~> below_fun_def
```
```  3413   expand_fun_less      ~> fun_below_iff
```
```  3414   less_fun_ext         ~> fun_belowI
```
```  3415   less_discr_def       ~> below_discr_def
```
```  3416   discr_less_eq        ~> discr_below_eq
```
```  3417   less_unit_def        ~> below_unit_def
```
```  3418   less_cprod_def       ~> below_prod_def
```
```  3419   prod_lessI           ~> prod_belowI
```
```  3420   Pair_less_iff        ~> Pair_below_iff
```
```  3421   fst_less_iff         ~> fst_below_iff
```
```  3422   snd_less_iff         ~> snd_below_iff
```
```  3423   expand_cfun_less     ~> cfun_below_iff
```
```  3424   less_cfun_ext        ~> cfun_belowI
```
```  3425   injection_less       ~> injection_below
```
```  3426   less_up_def          ~> below_up_def
```
```  3427   not_Iup_less         ~> not_Iup_below
```
```  3428   Iup_less             ~> Iup_below
```
```  3429   up_less              ~> up_below
```
```  3430   Def_inject_less_eq   ~> Def_below_Def
```
```  3431   Def_less_is_eq       ~> Def_below_iff
```
```  3432   spair_less_iff       ~> spair_below_iff
```
```  3433   less_sprod           ~> below_sprod
```
```  3434   spair_less           ~> spair_below
```
```  3435   sfst_less_iff        ~> sfst_below_iff
```
```  3436   ssnd_less_iff        ~> ssnd_below_iff
```
```  3437   fix_least_less       ~> fix_least_below
```
```  3438   dist_less_one        ~> dist_below_one
```
```  3439   less_ONE             ~> below_ONE
```
```  3440   ONE_less_iff         ~> ONE_below_iff
```
```  3441   less_sinlD           ~> below_sinlD
```
```  3442   less_sinrD           ~> below_sinrD
```
```  3443
```
```  3444
```
```  3445 *** FOL and ZF ***
```
```  3446
```
```  3447 * All constant names are now qualified internally and use proper
```
```  3448 identifiers, e.g. "IFOL.eq" instead of "op =".  INCOMPATIBILITY.
```
```  3449
```
```  3450
```
```  3451 *** ML ***
```
```  3452
```
```  3453 * Antiquotation @{assert} inlines a function bool -> unit that raises
```
```  3454 Fail if the argument is false.  Due to inlining the source position of
```
```  3455 failed assertions is included in the error output.
```
```  3456
```
```  3457 * Discontinued antiquotation @{theory_ref}, which is obsolete since ML
```
```  3458 text is in practice always evaluated with a stable theory checkpoint.
```
```  3459 Minor INCOMPATIBILITY, use (Theory.check_thy @{theory}) instead.
```
```  3460
```
```  3461 * Antiquotation @{theory A} refers to theory A from the ancestry of
```
```  3462 the current context, not any accidental theory loader state as before.
```
```  3463 Potential INCOMPATIBILITY, subtle change in semantics.
```
```  3464
```
```  3465 * Syntax.pretty_priority (default 0) configures the required priority
```
```  3466 of pretty-printed output and thus affects insertion of parentheses.
```
```  3467
```
```  3468 * Syntax.default_root (default "any") configures the inner syntax
```
```  3469 category (nonterminal symbol) for parsing of terms.
```
```  3470
```
```  3471 * Former exception Library.UnequalLengths now coincides with
```
```  3472 ListPair.UnequalLengths.
```
```  3473
```
```  3474 * Renamed structure MetaSimplifier to Raw_Simplifier.  Note that the
```
```  3475 main functionality is provided by structure Simplifier.
```
```  3476
```
```  3477 * Renamed raw "explode" function to "raw_explode" to emphasize its
```
```  3478 meaning.  Note that internally to Isabelle, Symbol.explode is used in
```
```  3479 almost all situations.
```
```  3480
```
```  3481 * Discontinued obsolete function sys_error and exception SYS_ERROR.
```
```  3482 See implementation manual for further details on exceptions in
```
```  3483 Isabelle/ML.
```
```  3484
```
```  3485 * Renamed setmp_noncritical to Unsynchronized.setmp to emphasize its
```
```  3486 meaning.
```
```  3487
```
```  3488 * Renamed structure PureThy to Pure_Thy and moved most of its
```
```  3489 operations to structure Global_Theory, to emphasize that this is
```
```  3490 rarely-used global-only stuff.
```
```  3491
```
```  3492 * Discontinued Output.debug.  Minor INCOMPATIBILITY, use plain writeln
```
```  3493 instead (or tracing for high-volume output).
```
```  3494
```
```  3495 * Configuration option show_question_marks only affects regular pretty
```
```  3496 printing of types and terms, not raw Term.string_of_vname.
```
```  3497
```
```  3498 * ML_Context.thm and ML_Context.thms are no longer pervasive.  Rare
```
```  3499 INCOMPATIBILITY, superseded by static antiquotations @{thm} and
```
```  3500 @{thms} for most purposes.
```
```  3501
```
```  3502 * ML structure Unsynchronized is never opened, not even in Isar
```
```  3503 interaction mode as before.  Old Unsynchronized.set etc. have been
```
```  3504 discontinued -- use plain := instead.  This should be *rare* anyway,
```
```  3505 since modern tools always work via official context data, notably
```
```  3506 configuration options.
```
```  3507
```
```  3508 * Parallel and asynchronous execution requires special care concerning
```
```  3509 interrupts.  Structure Exn provides some convenience functions that
```
```  3510 avoid working directly with raw Interrupt.  User code must not absorb
```
```  3511 interrupts -- intermediate handling (for cleanup etc.) needs to be
```
```  3512 followed by re-raising of the original exception.  Another common
```
```  3513 source of mistakes are "handle _" patterns, which make the meaning of
```
```  3514 the program subject to physical effects of the environment.
```
```  3515
```
```  3516
```
```  3517
```
```  3518 New in Isabelle2009-2 (June 2010)
```
```  3519 ---------------------------------
```
```  3520
```
```  3521 *** General ***
```
```  3522
```
```  3523 * Authentic syntax for *all* logical entities (type classes, type
```
```  3524 constructors, term constants): provides simple and robust
```
```  3525 correspondence between formal entities and concrete syntax.  Within
```
```  3526 the parse tree / AST representations, "constants" are decorated by
```
```  3527 their category (class, type, const) and spelled out explicitly with
```
```  3528 their full internal name.
```
```  3529
```
```  3530 Substantial INCOMPATIBILITY concerning low-level syntax declarations
```
```  3531 and translations (translation rules and translation functions in ML).
```
```  3532 Some hints on upgrading:
```
```  3533
```
```  3534   - Many existing uses of 'syntax' and 'translations' can be replaced
```
```  3535     by more modern 'type_notation', 'notation' and 'abbreviation',
```
```  3536     which are independent of this issue.
```
```  3537
```
```  3538   - 'translations' require markup within the AST; the term syntax
```
```  3539     provides the following special forms:
```
```  3540
```
```  3541       CONST c   -- produces syntax version of constant c from context
```
```  3542       XCONST c  -- literally c, checked as constant from context
```
```  3543       c         -- literally c, if declared by 'syntax'
```
```  3544
```
```  3545     Plain identifiers are treated as AST variables -- occasionally the
```
```  3546     system indicates accidental variables via the error "rhs contains
```
```  3547     extra variables".
```
```  3548
```
```  3549     Type classes and type constructors are marked according to their
```
```  3550     concrete syntax.  Some old translations rules need to be written
```
```  3551     for the "type" category, using type constructor application
```
```  3552     instead of pseudo-term application of the default category
```
```  3553     "logic".
```
```  3554
```
```  3555   - 'parse_translation' etc. in ML may use the following
```
```  3556     antiquotations:
```
```  3557
```
```  3558       @{class_syntax c}   -- type class c within parse tree / AST
```
```  3559       @{term_syntax c}    -- type constructor c within parse tree / AST
```
```  3560       @{const_syntax c}   -- ML version of "CONST c" above
```
```  3561       @{syntax_const c}   -- literally c (checked wrt. 'syntax' declarations)
```
```  3562
```
```  3563   - Literal types within 'typed_print_translations', i.e. those *not*
```
```  3564     represented as pseudo-terms are represented verbatim.  Use @{class
```
```  3565     c} or @{type_name c} here instead of the above syntax
```
```  3566     antiquotations.
```
```  3567
```
```  3568 Note that old non-authentic syntax was based on unqualified base
```
```  3569 names, so all of the above "constant" names would coincide.  Recall
```
```  3570 that 'print_syntax' and ML_command "set Syntax.trace_ast" help to
```
```  3571 diagnose syntax problems.
```
```  3572
```
```  3573 * Type constructors admit general mixfix syntax, not just infix.
```
```  3574
```
```  3575 * Concrete syntax may be attached to local entities without a proof
```
```  3576 body, too.  This works via regular mixfix annotations for 'fix',
```
```  3577 'def', 'obtain' etc. or via the explicit 'write' command, which is
```
```  3578 similar to the 'notation' command in theory specifications.
```
```  3579
```
```  3580 * Discontinued unnamed infix syntax (legacy feature for many years) --
```
```  3581 need to specify constant name and syntax separately.  Internal ML
```
```  3582 datatype constructors have been renamed from InfixName to Infix etc.
```
```  3583 Minor INCOMPATIBILITY.
```
```  3584
```
```  3585 * Schematic theorem statements need to be explicitly markup as such,
```
```  3586 via commands 'schematic_lemma', 'schematic_theorem',
```
```  3587 'schematic_corollary'.  Thus the relevance of the proof is made
```
```  3588 syntactically clear, which impacts performance in a parallel or
```
```  3589 asynchronous interactive environment.  Minor INCOMPATIBILITY.
```
```  3590
```
```  3591 * Use of cumulative prems via "!" in some proof methods has been
```
```  3592 discontinued (old legacy feature).
```
```  3593
```
```  3594 * References 'trace_simp' and 'debug_simp' have been replaced by
```
```  3595 configuration options stored in the context. Enabling tracing (the
```
```  3596 case of debugging is similar) in proofs works via
```
```  3597
```
```  3598   using [[trace_simp = true]]
```
```  3599
```
```  3600 Tracing is then active for all invocations of the simplifier in
```
```  3601 subsequent goal refinement steps. Tracing may also still be enabled or
```
```  3602 disabled via the ProofGeneral settings menu.
```
```  3603
```
```  3604 * Separate commands 'hide_class', 'hide_type', 'hide_const',
```
```  3605 'hide_fact' replace the former 'hide' KIND command.  Minor
```
```  3606 INCOMPATIBILITY.
```
```  3607
```
```  3608 * Improved parallelism of proof term normalization: usedir -p2 -q0 is
```
```  3609 more efficient than combinations with -q1 or -q2.
```
```  3610
```
```  3611
```
```  3612 *** Pure ***
```
```  3613
```
```  3614 * Proofterms record type-class reasoning explicitly, using the
```
```  3615 "unconstrain" operation internally.  This eliminates all sort
```
```  3616 constraints from a theorem and proof, introducing explicit
```
```  3617 OFCLASS-premises.  On the proof term level, this operation is
```
```  3618 automatically applied at theorem boundaries, such that closed proofs
```
```  3619 are always free of sort constraints.  INCOMPATIBILITY for tools that
```
```  3620 inspect proof terms.
```
```  3621
```
```  3622 * Local theory specifications may depend on extra type variables that
```
```  3623 are not present in the result type -- arguments TYPE('a) :: 'a itself
```
```  3624 are added internally.  For example:
```
```  3625
```
```  3626   definition unitary :: bool where "unitary = (ALL (x::'a) y. x = y)"
```
```  3627
```
```  3628 * Predicates of locales introduced by classes carry a mandatory
```
```  3629 "class" prefix.  INCOMPATIBILITY.
```
```  3630
```
```  3631 * Vacuous class specifications observe default sort.  INCOMPATIBILITY.
```
```  3632
```
```  3633 * Old 'axclass' command has been discontinued.  INCOMPATIBILITY, use
```
```  3634 'class' instead.
```
```  3635
```
```  3636 * Command 'code_reflect' allows to incorporate generated ML code into
```
```  3637 runtime environment; replaces immature code_datatype antiquotation.
```
```  3638 INCOMPATIBILITY.
```
```  3639
```
```  3640 * Code generator: simple concept for abstract datatypes obeying
```
```  3641 invariants.
```
```  3642
```
```  3643 * Code generator: details of internal data cache have no impact on the
```
```  3644 user space functionality any longer.
```
```  3645
```
```  3646 * Methods "unfold_locales" and "intro_locales" ignore non-locale
```
```  3647 subgoals.  This is more appropriate for interpretations with 'where'.
```
```  3648 INCOMPATIBILITY.
```
```  3649
```
```  3650 * Command 'example_proof' opens an empty proof body.  This allows to
```
```  3651 experiment with Isar, without producing any persistent result.
```
```  3652
```
```  3653 * Commands 'type_notation' and 'no_type_notation' declare type syntax
```
```  3654 within a local theory context, with explicit checking of the
```
```  3655 constructors involved (in contrast to the raw 'syntax' versions).
```
```  3656
```
```  3657 * Commands 'types' and 'typedecl' now work within a local theory
```
```  3658 context -- without introducing dependencies on parameters or
```
```  3659 assumptions, which is not possible in Isabelle/Pure.
```
```  3660
```
```  3661 * Command 'defaultsort' has been renamed to 'default_sort', it works
```
```  3662 within a local theory context.  Minor INCOMPATIBILITY.
```
```  3663
```
```  3664
```
```  3665 *** HOL ***
```
```  3666
```
```  3667 * Command 'typedef' now works within a local theory context -- without
```
```  3668 introducing dependencies on parameters or assumptions, which is not
```
```  3669 possible in Isabelle/Pure/HOL.  Note that the logical environment may
```
```  3670 contain multiple interpretations of local typedefs (with different
```
```  3671 non-emptiness proofs), even in a global theory context.
```
```  3672
```
```  3673 * New package for quotient types.  Commands 'quotient_type' and
```
```  3674 'quotient_definition' may be used for defining types and constants by
```
```  3675 quotient constructions.  An example is the type of integers created by
```
```  3676 quotienting pairs of natural numbers:
```
```  3677
```
```  3678   fun
```
```  3679     intrel :: "(nat * nat) => (nat * nat) => bool"
```
```  3680   where
```
```  3681     "intrel (x, y) (u, v) = (x + v = u + y)"
```
```  3682
```
```  3683   quotient_type int = "nat * nat" / intrel
```
```  3684     by (auto simp add: equivp_def expand_fun_eq)
```
```  3685
```
```  3686   quotient_definition
```
```  3687     "0::int" is "(0::nat, 0::nat)"
```
```  3688
```
```  3689 The method "lifting" can be used to lift of theorems from the
```
```  3690 underlying "raw" type to the quotient type.  The example
```
```  3691 src/HOL/Quotient_Examples/FSet.thy includes such a quotient
```
```  3692 construction and provides a reasoning infrastructure for finite sets.
```
```  3693
```
```  3694 * Renamed Library/Quotient.thy to Library/Quotient_Type.thy to avoid
```
```  3695 clash with new theory Quotient in Main HOL.
```
```  3696
```
```  3697 * Moved the SMT binding into the main HOL session, eliminating
```
```  3698 separate HOL-SMT session.
```
```  3699
```
```  3700 * List membership infix mem operation is only an input abbreviation.
```
```  3701 INCOMPATIBILITY.
```
```  3702
```
```  3703 * Theory Library/Word.thy has been removed.  Use library Word/Word.thy
```
```  3704 for future developements; former Library/Word.thy is still present in
```
```  3705 the AFP entry RSAPPS.
```
```  3706
```
```  3707 * Theorem Int.int_induct renamed to Int.int_of_nat_induct and is no
```
```  3708 longer shadowed.  INCOMPATIBILITY.
```
```  3709
```
```  3710 * Dropped theorem duplicate comp_arith; use semiring_norm instead.
```
```  3711 INCOMPATIBILITY.
```
```  3712
```
```  3713 * Dropped theorem RealPow.real_sq_order; use power2_le_imp_le instead.
```
```  3714 INCOMPATIBILITY.
```
```  3715
```
```  3716 * Dropped normalizing_semiring etc; use the facts in semiring classes
```
```  3717 instead.  INCOMPATIBILITY.
```
```  3718
```
```  3719 * Dropped several real-specific versions of lemmas about floor and
```
```  3720 ceiling; use the generic lemmas from theory "Archimedean_Field"
```
```  3721 instead.  INCOMPATIBILITY.
```
```  3722
```
```  3723   floor_number_of_eq         ~> floor_number_of
```
```  3724   le_floor_eq_number_of      ~> number_of_le_floor
```
```  3725   le_floor_eq_zero           ~> zero_le_floor
```
```  3726   le_floor_eq_one            ~> one_le_floor
```
```  3727   floor_less_eq_number_of    ~> floor_less_number_of
```
```  3728   floor_less_eq_zero         ~> floor_less_zero
```
```  3729   floor_less_eq_one          ~> floor_less_one
```
```  3730   less_floor_eq_number_of    ~> number_of_less_floor
```
```  3731   less_floor_eq_zero         ~> zero_less_floor
```
```  3732   less_floor_eq_one          ~> one_less_floor
```
```  3733   floor_le_eq_number_of      ~> floor_le_number_of
```
```  3734   floor_le_eq_zero           ~> floor_le_zero
```
```  3735   floor_le_eq_one            ~> floor_le_one
```
```  3736   floor_subtract_number_of   ~> floor_diff_number_of
```
```  3737   floor_subtract_one         ~> floor_diff_one
```
```  3738   ceiling_number_of_eq       ~> ceiling_number_of
```
```  3739   ceiling_le_eq_number_of    ~> ceiling_le_number_of
```
```  3740   ceiling_le_zero_eq         ~> ceiling_le_zero
```
```  3741   ceiling_le_eq_one          ~> ceiling_le_one
```
```  3742   less_ceiling_eq_number_of  ~> number_of_less_ceiling
```
```  3743   less_ceiling_eq_zero       ~> zero_less_ceiling
```
```  3744   less_ceiling_eq_one        ~> one_less_ceiling
```
```  3745   ceiling_less_eq_number_of  ~> ceiling_less_number_of
```
```  3746   ceiling_less_eq_zero       ~> ceiling_less_zero
```
```  3747   ceiling_less_eq_one        ~> ceiling_less_one
```
```  3748   le_ceiling_eq_number_of    ~> number_of_le_ceiling
```
```  3749   le_ceiling_eq_zero         ~> zero_le_ceiling
```
```  3750   le_ceiling_eq_one          ~> one_le_ceiling
```
```  3751   ceiling_subtract_number_of ~> ceiling_diff_number_of
```
```  3752   ceiling_subtract_one       ~> ceiling_diff_one
```
```  3753
```
```  3754 * Theory "Finite_Set": various folding_XXX locales facilitate the
```
```  3755 application of the various fold combinators on finite sets.
```
```  3756
```
```  3757 * Library theory "RBT" renamed to "RBT_Impl"; new library theory "RBT"
```
```  3758 provides abstract red-black tree type which is backed by "RBT_Impl" as
```
```  3759 implementation.  INCOMPATIBILTY.
```
```  3760
```
```  3761 * Theory Library/Coinductive_List has been removed -- superseded by
```
```  3762 AFP/thys/Coinductive.
```
```  3763
```
```  3764 * Theory PReal, including the type "preal" and related operations, has
```
```  3765 been removed.  INCOMPATIBILITY.
```
```  3766
```
```  3767 * Real: new development using Cauchy Sequences.
```
```  3768
```
```  3769 * Split off theory "Big_Operators" containing setsum, setprod,
```
```  3770 Inf_fin, Sup_fin, Min, Max from theory Finite_Set.  INCOMPATIBILITY.
```
```  3771
```
```  3772 * Theory "Rational" renamed to "Rat", for consistency with "Nat",
```
```  3773 "Int" etc.  INCOMPATIBILITY.
```
```  3774
```
```  3775 * Constant Rat.normalize needs to be qualified.  INCOMPATIBILITY.
```
```  3776
```
```  3777 * New set of rules "ac_simps" provides combined assoc / commute
```
```  3778 rewrites for all interpretations of the appropriate generic locales.
```
```  3779
```
```  3780 * Renamed theory "OrderedGroup" to "Groups" and split theory
```
```  3781 "Ring_and_Field" into theories "Rings" and "Fields"; for more
```
```  3782 appropriate and more consistent names suitable for name prefixes
```
```  3783 within the HOL theories.  INCOMPATIBILITY.
```
```  3784
```
```  3785 * Some generic constants have been put to appropriate theories:
```
```  3786   - less_eq, less: Orderings
```
```  3787   - zero, one, plus, minus, uminus, times, abs, sgn: Groups
```
```  3788   - inverse, divide: Rings
```
```  3789 INCOMPATIBILITY.
```
```  3790
```
```  3791 * More consistent naming of type classes involving orderings (and
```
```  3792 lattices):
```
```  3793
```
```  3794     lower_semilattice                   ~> semilattice_inf
```
```  3795     upper_semilattice                   ~> semilattice_sup
```
```  3796
```
```  3797     dense_linear_order                  ~> dense_linorder
```
```  3798
```
```  3799     pordered_ab_group_add               ~> ordered_ab_group_add
```
```  3800     pordered_ab_group_add_abs           ~> ordered_ab_group_add_abs
```
```  3801     pordered_ab_semigroup_add           ~> ordered_ab_semigroup_add
```
```  3802     pordered_ab_semigroup_add_imp_le    ~> ordered_ab_semigroup_add_imp_le
```
```  3803     pordered_cancel_ab_semigroup_add    ~> ordered_cancel_ab_semigroup_add
```
```  3804     pordered_cancel_comm_semiring       ~> ordered_cancel_comm_semiring
```
```  3805     pordered_cancel_semiring            ~> ordered_cancel_semiring
```
```  3806     pordered_comm_monoid_add            ~> ordered_comm_monoid_add
```
```  3807     pordered_comm_ring                  ~> ordered_comm_ring
```
```  3808     pordered_comm_semiring              ~> ordered_comm_semiring
```
```  3809     pordered_ring                       ~> ordered_ring
```
```  3810     pordered_ring_abs                   ~> ordered_ring_abs
```
```  3811     pordered_semiring                   ~> ordered_semiring
```
```  3812
```
```  3813     ordered_ab_group_add                ~> linordered_ab_group_add
```
```  3814     ordered_ab_semigroup_add            ~> linordered_ab_semigroup_add
```
```  3815     ordered_cancel_ab_semigroup_add     ~> linordered_cancel_ab_semigroup_add
```
```  3816     ordered_comm_semiring_strict        ~> linordered_comm_semiring_strict
```
```  3817     ordered_field                       ~> linordered_field
```
```  3818     ordered_field_no_lb                 ~> linordered_field_no_lb
```
```  3819     ordered_field_no_ub                 ~> linordered_field_no_ub
```
```  3820     ordered_field_dense_linear_order    ~> dense_linordered_field
```
```  3821     ordered_idom                        ~> linordered_idom
```
```  3822     ordered_ring                        ~> linordered_ring
```
```  3823     ordered_ring_le_cancel_factor       ~> linordered_ring_le_cancel_factor
```
```  3824     ordered_ring_less_cancel_factor     ~> linordered_ring_less_cancel_factor
```
```  3825     ordered_ring_strict                 ~> linordered_ring_strict
```
```  3826     ordered_semidom                     ~> linordered_semidom
```
```  3827     ordered_semiring                    ~> linordered_semiring
```
```  3828     ordered_semiring_1                  ~> linordered_semiring_1
```
```  3829     ordered_semiring_1_strict           ~> linordered_semiring_1_strict
```
```  3830     ordered_semiring_strict             ~> linordered_semiring_strict
```
```  3831
```
```  3832   The following slightly odd type classes have been moved to a
```
```  3833   separate theory Library/Lattice_Algebras:
```
```  3834
```
```  3835     lordered_ab_group_add               ~> lattice_ab_group_add
```
```  3836     lordered_ab_group_add_abs           ~> lattice_ab_group_add_abs
```
```  3837     lordered_ab_group_add_meet          ~> semilattice_inf_ab_group_add
```
```  3838     lordered_ab_group_add_join          ~> semilattice_sup_ab_group_add
```
```  3839     lordered_ring                       ~> lattice_ring
```
```  3840
```
```  3841 INCOMPATIBILITY.
```
```  3842
```
```  3843 * Refined field classes:
```
```  3844   - classes division_ring_inverse_zero, field_inverse_zero,
```
```  3845     linordered_field_inverse_zero include rule inverse 0 = 0 --
```
```  3846     subsumes former division_by_zero class;
```
```  3847   - numerous lemmas have been ported from field to division_ring.
```
```  3848 INCOMPATIBILITY.
```
```  3849
```
```  3850 * Refined algebra theorem collections:
```
```  3851   - dropped theorem group group_simps, use algebra_simps instead;
```
```  3852   - dropped theorem group ring_simps, use field_simps instead;
```
```  3853   - proper theorem collection field_simps subsumes former theorem
```
```  3854     groups field_eq_simps and field_simps;
```
```  3855   - dropped lemma eq_minus_self_iff which is a duplicate for
```
```  3856     equal_neg_zero.
```
```  3857 INCOMPATIBILITY.
```
```  3858
```
```  3859 * Theory Finite_Set and List: some lemmas have been generalized from
```
```  3860 sets to lattices:
```
```  3861
```
```  3862   fun_left_comm_idem_inter      ~> fun_left_comm_idem_inf
```
```  3863   fun_left_comm_idem_union      ~> fun_left_comm_idem_sup
```
```  3864   inter_Inter_fold_inter        ~> inf_Inf_fold_inf
```
```  3865   union_Union_fold_union        ~> sup_Sup_fold_sup
```
```  3866   Inter_fold_inter              ~> Inf_fold_inf
```
```  3867   Union_fold_union              ~> Sup_fold_sup
```
```  3868   inter_INTER_fold_inter        ~> inf_INFI_fold_inf
```
```  3869   union_UNION_fold_union        ~> sup_SUPR_fold_sup
```
```  3870   INTER_fold_inter              ~> INFI_fold_inf
```
```  3871   UNION_fold_union              ~> SUPR_fold_sup
```
```  3872
```
```  3873 * Theory "Complete_Lattice": lemmas top_def and bot_def have been
```
```  3874 replaced by the more convenient lemmas Inf_empty and Sup_empty.
```
```  3875 Dropped lemmas Inf_insert_simp and Sup_insert_simp, which are subsumed
```
```  3876 by Inf_insert and Sup_insert.  Lemmas Inf_UNIV and Sup_UNIV replace
```
```  3877 former Inf_Univ and Sup_Univ.  Lemmas inf_top_right and sup_bot_right
```
```  3878 subsume inf_top and sup_bot respectively.  INCOMPATIBILITY.
```
```  3879
```
```  3880 * Reorganized theory Multiset: swapped notation of pointwise and
```
```  3881 multiset order:
```
```  3882
```
```  3883   - pointwise ordering is instance of class order with standard syntax
```
```  3884     <= and <;
```
```  3885   - multiset ordering has syntax <=# and <#; partial order properties
```
```  3886     are provided by means of interpretation with prefix
```
```  3887     multiset_order;
```
```  3888   - less duplication, less historical organization of sections,
```
```  3889     conversion from associations lists to multisets, rudimentary code
```
```  3890     generation;
```
```  3891   - use insert_DiffM2 [symmetric] instead of elem_imp_eq_diff_union,
```
```  3892     if needed.
```
```  3893
```
```  3894 Renamed:
```
```  3895
```
```  3896   multiset_eq_conv_count_eq  ~>  multiset_ext_iff
```
```  3897   multi_count_ext  ~>  multiset_ext
```
```  3898   diff_union_inverse2  ~>  diff_union_cancelR
```
```  3899
```
```  3900 INCOMPATIBILITY.
```
```  3901
```
```  3902 * Theory Permutation: replaced local "remove" by List.remove1.
```
```  3903
```
```  3904 * Code generation: ML and OCaml code is decorated with signatures.
```
```  3905
```
```  3906 * Theory List: added transpose.
```
```  3907
```
```  3908 * Library/Nat_Bijection.thy is a collection of bijective functions
```
```  3909 between nat and other types, which supersedes the older libraries
```
```  3910 Library/Nat_Int_Bij.thy and HOLCF/NatIso.thy.  INCOMPATIBILITY.
```
```  3911
```
```  3912   Constants:
```
```  3913   Nat_Int_Bij.nat2_to_nat         ~> prod_encode
```
```  3914   Nat_Int_Bij.nat_to_nat2         ~> prod_decode
```
```  3915   Nat_Int_Bij.int_to_nat_bij      ~> int_encode
```
```  3916   Nat_Int_Bij.nat_to_int_bij      ~> int_decode
```
```  3917   Countable.pair_encode           ~> prod_encode
```
```  3918   NatIso.prod2nat                 ~> prod_encode
```
```  3919   NatIso.nat2prod                 ~> prod_decode
```
```  3920   NatIso.sum2nat                  ~> sum_encode
```
```  3921   NatIso.nat2sum                  ~> sum_decode
```
```  3922   NatIso.list2nat                 ~> list_encode
```
```  3923   NatIso.nat2list                 ~> list_decode
```
```  3924   NatIso.set2nat                  ~> set_encode
```
```  3925   NatIso.nat2set                  ~> set_decode
```
```  3926
```
```  3927   Lemmas:
```
```  3928   Nat_Int_Bij.bij_nat_to_int_bij  ~> bij_int_decode
```
```  3929   Nat_Int_Bij.nat2_to_nat_inj     ~> inj_prod_encode
```
```  3930   Nat_Int_Bij.nat2_to_nat_surj    ~> surj_prod_encode
```
```  3931   Nat_Int_Bij.nat_to_nat2_inj     ~> inj_prod_decode
```
```  3932   Nat_Int_Bij.nat_to_nat2_surj    ~> surj_prod_decode
```
```  3933   Nat_Int_Bij.i2n_n2i_id          ~> int_encode_inverse
```
```  3934   Nat_Int_Bij.n2i_i2n_id          ~> int_decode_inverse
```
```  3935   Nat_Int_Bij.surj_nat_to_int_bij ~> surj_int_encode
```
```  3936   Nat_Int_Bij.surj_int_to_nat_bij ~> surj_int_decode
```
```  3937   Nat_Int_Bij.inj_nat_to_int_bij  ~> inj_int_encode
```
```  3938   Nat_Int_Bij.inj_int_to_nat_bij  ~> inj_int_decode
```
```  3939   Nat_Int_Bij.bij_nat_to_int_bij  ~> bij_int_encode
```
```  3940   Nat_Int_Bij.bij_int_to_nat_bij  ~> bij_int_decode
```
```  3941
```
```  3942 * Sledgehammer:
```
```  3943   - Renamed ATP commands:
```
```  3944     atp_info     ~> sledgehammer running_atps
```
```  3945     atp_kill     ~> sledgehammer kill_atps
```
```  3946     atp_messages ~> sledgehammer messages
```
```  3947     atp_minimize ~> sledgehammer minimize
```
```  3948     print_atps   ~> sledgehammer available_atps
```
```  3949     INCOMPATIBILITY.
```
```  3950   - Added user's manual ("isabelle doc sledgehammer").
```
```  3951   - Added option syntax and "sledgehammer_params" to customize
```
```  3952     Sledgehammer's behavior.  See the manual for details.
```
```  3953   - Modified the Isar proof reconstruction code so that it produces
```
```  3954     direct proofs rather than proofs by contradiction.  (This feature
```
```  3955     is still experimental.)
```
```  3956   - Made Isar proof reconstruction work for SPASS, remote ATPs, and in
```
```  3957     full-typed mode.
```
```  3958   - Added support for TPTP syntax for SPASS via the "spass_tptp" ATP.
```
```  3959
```
```  3960 * Nitpick:
```
```  3961   - Added and implemented "binary_ints" and "bits" options.
```
```  3962   - Added "std" option and implemented support for nonstandard models.
```
```  3963   - Added and implemented "finitize" option to improve the precision
```
```  3964     of infinite datatypes based on a monotonicity analysis.
```
```  3965   - Added support for quotient types.
```
```  3966   - Added support for "specification" and "ax_specification"
```
```  3967     constructs.
```
```  3968   - Added support for local definitions (for "function" and
```
```  3969     "termination" proofs).
```
```  3970   - Added support for term postprocessors.
```
```  3971   - Optimized "Multiset.multiset" and "FinFun.finfun".
```
```  3972   - Improved efficiency of "destroy_constrs" optimization.
```
```  3973   - Fixed soundness bugs related to "destroy_constrs" optimization and
```
```  3974     record getters.
```
```  3975   - Fixed soundness bug related to higher-order constructors.
```
```  3976   - Fixed soundness bug when "full_descrs" is enabled.
```
```  3977   - Improved precision of set constructs.
```
```  3978   - Added "atoms" option.
```
```  3979   - Added cache to speed up repeated Kodkod invocations on the same
```
```  3980     problems.
```
```  3981   - Renamed "MiniSatJNI", "zChaffJNI", "BerkMinAlloy", and
```
```  3982     "SAT4JLight" to "MiniSat_JNI", "zChaff_JNI", "BerkMin_Alloy", and
```
```  3983     "SAT4J_Light".  INCOMPATIBILITY.
```
```  3984   - Removed "skolemize", "uncurry", "sym_break", "flatten_prop",
```
```  3985     "sharing_depth", and "show_skolems" options.  INCOMPATIBILITY.
```
```  3986   - Removed "nitpick_intro" attribute.  INCOMPATIBILITY.
```
```  3987
```
```  3988 * Method "induct" now takes instantiations of the form t, where t is not
```
```  3989   a variable, as a shorthand for "x == t", where x is a fresh variable.
```
```  3990   If this is not intended, t has to be enclosed in parentheses.
```
```  3991   By default, the equalities generated by definitional instantiations
```
```  3992   are pre-simplified, which may cause parameters of inductive cases
```
```  3993   to disappear, or may even delete some of the inductive cases.
```
```  3994   Use "induct (no_simp)" instead of "induct" to restore the old
```
```  3995   behaviour. The (no_simp) option is also understood by the "cases"
```
```  3996   and "nominal_induct" methods, which now perform pre-simplification, too.
```
```  3997   INCOMPATIBILITY.
```
```  3998
```
```  3999
```
```  4000 *** HOLCF ***
```
```  4001
```
```  4002 * Variable names in lemmas generated by the domain package have
```
```  4003 changed; the naming scheme is now consistent with the HOL datatype
```
```  4004 package.  Some proof scripts may be affected, INCOMPATIBILITY.
```
```  4005
```
```  4006 * The domain package no longer defines the function "foo_copy" for
```
```  4007 recursive domain "foo".  The reach lemma is now stated directly in
```
```  4008 terms of "foo_take".  Lemmas and proofs that mention "foo_copy" must
```
```  4009 be reformulated in terms of "foo_take", INCOMPATIBILITY.
```
```  4010
```
```  4011 * Most definedness lemmas generated by the domain package (previously
```
```  4012 of the form "x ~= UU ==> foo\$x ~= UU") now have an if-and-only-if form
```
```  4013 like "foo\$x = UU <-> x = UU", which works better as a simp rule.
```
```  4014 Proofs that used definedness lemmas as intro rules may break,
```
```  4015 potential INCOMPATIBILITY.
```
```  4016
```
```  4017 * Induction and casedist rules generated by the domain package now
```
```  4018 declare proper case_names (one called "bottom", and one named for each
```
```  4019 constructor).  INCOMPATIBILITY.
```
```  4020
```
```  4021 * For mutually-recursive domains, separate "reach" and "take_lemma"
```
```  4022 rules are generated for each domain, INCOMPATIBILITY.
```
```  4023
```
```  4024   foo_bar.reach       ~> foo.reach  bar.reach
```
```  4025   foo_bar.take_lemmas ~> foo.take_lemma  bar.take_lemma
```
```  4026
```
```  4027 * Some lemmas generated by the domain package have been renamed for
```
```  4028 consistency with the datatype package, INCOMPATIBILITY.
```
```  4029
```
```  4030   foo.ind        ~> foo.induct
```
```  4031   foo.finite_ind ~> foo.finite_induct
```
```  4032   foo.coind      ~> foo.coinduct
```
```  4033   foo.casedist   ~> foo.exhaust
```
```  4034   foo.exhaust    ~> foo.nchotomy
```
```  4035
```
```  4036 * For consistency with other definition packages, the fixrec package
```
```  4037 now generates qualified theorem names, INCOMPATIBILITY.
```
```  4038
```
```  4039   foo_simps  ~> foo.simps
```
```  4040   foo_unfold ~> foo.unfold
```
```  4041   foo_induct ~> foo.induct
```
```  4042
```
```  4043 * The "fixrec_simp" attribute has been removed.  The "fixrec_simp"
```
```  4044 method and internal fixrec proofs now use the default simpset instead.
```
```  4045 INCOMPATIBILITY.
```
```  4046
```
```  4047 * The "contlub" predicate has been removed.  Proof scripts should use
```
```  4048 lemma contI2 in place of monocontlub2cont, INCOMPATIBILITY.
```
```  4049
```
```  4050 * The "admw" predicate has been removed, INCOMPATIBILITY.
```
```  4051
```
```  4052 * The constants cpair, cfst, and csnd have been removed in favor of
```
```  4053 Pair, fst, and snd from Isabelle/HOL, INCOMPATIBILITY.
```
```  4054
```
```  4055
```
```  4056 *** ML ***
```
```  4057
```
```  4058 * Antiquotations for basic formal entities:
```
```  4059
```
```  4060     @{class NAME}         -- type class
```
```  4061     @{class_syntax NAME}  -- syntax representation of the above
```
```  4062
```
```  4063     @{type_name NAME}     -- logical type
```
```  4064     @{type_abbrev NAME}   -- type abbreviation
```
```  4065     @{nonterminal NAME}   -- type of concrete syntactic category
```
```  4066     @{type_syntax NAME}   -- syntax representation of any of the above
```
```  4067
```
```  4068     @{const_name NAME}    -- logical constant (INCOMPATIBILITY)
```
```  4069     @{const_abbrev NAME}  -- abbreviated constant
```
```  4070     @{const_syntax NAME}  -- syntax representation of any of the above
```
```  4071
```
```  4072 * Antiquotation @{syntax_const NAME} ensures that NAME refers to a raw
```
```  4073 syntax constant (cf. 'syntax' command).
```
```  4074
```
```  4075 * Antiquotation @{make_string} inlines a function to print arbitrary
```
```  4076 values similar to the ML toplevel.  The result is compiler dependent
```
```  4077 and may fall back on "?" in certain situations.
```
```  4078
```
```  4079 * Diagnostic commands 'ML_val' and 'ML_command' may refer to
```
```  4080 antiquotations @{Isar.state} and @{Isar.goal}.  This replaces impure
```
```  4081 Isar.state() and Isar.goal(), which belong to the old TTY loop and do
```
```  4082 not work with the asynchronous Isar document model.
```
```  4083
```
```  4084 * Configuration options now admit dynamic default values, depending on
```
```  4085 the context or even global references.
```
```  4086
```
```  4087 * SHA1.digest digests strings according to SHA-1 (see RFC 3174).  It
```
```  4088 uses an efficient external library if available (for Poly/ML).
```
```  4089
```
```  4090 * Renamed some important ML structures, while keeping the old names
```
```  4091 for some time as aliases within the structure Legacy:
```
```  4092
```
```  4093   OuterKeyword  ~>  Keyword
```
```  4094   OuterLex      ~>  Token
```
```  4095   OuterParse    ~>  Parse
```
```  4096   OuterSyntax   ~>  Outer_Syntax
```
```  4097   PrintMode     ~>  Print_Mode
```
```  4098   SpecParse     ~>  Parse_Spec
```
```  4099   ThyInfo       ~>  Thy_Info
```
```  4100   ThyLoad       ~>  Thy_Load
```
```  4101   ThyOutput     ~>  Thy_Output
```
```  4102   TypeInfer     ~>  Type_Infer
```
```  4103
```
```  4104 Note that "open Legacy" simplifies porting of sources, but forgetting
```
```  4105 to remove it again will complicate porting again in the future.
```
```  4106
```
```  4107 * Most operations that refer to a global context are named
```
```  4108 accordingly, e.g. Simplifier.global_context or
```
```  4109 ProofContext.init_global.  There are some situations where a global
```
```  4110 context actually works, but under normal circumstances one needs to
```
```  4111 pass the proper local context through the code!
```
```  4112
```
```  4113 * Discontinued old TheoryDataFun with its copy/init operation -- data
```
```  4114 needs to be pure.  Functor Theory_Data_PP retains the traditional
```
```  4115 Pretty.pp argument to merge, which is absent in the standard
```
```  4116 Theory_Data version.
```
```  4117
```
```  4118 * Sorts.certify_sort and derived "cert" operations for types and terms
```
```  4119 no longer minimize sorts.  Thus certification at the boundary of the
```
```  4120 inference kernel becomes invariant under addition of class relations,
```
```  4121 which is an important monotonicity principle.  Sorts are now minimized
```
```  4122 in the syntax layer only, at the boundary between the end-user and the
```
```  4123 system.  Subtle INCOMPATIBILITY, may have to use Sign.minimize_sort
```
```  4124 explicitly in rare situations.
```
```  4125
```
```  4126 * Renamed old-style Drule.standard to Drule.export_without_context, to
```
```  4127 emphasize that this is in no way a standard operation.
```
```  4128 INCOMPATIBILITY.
```
```  4129
```
```  4130 * Subgoal.FOCUS (and variants): resulting goal state is normalized as
```
```  4131 usual for resolution.  Rare INCOMPATIBILITY.
```
```  4132
```
```  4133 * Renamed varify/unvarify operations to varify_global/unvarify_global
```
```  4134 to emphasize that these only work in a global situation (which is
```
```  4135 quite rare).
```
```  4136
```
```  4137 * Curried take and drop in library.ML; negative length is interpreted
```
```  4138 as infinity (as in chop).  Subtle INCOMPATIBILITY.
```
```  4139
```
```  4140 * Proof terms: type substitutions on proof constants now use canonical
```
```  4141 order of type variables.  INCOMPATIBILITY for tools working with proof
```
```  4142 terms.
```
```  4143
```
```  4144 * Raw axioms/defs may no longer carry sort constraints, and raw defs
```
```  4145 may no longer carry premises.  User-level specifications are
```
```  4146 transformed accordingly by Thm.add_axiom/add_def.
```
```  4147
```
```  4148
```
```  4149 *** System ***
```
```  4150
```
```  4151 * Discontinued special HOL_USEDIR_OPTIONS for the main HOL image;
```
```  4152 ISABELLE_USEDIR_OPTIONS applies uniformly to all sessions.  Note that
```
```  4153 proof terms are enabled unconditionally in the new HOL-Proofs image.
```
```  4154
```
```  4155 * Discontinued old ISABELLE and ISATOOL environment settings (legacy
```
```  4156 feature since Isabelle2009).  Use ISABELLE_PROCESS and ISABELLE_TOOL,
```
```  4157 respectively.
```
```  4158
```
```  4159 * Old lib/scripts/polyml-platform is superseded by the
```
```  4160 ISABELLE_PLATFORM setting variable, which defaults to the 32 bit
```
```  4161 variant, even on a 64 bit machine.  The following example setting
```
```  4162 prefers 64 bit if available:
```
```  4163
```
```  4164   ML_PLATFORM="\${ISABELLE_PLATFORM64:-\$ISABELLE_PLATFORM}"
```
```  4165
```
```  4166 * The preliminary Isabelle/jEdit application demonstrates the emerging
```
```  4167 Isabelle/Scala layer for advanced prover interaction and integration.
```
```  4168 See src/Tools/jEdit or "isabelle jedit" provided by the properly built
```
```  4169 component.
```
```  4170
```
```  4171 * "IsabelleText" is a Unicode font derived from Bitstream Vera Mono
```
```  4172 and Bluesky TeX fonts.  It provides the usual Isabelle symbols,
```
```  4173 similar to the default assignment of the document preparation system
```
```  4174 (cf. isabellesym.sty).  The Isabelle/Scala class Isabelle_System
```
```  4175 provides some operations for direct access to the font without asking
```
```  4176 the user for manual installation.
```
```  4177
```
```  4178
```
```  4179
```
```  4180 New in Isabelle2009-1 (December 2009)
```
```  4181 -------------------------------------
```
```  4182
```
```  4183 *** General ***
```
```  4184
```
```  4185 * Discontinued old form of "escaped symbols" such as \\<forall>.  Only
```
```  4186 one backslash should be used, even in ML sources.
```
```  4187
```
```  4188
```
```  4189 *** Pure ***
```
```  4190
```
```  4191 * Locale interpretation propagates mixins along the locale hierarchy.
```
```  4192 The currently only available mixins are the equations used to map
```
```  4193 local definitions to terms of the target domain of an interpretation.
```
```  4194
```
```  4195 * Reactivated diagnostic command 'print_interps'.  Use "print_interps
```
```  4196 loc" to print all interpretations of locale "loc" in the theory.
```
```  4197 Interpretations in proofs are not shown.
```
```  4198
```
```  4199 * Thoroughly revised locales tutorial.  New section on conditional
```
```  4200 interpretation.
```
```  4201
```
```  4202 * On instantiation of classes, remaining undefined class parameters
```
```  4203 are formally declared.  INCOMPATIBILITY.
```
```  4204
```
```  4205
```
```  4206 *** Document preparation ***
```
```  4207
```
```  4208 * New generalized style concept for printing terms: @{foo (style) ...}
```
```  4209 instead of @{foo_style style ...}  (old form is still retained for
```
```  4210 backward compatibility).  Styles can be also applied for
```
```  4211 antiquotations prop, term_type and typeof.
```
```  4212
```
```  4213
```
```  4214 *** HOL ***
```
```  4215
```
```  4216 * New proof method "smt" for a combination of first-order logic with
```
```  4217 equality, linear and nonlinear (natural/integer/real) arithmetic, and
```
```  4218 fixed-size bitvectors; there is also basic support for higher-order
```
```  4219 features (esp. lambda abstractions).  It is an incomplete decision
```
```  4220 procedure based on external SMT solvers using the oracle mechanism;
```
```  4221 for the SMT solver Z3, this method is proof-producing.  Certificates
```
```  4222 are provided to avoid calling the external solvers solely for
```
```  4223 re-checking proofs.  Due to a remote SMT service there is no need for
```
```  4224 installing SMT solvers locally.  See src/HOL/SMT.
```
```  4225
```
```  4226 * New commands to load and prove verification conditions generated by
```
```  4227 the Boogie program verifier or derived systems (e.g. the Verifying C
```
```  4228 Compiler (VCC) or Spec#).  See src/HOL/Boogie.
```
```  4229
```
```  4230 * New counterexample generator tool 'nitpick' based on the Kodkod
```
```  4231 relational model finder.  See src/HOL/Tools/Nitpick and
```
```  4232 src/HOL/Nitpick_Examples.
```
```  4233
```
```  4234 * New commands 'code_pred' and 'values' to invoke the predicate
```
```  4235 compiler and to enumerate values of inductive predicates.
```
```  4236
```
```  4237 * A tabled implementation of the reflexive transitive closure.
```
```  4238
```
```  4239 * New implementation of quickcheck uses generic code generator;
```
```  4240 default generators are provided for all suitable HOL types, records
```
```  4241 and datatypes.  Old quickcheck can be re-activated importing theory
```
```  4242 Library/SML_Quickcheck.
```
```  4243
```
```  4244 * New testing tool Mirabelle for automated proof tools.  Applies
```
```  4245 several tools and tactics like sledgehammer, metis, or quickcheck, to
```
```  4246 every proof step in a theory.  To be used in batch mode via the
```
```  4247 "mirabelle" utility.
```
```  4248
```
```  4249 * New proof method "sos" (sum of squares) for nonlinear real
```
```  4250 arithmetic (originally due to John Harison). It requires theory
```
```  4251 Library/Sum_Of_Squares.  It is not a complete decision procedure but
```
```  4252 works well in practice on quantifier-free real arithmetic with +, -,
```
```  4253 *, ^, =, <= and <, i.e. boolean combinations of equalities and
```
```  4254 inequalities between polynomials.  It makes use of external
```
```  4255 semidefinite programming solvers.  Method "sos" generates a
```
```  4256 certificate that can be pasted into the proof thus avoiding the need
```
```  4257 to call an external tool every time the proof is checked.  See
```
```  4258 src/HOL/Library/Sum_Of_Squares.
```
```  4259
```
```  4260 * New method "linarith" invokes existing linear arithmetic decision
```
```  4261 procedure only.
```
```  4262
```
```  4263 * New command 'atp_minimal' reduces result produced by Sledgehammer.
```
```  4264
```
```  4265 * New Sledgehammer option "Full Types" in Proof General settings menu.
```
```  4266 Causes full type information to be output to the ATPs.  This slows
```
```  4267 ATPs down considerably but eliminates a source of unsound "proofs"
```
```  4268 that fail later.
```
```  4269
```
```  4270 * New method "metisFT": A version of metis that uses full type
```
```  4271 information in order to avoid failures of proof reconstruction.
```
```  4272
```
```  4273 * New evaluator "approximate" approximates an real valued term using
```
```  4274 the same method as the approximation method.
```
```  4275
```
```  4276 * Method "approximate" now supports arithmetic expressions as
```
```  4277 boundaries of intervals and implements interval splitting and Taylor
```
```  4278 series expansion.
```
```  4279
```
```  4280 * ML antiquotation @{code_datatype} inserts definition of a datatype
```
```  4281 generated by the code generator; e.g. see src/HOL/Predicate.thy.
```
```  4282
```
```  4283 * New theory SupInf of the supremum and infimum operators for sets of
```
```  4284 reals.
```
```  4285
```
```  4286 * New theory Probability, which contains a development of measure
```
```  4287 theory, eventually leading to Lebesgue integration and probability.
```
```  4288
```
```  4289 * Extended Multivariate Analysis to include derivation and Brouwer's
```
```  4290 fixpoint theorem.
```
```  4291
```
```  4292 * Reorganization of number theory, INCOMPATIBILITY:
```
```  4293   - new number theory development for nat and int, in theories Divides
```
```  4294     and GCD as well as in new session Number_Theory
```
```  4295   - some constants and facts now suffixed with _nat and _int
```
```  4296     accordingly
```
```  4297   - former session NumberTheory now named Old_Number_Theory, including
```
```  4298     theories Legacy_GCD and Primes (prefer Number_Theory if possible)
```
```  4299   - moved theory Pocklington from src/HOL/Library to
```
```  4300     src/HOL/Old_Number_Theory
```
```  4301
```
```  4302 * Theory GCD includes functions Gcd/GCD and Lcm/LCM for the gcd and
```
```  4303 lcm of finite and infinite sets. It is shown that they form a complete
```
```  4304 lattice.
```
```  4305
```
```  4306 * Class semiring_div requires superclass no_zero_divisors and proof of
```
```  4307 div_mult_mult1; theorems div_mult_mult1, div_mult_mult2,
```
```  4308 div_mult_mult1_if, div_mult_mult1 and div_mult_mult2 have been
```
```  4309 generalized to class semiring_div, subsuming former theorems
```
```  4310 zdiv_zmult_zmult1, zdiv_zmult_zmult1_if, zdiv_zmult_zmult1 and
```
```  4311 zdiv_zmult_zmult2.  div_mult_mult1 is now [simp] by default.
```
```  4312 INCOMPATIBILITY.
```
```  4313
```
```  4314 * Refinements to lattice classes and sets:
```
```  4315   - less default intro/elim rules in locale variant, more default
```
```  4316     intro/elim rules in class variant: more uniformity
```
```  4317   - lemma ge_sup_conv renamed to le_sup_iff, in accordance with
```
```  4318     le_inf_iff
```
```  4319   - dropped lemma alias inf_ACI for inf_aci (same for sup_ACI and
```
```  4320     sup_aci)
```
```  4321   - renamed ACI to inf_sup_aci
```
```  4322   - new class "boolean_algebra"
```
```  4323   - class "complete_lattice" moved to separate theory
```
```  4324     "Complete_Lattice"; corresponding constants (and abbreviations)
```
```  4325     renamed and with authentic syntax:
```
```  4326     Set.Inf ~>    Complete_Lattice.Inf
```
```  4327     Set.Sup ~>    Complete_Lattice.Sup
```
```  4328     Set.INFI ~>   Complete_Lattice.INFI
```
```  4329     Set.SUPR ~>   Complete_Lattice.SUPR
```
```  4330     Set.Inter ~>  Complete_Lattice.Inter
```
```  4331     Set.Union ~>  Complete_Lattice.Union
```
```  4332     Set.INTER ~>  Complete_Lattice.INTER
```
```  4333     Set.UNION ~>  Complete_Lattice.UNION
```
```  4334   - authentic syntax for
```
```  4335     Set.Pow
```
```  4336     Set.image
```
```  4337   - mere abbreviations:
```
```  4338     Set.empty               (for bot)
```
```  4339     Set.UNIV                (for top)
```
```  4340     Set.inter               (for inf, formerly Set.Int)
```
```  4341     Set.union               (for sup, formerly Set.Un)
```
```  4342     Complete_Lattice.Inter  (for Inf)
```
```  4343     Complete_Lattice.Union  (for Sup)
```
```  4344     Complete_Lattice.INTER  (for INFI)
```
```  4345     Complete_Lattice.UNION  (for SUPR)
```
```  4346   - object-logic definitions as far as appropriate
```
```  4347
```
```  4348 INCOMPATIBILITY.  Care is required when theorems Int_subset_iff or
```
```  4349 Un_subset_iff are explicitly deleted as default simp rules; then also
```
```  4350 their lattice counterparts le_inf_iff and le_sup_iff have to be
```
```  4351 deleted to achieve the desired effect.
```
```  4352
```
```  4353 * Rules inf_absorb1, inf_absorb2, sup_absorb1, sup_absorb2 are no simp
```
```  4354 rules by default any longer; the same applies to min_max.inf_absorb1
```
```  4355 etc.  INCOMPATIBILITY.
```
```  4356
```
```  4357 * Rules sup_Int_eq and sup_Un_eq are no longer declared as
```
```  4358 pred_set_conv by default.  INCOMPATIBILITY.
```
```  4359
```
```  4360 * Power operations on relations and functions are now one dedicated
```
```  4361 constant "compow" with infix syntax "^^".  Power operation on
```
```  4362 multiplicative monoids retains syntax "^" and is now defined generic
```
```  4363 in class power.  INCOMPATIBILITY.
```
```  4364
```
```  4365 * Relation composition "R O S" now has a more standard argument order:
```
```  4366 "R O S = {(x, z). EX y. (x, y) : R & (y, z) : S}".  INCOMPATIBILITY,
```
```  4367 rewrite propositions with "S O R" --> "R O S". Proofs may occasionally
```
```  4368 break, since the O_assoc rule was not rewritten like this.  Fix using
```
```  4369 O_assoc[symmetric].  The same applies to the curried version "R OO S".
```
```  4370
```
```  4371 * Function "Inv" is renamed to "inv_into" and function "inv" is now an
```
```  4372 abbreviation for "inv_into UNIV".  Lemmas are renamed accordingly.
```
```  4373 INCOMPATIBILITY.
```
```  4374
```
```  4375 * Most rules produced by inductive and datatype package have mandatory
```
```  4376 prefixes.  INCOMPATIBILITY.
```
```  4377
```
```  4378 * Changed "DERIV_intros" to a dynamic fact, which can be augmented by
```
```  4379 the attribute of the same name.  Each of the theorems in the list
```
```  4380 DERIV_intros assumes composition with an additional function and
```
```  4381 matches a variable to the derivative, which has to be solved by the
```
```  4382 Simplifier.  Hence (auto intro!: DERIV_intros) computes the derivative
```
```  4383 of most elementary terms.  Former Maclauren.DERIV_tac and
```
```  4384 Maclauren.deriv_tac should be replaced by (auto intro!: DERIV_intros).
```
```  4385 INCOMPATIBILITY.
```
```  4386
```
```  4387 * Code generator attributes follow the usual underscore convention:
```
```  4388     code_unfold     replaces    code unfold
```
```  4389     code_post       replaces    code post
```
```  4390     etc.
```
```  4391   INCOMPATIBILITY.
```
```  4392
```
```  4393 * Renamed methods:
```
```  4394     sizechange -> size_change
```
```  4395     induct_scheme -> induction_schema
```
```  4396   INCOMPATIBILITY.
```
```  4397
```
```  4398 * Discontinued abbreviation "arbitrary" of constant "undefined".
```
```  4399 INCOMPATIBILITY, use "undefined" directly.
```
```  4400
```
```  4401 * Renamed theorems:
```
```  4402     Suc_eq_add_numeral_1 -> Suc_eq_plus1
```
```  4403     Suc_eq_add_numeral_1_left -> Suc_eq_plus1_left
```
```  4404     Suc_plus1 -> Suc_eq_plus1
```
```  4405     *anti_sym -> *antisym*
```
```  4406     vector_less_eq_def -> vector_le_def
```
```  4407   INCOMPATIBILITY.
```
```  4408
```
```  4409 * Added theorem List.map_map as [simp].  Removed List.map_compose.
```
```  4410 INCOMPATIBILITY.
```
```  4411
```
```  4412 * Removed predicate "M hassize n" (<--> card M = n & finite M).
```
```  4413 INCOMPATIBILITY.
```
```  4414
```
```  4415
```
```  4416 *** HOLCF ***
```
```  4417
```
```  4418 * Theory Representable defines a class "rep" of domains that are
```
```  4419 representable (via an ep-pair) in the universal domain type "udom".
```
```  4420 Instances are provided for all type constructors defined in HOLCF.
```
```  4421
```
```  4422 * The 'new_domain' command is a purely definitional version of the
```
```  4423 domain package, for representable domains.  Syntax is identical to the
```
```  4424 old domain package.  The 'new_domain' package also supports indirect
```
```  4425 recursion using previously-defined type constructors.  See
```
```  4426 src/HOLCF/ex/New_Domain.thy for examples.
```
```  4427
```
```  4428 * Method "fixrec_simp" unfolds one step of a fixrec-defined constant
```
```  4429 on the left-hand side of an equation, and then performs
```
```  4430 simplification.  Rewriting is done using rules declared with the
```
```  4431 "fixrec_simp" attribute.  The "fixrec_simp" method is intended as a
```
```  4432 replacement for "fixpat"; see src/HOLCF/ex/Fixrec_ex.thy for examples.
```
```  4433
```
```  4434 * The pattern-match compiler in 'fixrec' can now handle constructors
```
```  4435 with HOL function types.  Pattern-match combinators for the Pair
```
```  4436 constructor are pre-configured.
```
```  4437
```
```  4438 * The 'fixrec' package now produces better fixed-point induction rules
```
```  4439 for mutually-recursive definitions:  Induction rules have conclusions
```
```  4440 of the form "P foo bar" instead of "P <foo, bar>".
```
```  4441
```
```  4442 * The constant "sq_le" (with infix syntax "<<" or "\<sqsubseteq>") has
```
```  4443 been renamed to "below".  The name "below" now replaces "less" in many
```
```  4444 theorem names.  (Legacy theorem names using "less" are still supported
```
```  4445 as well.)
```
```  4446
```
```  4447 * The 'fixrec' package now supports "bottom patterns".  Bottom
```
```  4448 patterns can be used to generate strictness rules, or to make
```
```  4449 functions more strict (much like the bang-patterns supported by the
```
```  4450 Glasgow Haskell Compiler).  See src/HOLCF/ex/Fixrec_ex.thy for
```
```  4451 examples.
```
```  4452
```
```  4453
```
```  4454 *** ML ***
```
```  4455
```
```  4456 * Support for Poly/ML 5.3.0, with improved reporting of compiler
```
```  4457 errors and run-time exceptions, including detailed source positions.
```
```  4458
```
```  4459 * Structure Name_Space (formerly NameSpace) now manages uniquely
```
```  4460 identified entries, with some additional information such as source
```
```  4461 position, logical grouping etc.
```
```  4462
```
```  4463 * Theory and context data is now introduced by the simplified and
```
```  4464 modernized functors Theory_Data, Proof_Data, Generic_Data.  Data needs
```
```  4465 to be pure, but the old TheoryDataFun for mutable data (with explicit
```
```  4466 copy operation) is still available for some time.
```
```  4467
```
```  4468 * Structure Synchronized (cf. src/Pure/Concurrent/synchronized.ML)
```
```  4469 provides a high-level programming interface to synchronized state
```
```  4470 variables with atomic update.  This works via pure function
```
```  4471 application within a critical section -- its runtime should be as
```
```  4472 short as possible; beware of deadlocks if critical code is nested,
```
```  4473 either directly or indirectly via other synchronized variables!
```
```  4474
```
```  4475 * Structure Unsynchronized (cf. src/Pure/ML-Systems/unsynchronized.ML)
```
```  4476 wraps raw ML references, explicitly indicating their non-thread-safe
```
```  4477 behaviour.  The Isar toplevel keeps this structure open, to
```
```  4478 accommodate Proof General as well as quick and dirty interactive
```
```  4479 experiments with references.
```
```  4480
```
```  4481 * PARALLEL_CHOICE and PARALLEL_GOALS provide basic support for
```
```  4482 parallel tactical reasoning.
```
```  4483
```
```  4484 * Tacticals Subgoal.FOCUS, Subgoal.FOCUS_PREMS, Subgoal.FOCUS_PARAMS
```
```  4485 are similar to SUBPROOF, but are slightly more flexible: only the
```
```  4486 specified parts of the subgoal are imported into the context, and the
```
```  4487 body tactic may introduce new subgoals and schematic variables.
```
```  4488
```
```  4489 * Old tactical METAHYPS, which does not observe the proof context, has
```
```  4490 been renamed to Old_Goals.METAHYPS and awaits deletion.  Use SUBPROOF
```
```  4491 or Subgoal.FOCUS etc.
```
```  4492
```
```  4493 * Renamed functor TableFun to Table, and GraphFun to Graph.  (Since
```
```  4494 functors have their own ML name space there is no point to mark them
```
```  4495 separately.)  Minor INCOMPATIBILITY.
```
```  4496
```
```  4497 * Renamed NamedThmsFun to Named_Thms.  INCOMPATIBILITY.
```
```  4498
```
```  4499 * Renamed several structures FooBar to Foo_Bar.  Occasional,
```
```  4500 INCOMPATIBILITY.
```
```  4501
```
```  4502 * Operations of structure Skip_Proof no longer require quick_and_dirty
```
```  4503 mode, which avoids critical setmp.
```
```  4504
```
```  4505 * Eliminated old Attrib.add_attributes, Method.add_methods and related
```
```  4506 combinators for "args".  INCOMPATIBILITY, need to use simplified
```
```  4507 Attrib/Method.setup introduced in Isabelle2009.
```
```  4508
```
```  4509 * Proper context for simpset_of, claset_of, clasimpset_of.  May fall
```
```  4510 back on global_simpset_of, global_claset_of, global_clasimpset_of as
```
```  4511 last resort.  INCOMPATIBILITY.
```
```  4512
```
```  4513 * Display.pretty_thm now requires a proper context (cf. former
```
```  4514 ProofContext.pretty_thm).  May fall back on Display.pretty_thm_global
```
```  4515 or even Display.pretty_thm_without_context as last resort.
```
```  4516 INCOMPATIBILITY.
```
```  4517
```
```  4518 * Discontinued Display.pretty_ctyp/cterm etc.  INCOMPATIBILITY, use
```
```  4519 Syntax.pretty_typ/term directly, preferably with proper context
```
```  4520 instead of global theory.
```
```  4521
```
```  4522
```
```  4523 *** System ***
```
```  4524
```
```  4525 * Further fine tuning of parallel proof checking, scales up to 8 cores
```
```  4526 (max. speedup factor 5.0).  See also Goal.parallel_proofs in ML and
```
```  4527 usedir option -q.
```
```  4528
```
```  4529 * Support for additional "Isabelle components" via etc/components, see
```
```  4530 also the system manual.
```
```  4531
```
```  4532 * The isabelle makeall tool now operates on all components with
```
```  4533 IsaMakefile, not just hardwired "logics".
```
```  4534
```
```  4535 * Removed "compress" option from isabelle-process and isabelle usedir;
```
```  4536 this is always enabled.
```
```  4537
```
```  4538 * Discontinued support for Poly/ML 4.x versions.
```
```  4539
```
```  4540 * Isabelle tool "wwwfind" provides web interface for 'find_theorems'
```
```  4541 on a given logic image.  This requires the lighttpd webserver and is
```
```  4542 currently supported on Linux only.
```
```  4543
```
```  4544
```
```  4545
```
```  4546 New in Isabelle2009 (April 2009)
```
```  4547 --------------------------------
```
```  4548
```
```  4549 *** General ***
```
```  4550
```
```  4551 * Simplified main Isabelle executables, with less surprises on
```
```  4552 case-insensitive file-systems (such as Mac OS).
```
```  4553
```
```  4554   - The main Isabelle tool wrapper is now called "isabelle" instead of
```
```  4555     "isatool."
```
```  4556
```
```  4557   - The former "isabelle" alias for "isabelle-process" has been
```
```  4558     removed (should rarely occur to regular users).
```
```  4559
```
```  4560   - The former "isabelle-interface" and its alias "Isabelle" have been
```
```  4561     removed (interfaces are now regular Isabelle tools).
```
```  4562
```
```  4563 Within scripts and make files, the Isabelle environment variables
```
```  4564 ISABELLE_TOOL and ISABELLE_PROCESS replace old ISATOOL and ISABELLE,
```
```  4565 respectively.  (The latter are still available as legacy feature.)
```
```  4566
```
```  4567 The old isabelle-interface wrapper could react in confusing ways if
```
```  4568 the interface was uninstalled or changed otherwise.  Individual
```
```  4569 interface tool configuration is now more explicit, see also the
```
```  4570 Isabelle system manual.  In particular, Proof General is now available
```
```  4571 via "isabelle emacs".
```
```  4572
```
```  4573 INCOMPATIBILITY, need to adapt derivative scripts.  Users may need to
```
```  4574 purge installed copies of Isabelle executables and re-run "isabelle
```
```  4575 install -p ...", or use symlinks.
```
```  4576
```
```  4577 * The default for ISABELLE_HOME_USER is now ~/.isabelle instead of the
```
```  4578 old ~/isabelle, which was slightly non-standard and apt to cause
```
```  4579 surprises on case-insensitive file-systems (such as Mac OS).
```
```  4580
```
```  4581 INCOMPATIBILITY, need to move existing ~/isabelle/etc,
```
```  4582 ~/isabelle/heaps, ~/isabelle/browser_info to the new place.  Special
```
```  4583 care is required when using older releases of Isabelle.  Note that
```
```  4584 ISABELLE_HOME_USER can be changed in Isabelle/etc/settings of any
```
```  4585 Isabelle distribution, in order to use the new ~/.isabelle uniformly.
```
```  4586
```
```  4587 * Proofs of fully specified statements are run in parallel on
```
```  4588 multi-core systems.  A speedup factor of 2.5 to 3.2 can be expected on
```
```  4589 a regular 4-core machine, if the initial heap space is made reasonably
```
```  4590 large (cf. Poly/ML option -H).  (Requires Poly/ML 5.2.1 or later.)
```
```  4591
```
```  4592 * The main reference manuals ("isar-ref", "implementation", and
```
```  4593 "system") have been updated and extended.  Formally checked references
```
```  4594 as hyperlinks are now available uniformly.
```
```  4595
```
```  4596
```
```  4597 *** Pure ***
```
```  4598
```
```  4599 * Complete re-implementation of locales.  INCOMPATIBILITY in several
```
```  4600 respects.  The most important changes are listed below.  See the
```
```  4601 Tutorial on Locales ("locales" manual) for details.
```
```  4602
```
```  4603 - In locale expressions, instantiation replaces renaming.  Parameters
```
```  4604 must be declared in a for clause.  To aid compatibility with previous
```
```  4605 parameter inheritance, in locale declarations, parameters that are not
```
```  4606 'touched' (instantiation position "_" or omitted) are implicitly added
```
```  4607 with their syntax at the beginning of the for clause.
```
```  4608
```
```  4609 - Syntax from abbreviations and definitions in locales is available in
```
```  4610 locale expressions and context elements.  The latter is particularly
```
```  4611 useful in locale declarations.
```
```  4612
```
```  4613 - More flexible mechanisms to qualify names generated by locale
```
```  4614 expressions.  Qualifiers (prefixes) may be specified in locale
```
```  4615 expressions, and can be marked as mandatory (syntax: "name!:") or
```
```  4616 optional (syntax "name?:").  The default depends for plain "name:"
```
```  4617 depends on the situation where a locale expression is used: in
```
```  4618 commands 'locale' and 'sublocale' prefixes are optional, in
```
```  4619 'interpretation' and 'interpret' prefixes are mandatory.  The old
```
```  4620 implicit qualifiers derived from the parameter names of a locale are
```
```  4621 no longer generated.
```
```  4622
```
```  4623 - Command "sublocale l < e" replaces "interpretation l < e".  The
```
```  4624 instantiation clause in "interpretation" and "interpret" (square
```
```  4625 brackets) is no longer available.  Use locale expressions.
```
```  4626
```
```  4627 - When converting proof scripts, mandatory qualifiers in
```
```  4628 'interpretation' and 'interpret' should be retained by default, even
```
```  4629 if this is an INCOMPATIBILITY compared to former behavior.  In the
```
```  4630 worst case, use the "name?:" form for non-mandatory ones.  Qualifiers
```
```  4631 in locale expressions range over a single locale instance only.
```
```  4632
```
```  4633 - Dropped locale element "includes".  This is a major INCOMPATIBILITY.
```
```  4634 In existing theorem specifications replace the includes element by the
```
```  4635 respective context elements of the included locale, omitting those
```
```  4636 that are already present in the theorem specification.  Multiple
```
```  4637 assume elements of a locale should be replaced by a single one
```
```  4638 involving the locale predicate.  In the proof body, declarations (most
```
```  4639 notably theorems) may be regained by interpreting the respective
```
```  4640 locales in the proof context as required (command "interpret").
```
```  4641
```
```  4642 If using "includes" in replacement of a target solely because the
```
```  4643 parameter types in the theorem are not as general as in the target,
```
```  4644 consider declaring a new locale with additional type constraints on
```
```  4645 the parameters (context element "constrains").
```
```  4646
```
```  4647 - Discontinued "locale (open)".  INCOMPATIBILITY.
```
```  4648
```
```  4649 - Locale interpretation commands no longer attempt to simplify goal.
```
```  4650 INCOMPATIBILITY: in rare situations the generated goal differs.  Use
```
```  4651 methods intro_locales and unfold_locales to clarify.
```
```  4652
```
```  4653 - Locale interpretation commands no longer accept interpretation
```
```  4654 attributes.  INCOMPATIBILITY.
```
```  4655
```
```  4656 * Class declaration: so-called "base sort" must not be given in import
```
```  4657 list any longer, but is inferred from the specification.  Particularly
```
```  4658 in HOL, write
```
```  4659
```
```  4660     class foo = ...
```
```  4661
```
```  4662 instead of
```
```  4663
```
```  4664     class foo = type + ...
```
```  4665
```
```  4666 * Class target: global versions of theorems stemming do not carry a
```
```  4667 parameter prefix any longer.  INCOMPATIBILITY.
```
```  4668
```
```  4669 * Class 'instance' command no longer accepts attached definitions.
```
```  4670 INCOMPATIBILITY, use proper 'instantiation' target instead.
```
```  4671
```
```  4672 * Recovered hiding of consts, which was accidentally broken in
```
```  4673 Isabelle2007.  Potential INCOMPATIBILITY, ``hide const c'' really
```
```  4674 makes c inaccessible; consider using ``hide (open) const c'' instead.
```
```  4675
```
```  4676 * Slightly more coherent Pure syntax, with updated documentation in
```
```  4677 isar-ref manual.  Removed locales meta_term_syntax and
```
```  4678 meta_conjunction_syntax: TERM and &&& (formerly &&) are now permanent,
```
```  4679 INCOMPATIBILITY in rare situations.  Note that &&& should not be used
```
```  4680 directly in regular applications.
```
```  4681
```
```  4682 * There is a new syntactic category "float_const" for signed decimal
```
```  4683 fractions (e.g. 123.45 or -123.45).
```
```  4684
```
```  4685 * Removed exotic 'token_translation' command.  INCOMPATIBILITY, use ML
```
```  4686 interface with 'setup' command instead.
```
```  4687
```
```  4688 * Command 'local_setup' is similar to 'setup', but operates on a local
```
```  4689 theory context.
```
```  4690
```
```  4691 * The 'axiomatization' command now only works within a global theory
```
```  4692 context.  INCOMPATIBILITY.
```
```  4693
```
```  4694 * Goal-directed proof now enforces strict proof irrelevance wrt. sort
```
```  4695 hypotheses.  Sorts required in the course of reasoning need to be
```
```  4696 covered by the constraints in the initial statement, completed by the
```
```  4697 type instance information of the background theory.  Non-trivial sort
```
```  4698 hypotheses, which rarely occur in practice, may be specified via
```
```  4699 vacuous propositions of the form SORT_CONSTRAINT('a::c).  For example:
```
```  4700
```
```  4701   lemma assumes "SORT_CONSTRAINT('a::empty)" shows False ...
```
```  4702
```
```  4703 The result contains an implicit sort hypotheses as before --
```
```  4704 SORT_CONSTRAINT premises are eliminated as part of the canonical rule
```
```  4705 normalization.
```
```  4706
```
```  4707 * Generalized Isar history, with support for linear undo, direct state
```
```  4708 addressing etc.
```
```  4709
```
```  4710 * Changed defaults for unify configuration options:
```
```  4711
```
```  4712   unify_trace_bound = 50 (formerly 25)
```
```  4713   unify_search_bound = 60 (formerly 30)
```
```  4714
```
```  4715 * Different bookkeeping for code equations (INCOMPATIBILITY):
```
```  4716
```
```  4717   a) On theory merge, the last set of code equations for a particular
```
```  4718      constant is taken (in accordance with the policy applied by other
```
```  4719      parts of the code generator framework).
```
```  4720
```
```  4721   b) Code equations stemming from explicit declarations (e.g. code
```
```  4722      attribute) gain priority over default code equations stemming
```
```  4723      from definition, primrec, fun etc.
```
```  4724
```
```  4725 * Keyword 'code_exception' now named 'code_abort'.  INCOMPATIBILITY.
```
```  4726
```
```  4727 * Unified theorem tables for both code generators.  Thus [code
```
```  4728 func] has disappeared and only [code] remains.  INCOMPATIBILITY.
```
```  4729
```
```  4730 * Command 'find_consts' searches for constants based on type and name
```
```  4731 patterns, e.g.
```
```  4732
```
```  4733     find_consts "_ => bool"
```
```  4734
```
```  4735 By default, matching is against subtypes, but it may be restricted to
```
```  4736 the whole type.  Searching by name is possible.  Multiple queries are
```
```  4737 conjunctive and queries may be negated by prefixing them with a
```
```  4738 hyphen:
```
```  4739
```
```  4740     find_consts strict: "_ => bool" name: "Int" -"int => int"
```
```  4741
```
```  4742 * New 'find_theorems' criterion "solves" matches theorems that
```
```  4743 directly solve the current goal (modulo higher-order unification).
```
```  4744
```
```  4745 * Auto solve feature for main theorem statements: whenever a new goal
```
```  4746 is stated, "find_theorems solves" is called; any theorems that could
```
```  4747 solve the lemma directly are listed as part of the goal state.
```
```  4748 Cf. associated options in Proof General Isabelle settings menu,
```
```  4749 enabled by default, with reasonable timeout for pathological cases of
```
```  4750 higher-order unification.
```
```  4751
```
```  4752
```
```  4753 *** Document preparation ***
```
```  4754
```
```  4755 * Antiquotation @{lemma} now imitates a regular terminal proof,
```
```  4756 demanding keyword 'by' and supporting the full method expression
```
```  4757 syntax just like the Isar command 'by'.
```
```  4758
```
```  4759
```
```  4760 *** HOL ***
```
```  4761
```
```  4762 * Integrated main parts of former image HOL-Complex with HOL.  Entry
```
```  4763 points Main and Complex_Main remain as before.
```
```  4764
```
```  4765 * Logic image HOL-Plain provides a minimal HOL with the most important
```
```  4766 tools available (inductive, datatype, primrec, ...).  This facilitates
```
```  4767 experimentation and tool development.  Note that user applications
```
```  4768 (and library theories) should never refer to anything below theory
```
```  4769 Main, as before.
```
```  4770
```
```  4771 * Logic image HOL-Main stops at theory Main, and thus facilitates
```
```  4772 experimentation due to shorter build times.
```
```  4773
```
```  4774 * Logic image HOL-NSA contains theories of nonstandard analysis which
```
```  4775 were previously part of former HOL-Complex.  Entry point Hyperreal
```
```  4776 remains valid, but theories formerly using Complex_Main should now use
```
```  4777 new entry point Hypercomplex.
```
```  4778
```
```  4779 * Generic ATP manager for Sledgehammer, based on ML threads instead of
```
```  4780 Posix processes.  Avoids potentially expensive forking of the ML
```
```  4781 process.  New thread-based implementation also works on non-Unix
```
```  4782 platforms (Cygwin).  Provers are no longer hardwired, but defined
```
```  4783 within the theory via plain ML wrapper functions.  Basic Sledgehammer
```
```  4784 commands are covered in the isar-ref manual.
```
```  4785
```
```  4786 * Wrapper scripts for remote SystemOnTPTP service allows to use
```
```  4787 sledgehammer without local ATP installation (Vampire etc.). Other
```
```  4788 provers may be included via suitable ML wrappers, see also
```
```  4789 src/HOL/ATP_Linkup.thy.
```
```  4790
```
```  4791 * ATP selection (E/Vampire/Spass) is now via Proof General's settings
```
```  4792 menu.
```
```  4793
```
```  4794 * The metis method no longer fails because the theorem is too trivial
```
```  4795 (contains the empty clause).
```
```  4796
```
```  4797 * The metis method now fails in the usual manner, rather than raising
```
```  4798 an exception, if it determines that it cannot prove the theorem.
```
```  4799
```
```  4800 * Method "coherent" implements a prover for coherent logic (see also
```
```  4801 src/Tools/coherent.ML).
```
```  4802
```
```  4803 * Constants "undefined" and "default" replace "arbitrary".  Usually
```
```  4804 "undefined" is the right choice to replace "arbitrary", though
```
```  4805 logically there is no difference.  INCOMPATIBILITY.
```
```  4806
```
```  4807 * Command "value" now integrates different evaluation mechanisms.  The
```
```  4808 result of the first successful evaluation mechanism is printed.  In
```
```  4809 square brackets a particular named evaluation mechanisms may be
```
```  4810 specified (currently, [SML], [code] or [nbe]).  See further
```
```  4811 src/HOL/ex/Eval_Examples.thy.
```
```  4812
```
```  4813 * Normalization by evaluation now allows non-leftlinear equations.
```
```  4814 Declare with attribute [code nbe].
```
```  4815
```
```  4816 * Methods "case_tac" and "induct_tac" now refer to the very same rules
```
```  4817 as the structured Isar versions "cases" and "induct", cf. the
```
```  4818 corresponding "cases" and "induct" attributes.  Mutual induction rules
```
```  4819 are now presented as a list of individual projections
```
```  4820 (e.g. foo_bar.inducts for types foo and bar); the old format with
```
```  4821 explicit HOL conjunction is no longer supported.  INCOMPATIBILITY, in
```
```  4822 rare situations a different rule is selected --- notably nested tuple
```
```  4823 elimination instead of former prod.exhaust: use explicit (case_tac t
```
```  4824 rule: prod.exhaust) here.
```
```  4825
```
```  4826 * Attributes "cases", "induct", "coinduct" support "del" option.
```
```  4827
```
```  4828 * Removed fact "case_split_thm", which duplicates "case_split".
```
```  4829
```
```  4830 * The option datatype has been moved to a new theory Option.  Renamed
```
```  4831 option_map to Option.map, and o2s to Option.set, INCOMPATIBILITY.
```
```  4832
```
```  4833 * New predicate "strict_mono" classifies strict functions on partial
```
```  4834 orders.  With strict functions on linear orders, reasoning about
```
```  4835 (in)equalities is facilitated by theorems "strict_mono_eq",
```
```  4836 "strict_mono_less_eq" and "strict_mono_less".
```
```  4837
```
```  4838 * Some set operations are now proper qualified constants with
```
```  4839 authentic syntax.  INCOMPATIBILITY:
```
```  4840
```
```  4841     op Int ~>   Set.Int
```
```  4842     op Un ~>    Set.Un
```
```  4843     INTER ~>    Set.INTER
```
```  4844     UNION ~>    Set.UNION
```
```  4845     Inter ~>    Set.Inter
```
```  4846     Union ~>    Set.Union
```
```  4847     {} ~>       Set.empty
```
```  4848     UNIV ~>     Set.UNIV
```
```  4849
```
```  4850 * Class complete_lattice with operations Inf, Sup, INFI, SUPR now in
```
```  4851 theory Set.
```
```  4852
```
```  4853 * Auxiliary class "itself" has disappeared -- classes without any
```
```  4854 parameter are treated as expected by the 'class' command.
```
```  4855
```
```  4856 * Leibnitz's Series for Pi and the arcus tangens and logarithm series.
```
```  4857
```
```  4858 * Common decision procedures (Cooper, MIR, Ferrack, Approximation,
```
```  4859 Dense_Linear_Order) are now in directory HOL/Decision_Procs.
```
```  4860
```
```  4861 * Theory src/HOL/Decision_Procs/Approximation provides the new proof
```
```  4862 method "approximation".  It proves formulas on real values by using
```
```  4863 interval arithmetic.  In the formulas are also the transcendental
```
```  4864 functions sin, cos, tan, atan, ln, exp and the constant pi are
```
```  4865 allowed. For examples see
```
```  4866 src/HOL/Descision_Procs/ex/Approximation_Ex.thy.
```
```  4867
```
```  4868 * Theory "Reflection" now resides in HOL/Library.
```
```  4869
```
```  4870 * Entry point to Word library now simply named "Word".
```
```  4871 INCOMPATIBILITY.
```
```  4872
```
```  4873 * Made source layout more coherent with logical distribution
```
```  4874 structure:
```
```  4875
```
```  4876     src/HOL/Library/RType.thy ~> src/HOL/Typerep.thy
```
```  4877     src/HOL/Library/Code_Message.thy ~> src/HOL/
```
```  4878     src/HOL/Library/GCD.thy ~> src/HOL/
```
```  4879     src/HOL/Library/Order_Relation.thy ~> src/HOL/
```
```  4880     src/HOL/Library/Parity.thy ~> src/HOL/
```
```  4881     src/HOL/Library/Univ_Poly.thy ~> src/HOL/
```
```  4882     src/HOL/Real/ContNotDenum.thy ~> src/HOL/Library/
```
```  4883     src/HOL/Real/Lubs.thy ~> src/HOL/
```
```  4884     src/HOL/Real/PReal.thy ~> src/HOL/
```
```  4885     src/HOL/Real/Rational.thy ~> src/HOL/
```
```  4886     src/HOL/Real/RComplete.thy ~> src/HOL/
```
```  4887     src/HOL/Real/RealDef.thy ~> src/HOL/
```
```  4888     src/HOL/Real/RealPow.thy ~> src/HOL/
```
```  4889     src/HOL/Real/Real.thy ~> src/HOL/
```
```  4890     src/HOL/Complex/Complex_Main.thy ~> src/HOL/
```
```  4891     src/HOL/Complex/Complex.thy ~> src/HOL/
```
```  4892     src/HOL/Complex/FrechetDeriv.thy ~> src/HOL/Library/
```
```  4893     src/HOL/Complex/Fundamental_Theorem_Algebra.thy ~> src/HOL/Library/
```
```  4894     src/HOL/Hyperreal/Deriv.thy ~> src/HOL/
```
```  4895     src/HOL/Hyperreal/Fact.thy ~> src/HOL/
```
```  4896     src/HOL/Hyperreal/Integration.thy ~> src/HOL/
```
```  4897     src/HOL/Hyperreal/Lim.thy ~> src/HOL/
```
```  4898     src/HOL/Hyperreal/Ln.thy ~> src/HOL/
```
```  4899     src/HOL/Hyperreal/Log.thy ~> src/HOL/
```
```  4900     src/HOL/Hyperreal/MacLaurin.thy ~> src/HOL/
```
```  4901     src/HOL/Hyperreal/NthRoot.thy ~> src/HOL/
```
```  4902     src/HOL/Hyperreal/Series.thy ~> src/HOL/
```
```  4903     src/HOL/Hyperreal/SEQ.thy ~> src/HOL/
```
```  4904     src/HOL/Hyperreal/Taylor.thy ~> src/HOL/
```
```  4905     src/HOL/Hyperreal/Transcendental.thy ~> src/HOL/
```
```  4906     src/HOL/Real/Float ~> src/HOL/Library/
```
```  4907     src/HOL/Real/HahnBanach ~> src/HOL/HahnBanach
```
```  4908     src/HOL/Real/RealVector.thy ~> src/HOL/
```
```  4909
```
```  4910     src/HOL/arith_data.ML ~> src/HOL/Tools
```
```  4911     src/HOL/hologic.ML ~> src/HOL/Tools
```
```  4912     src/HOL/simpdata.ML ~> src/HOL/Tools
```
```  4913     src/HOL/int_arith1.ML ~> src/HOL/Tools/int_arith.ML
```
```  4914     src/HOL/int_factor_simprocs.ML ~> src/HOL/Tools
```
```  4915     src/HOL/nat_simprocs.ML ~> src/HOL/Tools
```
```  4916     src/HOL/Real/float_arith.ML ~> src/HOL/Tools
```
```  4917     src/HOL/Real/float_syntax.ML ~> src/HOL/Tools
```
```  4918     src/HOL/Real/rat_arith.ML ~> src/HOL/Tools
```
```  4919     src/HOL/Real/real_arith.ML ~> src/HOL/Tools
```
```  4920
```
```  4921     src/HOL/Library/Array.thy ~> src/HOL/Imperative_HOL
```
```  4922     src/HOL/Library/Heap_Monad.thy ~> src/HOL/Imperative_HOL
```
```  4923     src/HOL/Library/Heap.thy ~> src/HOL/Imperative_HOL
```
```  4924     src/HOL/Library/Imperative_HOL.thy ~> src/HOL/Imperative_HOL
```
```  4925     src/HOL/Library/Ref.thy ~> src/HOL/Imperative_HOL
```
```  4926     src/HOL/Library/Relational.thy ~> src/HOL/Imperative_HOL
```
```  4927
```
```  4928 * If methods "eval" and "evaluation" encounter a structured proof
```
```  4929 state with !!/==>, only the conclusion is evaluated to True (if
```
```  4930 possible), avoiding strange error messages.
```
```  4931
```
```  4932 * Method "sizechange" automates termination proofs using (a
```
```  4933 modification of) the size-change principle.  Requires SAT solver.  See
```
```  4934 src/HOL/ex/Termination.thy for examples.
```
```  4935
```
```  4936 * Simplifier: simproc for let expressions now unfolds if bound
```
```  4937 variable occurs at most once in let expression body.  INCOMPATIBILITY.
```
```  4938
```
```  4939 * Method "arith": Linear arithmetic now ignores all inequalities when
```
```  4940 fast_arith_neq_limit is exceeded, instead of giving up entirely.
```
```  4941
```
```  4942 * New attribute "arith" for facts that should always be used
```
```  4943 automatically by arithmetic. It is intended to be used locally in
```
```  4944 proofs, e.g.
```
```  4945
```
```  4946   assumes [arith]: "x > 0"
```
```  4947
```
```  4948 Global usage is discouraged because of possible performance impact.
```
```  4949
```
```  4950 * New classes "top" and "bot" with corresponding operations "top" and
```
```  4951 "bot" in theory Orderings; instantiation of class "complete_lattice"
```
```  4952 requires instantiation of classes "top" and "bot".  INCOMPATIBILITY.
```
```  4953
```
```  4954 * Changed definition lemma "less_fun_def" in order to provide an
```
```  4955 instance for preorders on functions; use lemma "less_le" instead.
```
```  4956 INCOMPATIBILITY.
```
```  4957
```
```  4958 * Theory Orderings: class "wellorder" moved here, with explicit
```
```  4959 induction rule "less_induct" as assumption.  For instantiation of
```
```  4960 "wellorder" by means of predicate "wf", use rule wf_wellorderI.
```
```  4961 INCOMPATIBILITY.
```
```  4962
```
```  4963 * Theory Orderings: added class "preorder" as superclass of "order".
```
```  4964 INCOMPATIBILITY: Instantiation proofs for order, linorder
```
```  4965 etc. slightly changed.  Some theorems named order_class.* now named
```
```  4966 preorder_class.*.
```
```  4967
```
```  4968 * Theory Relation: renamed "refl" to "refl_on", "reflexive" to "refl,
```
```  4969 "diag" to "Id_on".
```
```  4970
```
```  4971 * Theory Finite_Set: added a new fold combinator of type
```
```  4972
```
```  4973   ('a => 'b => 'b) => 'b => 'a set => 'b
```
```  4974
```
```  4975 Occasionally this is more convenient than the old fold combinator
```
```  4976 which is now defined in terms of the new one and renamed to
```
```  4977 fold_image.
```
```  4978
```
```  4979 * Theories Ring_and_Field and OrderedGroup: The lemmas "group_simps"
```
```  4980 and "ring_simps" have been replaced by "algebra_simps" (which can be
```
```  4981 extended with further lemmas!).  At the moment both still exist but
```
```  4982 the former will disappear at some point.
```
```  4983
```
```  4984 * Theory Power: Lemma power_Suc is now declared as a simp rule in
```
```  4985 class recpower.  Type-specific simp rules for various recpower types
```
```  4986 have been removed.  INCOMPATIBILITY, rename old lemmas as follows:
```
```  4987
```
```  4988 rat_power_0    -> power_0
```
```  4989 rat_power_Suc  -> power_Suc
```
```  4990 realpow_0      -> power_0
```
```  4991 realpow_Suc    -> power_Suc
```
```  4992 complexpow_0   -> power_0
```
```  4993 complexpow_Suc -> power_Suc
```
```  4994 power_poly_0   -> power_0
```
```  4995 power_poly_Suc -> power_Suc
```
```  4996
```
```  4997 * Theories Ring_and_Field and Divides: Definition of "op dvd" has been
```
```  4998 moved to separate class dvd in Ring_and_Field; a couple of lemmas on
```
```  4999 dvd has been generalized to class comm_semiring_1.  Likewise a bunch
```
```  5000 of lemmas from Divides has been generalized from nat to class
```
```  5001 semiring_div.  INCOMPATIBILITY.  This involves the following theorem
```
```  5002 renames resulting from duplicate elimination:
```
```  5003
```
```  5004     dvd_def_mod ~>          dvd_eq_mod_eq_0
```
```  5005     zero_dvd_iff ~>         dvd_0_left_iff
```
```  5006     dvd_0 ~>                dvd_0_right
```
```  5007     DIVISION_BY_ZERO_DIV ~> div_by_0
```
```  5008     DIVISION_BY_ZERO_MOD ~> mod_by_0
```
```  5009     mult_div ~>             div_mult_self2_is_id
```
```  5010     mult_mod ~>             mod_mult_self2_is_0
```
```  5011
```
```  5012 * Theory IntDiv: removed many lemmas that are instances of class-based
```
```  5013 generalizations (from Divides and Ring_and_Field).  INCOMPATIBILITY,
```
```  5014 rename old lemmas as follows:
```
```  5015
```
```  5016 dvd_diff               -> nat_dvd_diff
```
```  5017 dvd_zminus_iff         -> dvd_minus_iff
```
```  5018 mod_add1_eq            -> mod_add_eq
```
```  5019 mod_mult1_eq           -> mod_mult_right_eq
```
```  5020 mod_mult1_eq'          -> mod_mult_left_eq
```
```  5021 mod_mult_distrib_mod   -> mod_mult_eq
```
```  5022 nat_mod_add_left_eq    -> mod_add_left_eq
```
```  5023 nat_mod_add_right_eq   -> mod_add_right_eq
```
```  5024 nat_mod_div_trivial    -> mod_div_trivial
```
```  5025 nat_mod_mod_trivial    -> mod_mod_trivial
```
```  5026 zdiv_zadd_self1        -> div_add_self1
```
```  5027 zdiv_zadd_self2        -> div_add_self2
```
```  5028 zdiv_zmult_self1       -> div_mult_self2_is_id
```
```  5029 zdiv_zmult_self2       -> div_mult_self1_is_id
```
```  5030 zdvd_triv_left         -> dvd_triv_left
```
```  5031 zdvd_triv_right        -> dvd_triv_right
```
```  5032 zdvd_zmult_cancel_disj -> dvd_mult_cancel_left
```
```  5033 zmod_eq0_zdvd_iff      -> dvd_eq_mod_eq_0[symmetric]
```
```  5034 zmod_zadd_left_eq      -> mod_add_left_eq
```
```  5035 zmod_zadd_right_eq     -> mod_add_right_eq
```
```  5036 zmod_zadd_self1        -> mod_add_self1
```
```  5037 zmod_zadd_self2        -> mod_add_self2
```
```  5038 zmod_zadd1_eq          -> mod_add_eq
```
```  5039 zmod_zdiff1_eq         -> mod_diff_eq
```
```  5040 zmod_zdvd_zmod         -> mod_mod_cancel
```
```  5041 zmod_zmod_cancel       -> mod_mod_cancel
```
```  5042 zmod_zmult_self1       -> mod_mult_self2_is_0
```
```  5043 zmod_zmult_self2       -> mod_mult_self1_is_0
```
```  5044 zmod_1                 -> mod_by_1
```
```  5045 zdiv_1                 -> div_by_1
```
```  5046 zdvd_abs1              -> abs_dvd_iff
```
```  5047 zdvd_abs2              -> dvd_abs_iff
```
```  5048 zdvd_refl              -> dvd_refl
```
```  5049 zdvd_trans             -> dvd_trans
```
```  5050 zdvd_zadd              -> dvd_add
```
```  5051 zdvd_zdiff             -> dvd_diff
```
```  5052 zdvd_zminus_iff        -> dvd_minus_iff
```
```  5053 zdvd_zminus2_iff       -> minus_dvd_iff
```
```  5054 zdvd_zmultD            -> dvd_mult_right
```
```  5055 zdvd_zmultD2           -> dvd_mult_left
```
```  5056 zdvd_zmult_mono        -> mult_dvd_mono
```
```  5057 zdvd_0_right           -> dvd_0_right
```
```  5058 zdvd_0_left            -> dvd_0_left_iff
```
```  5059 zdvd_1_left            -> one_dvd
```
```  5060 zminus_dvd_iff         -> minus_dvd_iff
```
```  5061
```
```  5062 * Theory Rational: 'Fract k 0' now equals '0'.  INCOMPATIBILITY.
```
```  5063
```
```  5064 * The real numbers offer decimal input syntax: 12.34 is translated
```
```  5065 into 1234/10^2. This translation is not reversed upon output.
```
```  5066
```
```  5067 * Theory Library/Polynomial defines an abstract type 'a poly of
```
```  5068 univariate polynomials with coefficients of type 'a.  In addition to
```
```  5069 the standard ring operations, it also supports div and mod.  Code
```
```  5070 generation is also supported, using list-style constructors.
```
```  5071
```
```  5072 * Theory Library/Inner_Product defines a class of real_inner for real
```
```  5073 inner product spaces, with an overloaded operation inner :: 'a => 'a
```
```  5074 => real.  Class real_inner is a subclass of real_normed_vector from
```
```  5075 theory RealVector.
```
```  5076
```
```  5077 * Theory Library/Product_Vector provides instances for the product
```
```  5078 type 'a * 'b of several classes from RealVector and Inner_Product.
```
```  5079 Definitions of addition, subtraction, scalar multiplication, norms,
```
```  5080 and inner products are included.
```
```  5081
```
```  5082 * Theory Library/Bit defines the field "bit" of integers modulo 2.  In
```
```  5083 addition to the field operations, numerals and case syntax are also
```
```  5084 supported.
```
```  5085
```
```  5086 * Theory Library/Diagonalize provides constructive version of Cantor's
```
```  5087 first diagonalization argument.
```
```  5088
```
```  5089 * Theory Library/GCD: Curried operations gcd, lcm (for nat) and zgcd,
```
```  5090 zlcm (for int); carried together from various gcd/lcm developements in
```
```  5091 the HOL Distribution.  Constants zgcd and zlcm replace former igcd and
```
```  5092 ilcm; corresponding theorems renamed accordingly.  INCOMPATIBILITY,
```
```  5093 may recover tupled syntax as follows:
```
```  5094
```
```  5095     hide (open) const gcd
```
```  5096     abbreviation gcd where
```
```  5097       "gcd == (%(a, b). GCD.gcd a b)"
```
```  5098     notation (output)
```
```  5099       GCD.gcd ("gcd '(_, _')")
```
```  5100
```
```  5101 The same works for lcm, zgcd, zlcm.
```
```  5102
```
```  5103 * Theory Library/Nat_Infinity: added addition, numeral syntax and more
```
```  5104 instantiations for algebraic structures.  Removed some duplicate
```
```  5105 theorems.  Changes in simp rules.  INCOMPATIBILITY.
```
```  5106
```
```  5107 * ML antiquotation @{code} takes a constant as argument and generates
```
```  5108 corresponding code in background and inserts name of the corresponding
```
```  5109 resulting ML value/function/datatype constructor binding in place.
```
```  5110 All occurrences of @{code} with a single ML block are generated
```
```  5111 simultaneously.  Provides a generic and safe interface for
```
```  5112 instrumentalizing code generation.  See
```
```  5113 src/HOL/Decision_Procs/Ferrack.thy for a more ambitious application.
```
```  5114 In future you ought to refrain from ad-hoc compiling generated SML
```
```  5115 code on the ML toplevel.  Note that (for technical reasons) @{code}
```
```  5116 cannot refer to constants for which user-defined serializations are
```
```  5117 set.  Refer to the corresponding ML counterpart directly in that
```
```  5118 cases.
```
```  5119
```
```  5120 * Command 'rep_datatype': instead of theorem names the command now
```
```  5121 takes a list of terms denoting the constructors of the type to be
```
```  5122 represented as datatype.  The characteristic theorems have to be
```
```  5123 proven.  INCOMPATIBILITY.  Also observe that the following theorems
```
```  5124 have disappeared in favour of existing ones:
```
```  5125
```
```  5126     unit_induct                 ~> unit.induct
```
```  5127     prod_induct                 ~> prod.induct
```
```  5128     sum_induct                  ~> sum.induct
```
```  5129     Suc_Suc_eq                  ~> nat.inject
```
```  5130     Suc_not_Zero Zero_not_Suc   ~> nat.distinct
```
```  5131
```
```  5132
```
```  5133 *** HOL-Algebra ***
```
```  5134
```
```  5135 * New locales for orders and lattices where the equivalence relation
```
```  5136 is not restricted to equality.  INCOMPATIBILITY: all order and lattice
```
```  5137 locales use a record structure with field eq for the equivalence.
```
```  5138
```
```  5139 * New theory of factorial domains.
```
```  5140
```
```  5141 * Units_l_inv and Units_r_inv are now simp rules by default.
```
```  5142 INCOMPATIBILITY.  Simplifier proof that require deletion of l_inv
```
```  5143 and/or r_inv will now also require deletion of these lemmas.
```
```  5144
```
```  5145 * Renamed the following theorems, INCOMPATIBILITY:
```
```  5146
```
```  5147 UpperD ~> Upper_memD
```
```  5148 LowerD ~> Lower_memD
```
```  5149 least_carrier ~> least_closed
```
```  5150 greatest_carrier ~> greatest_closed
```
```  5151 greatest_Lower_above ~> greatest_Lower_below
```
```  5152 one_zero ~> carrier_one_zero
```
```  5153 one_not_zero ~> carrier_one_not_zero  (collision with assumption)
```
```  5154
```
```  5155
```
```  5156 *** HOL-Nominal ***
```
```  5157
```
```  5158 * Nominal datatypes can now contain type-variables.
```
```  5159
```
```  5160 * Commands 'nominal_inductive' and 'equivariance' work with local
```
```  5161 theory targets.
```
```  5162
```
```  5163 * Nominal primrec can now works with local theory targets and its
```
```  5164 specification syntax now conforms to the general format as seen in
```
```  5165 'inductive' etc.
```
```  5166
```
```  5167 * Method "perm_simp" honours the standard simplifier attributes
```
```  5168 (no_asm), (no_asm_use) etc.
```
```  5169
```
```  5170 * The new predicate #* is defined like freshness, except that on the
```
```  5171 left hand side can be a set or list of atoms.
```
```  5172
```
```  5173 * Experimental command 'nominal_inductive2' derives strong induction
```
```  5174 principles for inductive definitions.  In contrast to
```
```  5175 'nominal_inductive', which can only deal with a fixed number of
```
```  5176 binders, it can deal with arbitrary expressions standing for sets of
```
```  5177 atoms to be avoided.  The only inductive definition we have at the
```
```  5178 moment that needs this generalisation is the typing rule for Lets in
```
```  5179 the algorithm W:
```
```  5180
```
```  5181  Gamma |- t1 : T1   (x,close Gamma T1)::Gamma |- t2 : T2   x#Gamma
```
```  5182  -----------------------------------------------------------------
```
```  5183          Gamma |- Let x be t1 in t2 : T2
```
```  5184
```
```  5185 In this rule one wants to avoid all the binders that are introduced by
```
```  5186 "close Gamma T1".  We are looking for other examples where this
```
```  5187 feature might be useful.  Please let us know.
```
```  5188
```
```  5189
```
```  5190 *** HOLCF ***
```
```  5191
```
```  5192 * Reimplemented the simplification procedure for proving continuity
```
```  5193 subgoals.  The new simproc is extensible; users can declare additional
```
```  5194 continuity introduction rules with the attribute [cont2cont].
```
```  5195
```
```  5196 * The continuity simproc now uses a different introduction rule for
```
```  5197 solving continuity subgoals on terms with lambda abstractions.  In
```
```  5198 some rare cases the new simproc may fail to solve subgoals that the
```
```  5199 old one could solve, and "simp add: cont2cont_LAM" may be necessary.
```
```  5200 Potential INCOMPATIBILITY.
```
```  5201
```
```  5202 * Command 'fixrec': specification syntax now conforms to the general
```
```  5203 format as seen in 'inductive' etc.  See src/HOLCF/ex/Fixrec_ex.thy for
```
```  5204 examples.  INCOMPATIBILITY.
```
```  5205
```
```  5206
```
```  5207 *** ZF ***
```
```  5208
```
```  5209 * Proof of Zorn's Lemma for partial orders.
```
```  5210
```
```  5211
```
```  5212 *** ML ***
```
```  5213
```
```  5214 * Multithreading for Poly/ML 5.1/5.2 is no longer supported, only for
```
```  5215 Poly/ML 5.2.1 or later.  Important note: the TimeLimit facility
```
```  5216 depends on multithreading, so timouts will not work before Poly/ML
```
```  5217 5.2.1!
```
```  5218
```
```  5219 * High-level support for concurrent ML programming, see
```
```  5220 src/Pure/Cuncurrent.  The data-oriented model of "future values" is
```
```  5221 particularly convenient to organize independent functional
```
```  5222 computations.  The concept of "synchronized variables" provides a
```
```  5223 higher-order interface for components with shared state, avoiding the
```
```  5224 delicate details of mutexes and condition variables.  (Requires
```
```  5225 Poly/ML 5.2.1 or later.)
```
```  5226
```
```  5227 * ML bindings produced via Isar commands are stored within the Isar
```
```  5228 context (theory or proof).  Consequently, commands like 'use' and 'ML'
```
```  5229 become thread-safe and work with undo as expected (concerning
```
```  5230 top-level bindings, not side-effects on global references).
```
```  5231 INCOMPATIBILITY, need to provide proper Isar context when invoking the
```
```  5232 compiler at runtime; really global bindings need to be given outside a
```
```  5233 theory.  (Requires Poly/ML 5.2 or later.)
```
```  5234
```
```  5235 * Command 'ML_prf' is analogous to 'ML' but works within a proof
```
```  5236 context.  Top-level ML bindings are stored within the proof context in
```
```  5237 a purely sequential fashion, disregarding the nested proof structure.
```
```  5238 ML bindings introduced by 'ML_prf' are discarded at the end of the
```
```  5239 proof.  (Requires Poly/ML 5.2 or later.)
```
```  5240
```
```  5241 * Simplified ML attribute and method setup, cf. functions Attrib.setup
```
```  5242 and Method.setup, as well as Isar commands 'attribute_setup' and
```
```  5243 'method_setup'.  INCOMPATIBILITY for 'method_setup', need to simplify
```
```  5244 existing code accordingly, or use plain 'setup' together with old
```
```  5245 Method.add_method.
```
```  5246
```
```  5247 * Simplified ML oracle interface Thm.add_oracle promotes 'a -> cterm
```
```  5248 to 'a -> thm, while results are always tagged with an authentic oracle
```
```  5249 name.  The Isar command 'oracle' is now polymorphic, no argument type
```
```  5250 is specified.  INCOMPATIBILITY, need to simplify existing oracle code
```
```  5251 accordingly.  Note that extra performance may be gained by producing
```
```  5252 the cterm carefully, avoiding slow Thm.cterm_of.
```
```  5253
```
```  5254 * Simplified interface for defining document antiquotations via
```
```  5255 ThyOutput.antiquotation, ThyOutput.output, and optionally
```
```  5256 ThyOutput.maybe_pretty_source.  INCOMPATIBILITY, need to simplify user
```
```  5257 antiquotations accordingly, see src/Pure/Thy/thy_output.ML for common
```
```  5258 examples.
```
```  5259
```
```  5260 * More systematic treatment of long names, abstract name bindings, and
```
```  5261 name space operations.  Basic operations on qualified names have been
```
```  5262 move from structure NameSpace to Long_Name, e.g. Long_Name.base_name,
```
```  5263 Long_Name.append.  Old type bstring has been mostly replaced by
```
```  5264 abstract type binding (see structure Binding), which supports precise
```
```  5265 qualification by packages and local theory targets, as well as proper
```
```  5266 tracking of source positions.  INCOMPATIBILITY, need to wrap old
```
```  5267 bstring values into Binding.name, or better pass through abstract
```
```  5268 bindings everywhere.  See further src/Pure/General/long_name.ML,
```
```  5269 src/Pure/General/binding.ML and src/Pure/General/name_space.ML
```
```  5270
```
```  5271 * Result facts (from PureThy.note_thms, ProofContext.note_thms,
```
```  5272 LocalTheory.note etc.) now refer to the *full* internal name, not the
```
```  5273 bstring as before.  INCOMPATIBILITY, not detected by ML type-checking!
```
```  5274
```
```  5275 * Disposed old type and term read functions (Sign.read_def_typ,
```
```  5276 Sign.read_typ, Sign.read_def_terms, Sign.read_term,
```
```  5277 Thm.read_def_cterms, Thm.read_cterm etc.).  INCOMPATIBILITY, should
```
```  5278 use regular Syntax.read_typ, Syntax.read_term, Syntax.read_typ_global,
```
```  5279 Syntax.read_term_global etc.; see also OldGoals.read_term as last
```
```  5280 resort for legacy applications.
```
```  5281
```
```  5282 * Disposed old declarations, tactics, tactic combinators that refer to
```
```  5283 the simpset or claset of an implicit theory (such as Addsimps,
```
```  5284 Simp_tac, SIMPSET).  INCOMPATIBILITY, should use @{simpset} etc. in
```
```  5285 embedded ML text, or local_simpset_of with a proper context passed as
```
```  5286 explicit runtime argument.
```
```  5287
```
```  5288 * Rules and tactics that read instantiations (read_instantiate,
```
```  5289 res_inst_tac, thin_tac, subgoal_tac etc.) now demand a proper proof
```
```  5290 context, which is required for parsing and type-checking.  Moreover,
```
```  5291 the variables are specified as plain indexnames, not string encodings
```
```  5292 thereof.  INCOMPATIBILITY.
```
```  5293
```
```  5294 * Generic Toplevel.add_hook interface allows to analyze the result of
```
```  5295 transactions.  E.g. see src/Pure/ProofGeneral/proof_general_pgip.ML
```
```  5296 for theorem dependency output of transactions resulting in a new
```
```  5297 theory state.
```
```  5298
```
```  5299 * ML antiquotations: block-structured compilation context indicated by
```
```  5300 \<lbrace> ... \<rbrace>; additional antiquotation forms:
```
```  5301
```
```  5302   @{binding name}                         - basic name binding
```
```  5303   @{let ?pat = term}                      - term abbreviation (HO matching)
```
```  5304   @{note name = fact}                     - fact abbreviation
```
```  5305   @{thm fact}                             - singleton fact (with attributes)
```
```  5306   @{thms fact}                            - general fact (with attributes)
```
```  5307   @{lemma prop by method}                 - singleton goal
```
```  5308   @{lemma prop by meth1 meth2}            - singleton goal
```
```  5309   @{lemma prop1 ... propN by method}      - general goal
```
```  5310   @{lemma prop1 ... propN by meth1 meth2} - general goal
```
```  5311   @{lemma (open) ...}                     - open derivation
```
```  5312
```
```  5313
```
```  5314 *** System ***
```
```  5315
```
```  5316 * The Isabelle "emacs" tool provides a specific interface to invoke
```
```  5317 Proof General / Emacs, with more explicit failure if that is not
```
```  5318 installed (the old isabelle-interface script silently falls back on
```
```  5319 isabelle-process).  The PROOFGENERAL_HOME setting determines the
```
```  5320 installation location of the Proof General distribution.
```
```  5321
```
```  5322 * Isabelle/lib/classes/Pure.jar provides basic support to integrate
```
```  5323 the Isabelle process into a JVM/Scala application.  See
```
```  5324 Isabelle/lib/jedit/plugin for a minimal example.  (The obsolete Java
```
```  5325 process wrapper has been discontinued.)
```
```  5326
```
```  5327 * Added homegrown Isabelle font with unicode layout, see lib/fonts.
```
```  5328
```
```  5329 * Various status messages (with exact source position information) are
```
```  5330 emitted, if proper markup print mode is enabled.  This allows
```
```  5331 user-interface components to provide detailed feedback on internal
```
```  5332 prover operations.
```
```  5333
```
```  5334
```
```  5335
```
```  5336 New in Isabelle2008 (June 2008)
```
```  5337 -------------------------------
```
```  5338
```
```  5339 *** General ***
```
```  5340
```
```  5341 * The Isabelle/Isar Reference Manual (isar-ref) has been reorganized
```
```  5342 and updated, with formally checked references as hyperlinks.
```
```  5343
```
```  5344 * Theory loader: use_thy (and similar operations) no longer set the
```
```  5345 implicit ML context, which was occasionally hard to predict and in
```
```  5346 conflict with concurrency.  INCOMPATIBILITY, use ML within Isar which
```
```  5347 provides a proper context already.
```
```  5348
```
```  5349 * Theory loader: old-style ML proof scripts being *attached* to a thy
```
```  5350 file are no longer supported.  INCOMPATIBILITY, regular 'uses' and
```
```  5351 'use' within a theory file will do the job.
```
```  5352
```
```  5353 * Name space merge now observes canonical order, i.e. the second space
```
```  5354 is inserted into the first one, while existing entries in the first
```
```  5355 space take precedence.  INCOMPATIBILITY in rare situations, may try to
```
```  5356 swap theory imports.
```
```  5357
```
```  5358 * Syntax: symbol \<chi> is now considered a letter.  Potential
```
```  5359 INCOMPATIBILITY in identifier syntax etc.
```
```  5360
```
```  5361 * Outer syntax: string tokens no longer admit escaped white space,
```
```  5362 which was an accidental (undocumented) feature.  INCOMPATIBILITY, use
```
```  5363 white space without escapes.
```
```  5364
```
```  5365 * Outer syntax: string tokens may contain arbitrary character codes
```
```  5366 specified via 3 decimal digits (as in SML).  E.g. "foo\095bar" for
```
```  5367 "foo_bar".
```
```  5368
```
```  5369
```
```  5370 *** Pure ***
```
```  5371
```
```  5372 * Context-dependent token translations.  Default setup reverts locally
```
```  5373 fixed variables, and adds hilite markup for undeclared frees.
```
```  5374
```
```  5375 * Unused theorems can be found using the new command 'unused_thms'.
```
```  5376 There are three ways of invoking it:
```
```  5377
```
```  5378 (1) unused_thms
```
```  5379      Only finds unused theorems in the current theory.
```
```  5380
```
```  5381 (2) unused_thms thy_1 ... thy_n -
```
```  5382      Finds unused theorems in the current theory and all of its ancestors,
```
```  5383      excluding the theories thy_1 ... thy_n and all of their ancestors.
```
```  5384
```
```  5385 (3) unused_thms thy_1 ... thy_n - thy'_1 ... thy'_m
```
```  5386      Finds unused theorems in the theories thy'_1 ... thy'_m and all of
```
```  5387      their ancestors, excluding the theories thy_1 ... thy_n and all of
```
```  5388      their ancestors.
```
```  5389
```
```  5390 In order to increase the readability of the list produced by
```
```  5391 unused_thms, theorems that have been created by a particular instance
```
```  5392 of a theory command such as 'inductive' or 'function' are considered
```
```  5393 to belong to the same "group", meaning that if at least one theorem in
```
```  5394 this group is used, the other theorems in the same group are no longer
```
```  5395 reported as unused.  Moreover, if all theorems in the group are
```
```  5396 unused, only one theorem in the group is displayed.
```
```  5397
```
```  5398 Note that proof objects have to be switched on in order for
```
```  5399 unused_thms to work properly (i.e. !proofs must be >= 1, which is
```
```  5400 usually the case when using Proof General with the default settings).
```
```  5401
```
```  5402 * Authentic naming of facts disallows ad-hoc overwriting of previous
```
```  5403 theorems within the same name space.  INCOMPATIBILITY, need to remove
```
```  5404 duplicate fact bindings, or even accidental fact duplications.  Note
```
```  5405 that tools may maintain dynamically scoped facts systematically, using
```
```  5406 PureThy.add_thms_dynamic.
```
```  5407
```
```  5408 * Command 'hide' now allows to hide from "fact" name space as well.
```
```  5409
```
```  5410 * Eliminated destructive theorem database, simpset, claset, and
```
```  5411 clasimpset.  Potential INCOMPATIBILITY, really need to observe linear
```
```  5412 update of theories within ML code.
```
```  5413
```
```  5414 * Eliminated theory ProtoPure and CPure, leaving just one Pure theory.
```
```  5415 INCOMPATIBILITY, object-logics depending on former Pure require
```
```  5416 additional setup PureThy.old_appl_syntax_setup; object-logics
```
```  5417 depending on former CPure need to refer to Pure.
```
```  5418
```
```  5419 * Commands 'use' and 'ML' are now purely functional, operating on
```
```  5420 theory/local_theory.  Removed former 'ML_setup' (on theory), use 'ML'
```
```  5421 instead.  Added 'ML_val' as mere diagnostic replacement for 'ML'.
```
```  5422 INCOMPATIBILITY.
```
```  5423
```
```  5424 * Command 'setup': discontinued implicit version with ML reference.
```
```  5425
```
```  5426 * Instantiation target allows for simultaneous specification of class
```
```  5427 instance operations together with an instantiation proof.
```
```  5428 Type-checking phase allows to refer to class operations uniformly.
```
```  5429 See src/HOL/Complex/Complex.thy for an Isar example and
```
```  5430 src/HOL/Library/Eval.thy for an ML example.
```
```  5431
```
```  5432 * Indexing of literal facts: be more serious about including only
```
```  5433 facts from the visible specification/proof context, but not the
```
```  5434 background context (locale etc.).  Affects `prop` notation and method
```
```  5435 "fact".  INCOMPATIBILITY: need to name facts explicitly in rare
```
```  5436 situations.
```
```  5437
```
```  5438 * Method "cases", "induct", "coinduct": removed obsolete/undocumented
```
```  5439 "(open)" option, which used to expose internal bound variables to the
```
```  5440 proof text.
```
```  5441
```
```  5442 * Isar statements: removed obsolete case "rule_context".
```
```  5443 INCOMPATIBILITY, better use explicit fixes/assumes.
```
```  5444
```
```  5445 * Locale proofs: default proof step now includes 'unfold_locales';
```
```  5446 hence 'proof' without argument may be used to unfold locale
```
```  5447 predicates.
```
```  5448
```
```  5449
```
```  5450 *** Document preparation ***
```
```  5451
```
```  5452 * Simplified pdfsetup.sty: color/hyperref is used unconditionally for
```
```  5453 both pdf and dvi (hyperlinks usually work in xdvi as well); removed
```
```  5454 obsolete thumbpdf setup (contemporary PDF viewers do this on the
```
```  5455 spot); renamed link color from "darkblue" to "linkcolor" (default
```
```  5456 value unchanged, can be redefined via \definecolor); no longer sets
```
```  5457 "a4paper" option (unnecessary or even intrusive).
```
```  5458
```
```  5459 * Antiquotation @{lemma A method} proves proposition A by the given
```
```  5460 method (either a method name or a method name plus (optional) method
```
```  5461 arguments in parentheses) and prints A just like @{prop A}.
```
```  5462
```
```  5463
```
```  5464 *** HOL ***
```
```  5465
```
```  5466 * New primrec package.  Specification syntax conforms in style to
```
```  5467 definition/function/....  No separate induction rule is provided.  The
```
```  5468 "primrec" command distinguishes old-style and new-style specifications
```
```  5469 by syntax.  The former primrec package is now named OldPrimrecPackage.
```
```  5470 When adjusting theories, beware: constants stemming from new-style
```
```  5471 primrec specifications have authentic syntax.
```
```  5472
```
```  5473 * Metis prover is now an order of magnitude faster, and also works
```
```  5474 with multithreading.
```
```  5475
```
```  5476 * Metis: the maximum number of clauses that can be produced from a
```
```  5477 theorem is now given by the attribute max_clauses.  Theorems that
```
```  5478 exceed this number are ignored, with a warning printed.
```
```  5479
```
```  5480 * Sledgehammer no longer produces structured proofs by default. To
```
```  5481 enable, declare [[sledgehammer_full = true]].  Attributes
```
```  5482 reconstruction_modulus, reconstruction_sorts renamed
```
```  5483 sledgehammer_modulus, sledgehammer_sorts.  INCOMPATIBILITY.
```
```  5484
```
```  5485 * Method "induct_scheme" derives user-specified induction rules
```
```  5486 from well-founded induction and completeness of patterns. This factors
```
```  5487 out some operations that are done internally by the function package
```
```  5488 and makes them available separately.  See
```
```  5489 src/HOL/ex/Induction_Scheme.thy for examples.
```
```  5490
```
```  5491 * More flexible generation of measure functions for termination
```
```  5492 proofs: Measure functions can be declared by proving a rule of the
```
```  5493 form "is_measure f" and giving it the [measure_function] attribute.
```
```  5494 The "is_measure" predicate is logically meaningless (always true), and
```
```  5495 just guides the heuristic.  To find suitable measure functions, the
```
```  5496 termination prover sets up the goal "is_measure ?f" of the appropriate
```
```  5497 type and generates all solutions by prolog-style backwards proof using
```
```  5498 the declared rules.
```
```  5499
```
```  5500 This setup also deals with rules like
```
```  5501
```
```  5502   "is_measure f ==> is_measure (list_size f)"
```
```  5503
```
```  5504 which accommodates nested datatypes that recurse through lists.
```
```  5505 Similar rules are predeclared for products and option types.
```
```  5506
```
```  5507 * Turned the type of sets "'a set" into an abbreviation for "'a => bool"
```
```  5508
```
```  5509   INCOMPATIBILITIES:
```
```  5510
```
```  5511   - Definitions of overloaded constants on sets have to be replaced by
```
```  5512     definitions on => and bool.
```
```  5513
```
```  5514   - Some definitions of overloaded operators on sets can now be proved
```
```  5515     using the definitions of the operators on => and bool.  Therefore,
```
```  5516     the following theorems have been renamed:
```
```  5517
```
```  5518       subset_def   -> subset_eq
```
```  5519       psubset_def  -> psubset_eq
```
```  5520       set_diff_def -> set_diff_eq
```
```  5521       Compl_def    -> Compl_eq
```
```  5522       Sup_set_def  -> Sup_set_eq
```
```  5523       Inf_set_def  -> Inf_set_eq
```
```  5524       sup_set_def  -> sup_set_eq
```
```  5525       inf_set_def  -> inf_set_eq
```
```  5526
```
```  5527   - Due to the incompleteness of the HO unification algorithm, some
```
```  5528     rules such as subst may require manual instantiation, if some of
```
```  5529     the unknowns in the rule is a set.
```
```  5530
```
```  5531   - Higher order unification and forward proofs:
```
```  5532     The proof pattern
```
```  5533
```
```  5534       have "P (S::'a set)" <...>
```
```  5535       then have "EX S. P S" ..
```
```  5536
```
```  5537     no longer works (due to the incompleteness of the HO unification
```
```  5538     algorithm) and must be replaced by the pattern
```
```  5539
```
```  5540       have "EX S. P S"
```
```  5541       proof
```
```  5542         show "P S" <...>
```
```  5543       qed
```
```  5544
```
```  5545   - Calculational reasoning with subst (or similar rules):
```
```  5546     The proof pattern
```
```  5547
```
```  5548       have "P (S::'a set)" <...>
```
```  5549       also have "S = T" <...>
```
```  5550       finally have "P T" .
```
```  5551
```
```  5552     no longer works (for similar reasons as the previous example) and
```
```  5553     must be replaced by something like
```
```  5554
```
```  5555       have "P (S::'a set)" <...>
```
```  5556       moreover have "S = T" <...>
```
```  5557       ultimately have "P T" by simp
```
```  5558
```
```  5559   - Tactics or packages written in ML code:
```
```  5560     Code performing pattern matching on types via
```
```  5561
```
```  5562       Type ("set", [T]) => ...
```
```  5563
```
```  5564     must be rewritten. Moreover, functions like strip_type or
```
```  5565     binder_types no longer return the right value when applied to a
```
```  5566     type of the form
```
```  5567
```
```  5568       T1 => ... => Tn => U => bool
```
```  5569
```
```  5570     rather than
```
```  5571
```
```  5572       T1 => ... => Tn => U set
```
```  5573
```
```  5574 * Merged theories Wellfounded_Recursion, Accessible_Part and
```
```  5575 Wellfounded_Relations to theory Wellfounded.
```
```  5576
```
```  5577 * Explicit class "eq" for executable equality.  INCOMPATIBILITY.
```
```  5578
```
```  5579 * Class finite no longer treats UNIV as class parameter.  Use class
```
```  5580 enum from theory Library/Enum instead to achieve a similar effect.
```
```  5581 INCOMPATIBILITY.
```
```  5582
```
```  5583 * Theory List: rule list_induct2 now has explicitly named cases "Nil"
```
```  5584 and "Cons".  INCOMPATIBILITY.
```
```  5585
```
```  5586 * HOL (and FOL): renamed variables in rules imp_elim and swap.
```
```  5587 Potential INCOMPATIBILITY.
```
```  5588
```
```  5589 * Theory Product_Type: duplicated lemmas split_Pair_apply and
```
```  5590 injective_fst_snd removed, use split_eta and prod_eqI instead.
```
```  5591 Renamed upd_fst to apfst and upd_snd to apsnd.  INCOMPATIBILITY.
```
```  5592
```
```  5593 * Theory Nat: removed redundant lemmas that merely duplicate lemmas of
```
```  5594 the same name in theory Orderings:
```
```  5595
```
```  5596   less_trans
```
```  5597   less_linear
```
```  5598   le_imp_less_or_eq
```
```  5599   le_less_trans
```
```  5600   less_le_trans
```
```  5601   less_not_sym
```
```  5602   less_asym
```
```  5603
```
```  5604 Renamed less_imp_le to less_imp_le_nat, and less_irrefl to
```
```  5605 less_irrefl_nat.  Potential INCOMPATIBILITY due to more general types
```
```  5606 and different variable names.
```
```  5607
```
```  5608 * Library/Option_ord.thy: Canonical order on option type.
```
```  5609
```
```  5610 * Library/RBT.thy: Red-black trees, an efficient implementation of
```
```  5611 finite maps.
```
```  5612
```
```  5613 * Library/Countable.thy: Type class for countable types.
```
```  5614
```
```  5615 * Theory Int: The representation of numerals has changed.  The infix
```
```  5616 operator BIT and the bit datatype with constructors B0 and B1 have
```
```  5617 disappeared.  INCOMPATIBILITY, use "Int.Bit0 x" and "Int.Bit1 y" in
```
```  5618 place of "x BIT bit.B0" and "y BIT bit.B1", respectively.  Theorems
```
```  5619 involving BIT, B0, or B1 have been renamed with "Bit0" or "Bit1"
```
```  5620 accordingly.
```
```  5621
```
```  5622 * Theory Nat: definition of <= and < on natural numbers no longer
```
```  5623 depend on well-founded relations.  INCOMPATIBILITY.  Definitions
```
```  5624 le_def and less_def have disappeared.  Consider lemmas not_less
```
```  5625 [symmetric, where ?'a = nat] and less_eq [symmetric] instead.
```
```  5626
```
```  5627 * Theory Finite_Set: locales ACf, ACe, ACIf, ACIfSL and ACIfSLlin
```
```  5628 (whose purpose mainly is for various fold_set functionals) have been
```
```  5629 abandoned in favor of the existing algebraic classes
```
```  5630 ab_semigroup_mult, comm_monoid_mult, ab_semigroup_idem_mult,
```
```  5631 lower_semilattice (resp. upper_semilattice) and linorder.
```
```  5632 INCOMPATIBILITY.
```
```  5633
```
```  5634 * Theory Transitive_Closure: induct and cases rules now declare proper
```
```  5635 case_names ("base" and "step").  INCOMPATIBILITY.
```
```  5636
```
```  5637 * Theorem Inductive.lfp_ordinal_induct generalized to complete
```
```  5638 lattices.  The form set-specific version is available as
```
```  5639 Inductive.lfp_ordinal_induct_set.
```
```  5640
```
```  5641 * Renamed theorems "power.simps" to "power_int.simps".
```
```  5642 INCOMPATIBILITY.
```
```  5643
```
```  5644 * Class semiring_div provides basic abstract properties of semirings
```
```  5645 with division and modulo operations.  Subsumes former class dvd_mod.
```
```  5646
```
```  5647 * Merged theories IntDef, Numeral and IntArith into unified theory
```
```  5648 Int.  INCOMPATIBILITY.
```
```  5649
```
```  5650 * Theory Library/Code_Index: type "index" now represents natural
```
```  5651 numbers rather than integers.  INCOMPATIBILITY.
```
```  5652
```
```  5653 * New class "uminus" with operation "uminus" (split of from class
```
```  5654 "minus" which now only has operation "minus", binary).
```
```  5655 INCOMPATIBILITY.
```
```  5656
```
```  5657 * Constants "card", "internal_split", "option_map" now with authentic
```
```  5658 syntax.  INCOMPATIBILITY.
```
```  5659
```
```  5660 * Definitions subset_def, psubset_def, set_diff_def, Compl_def,
```
```  5661 le_bool_def, less_bool_def, le_fun_def, less_fun_def, inf_bool_def,
```
```  5662 sup_bool_def, Inf_bool_def, Sup_bool_def, inf_fun_def, sup_fun_def,
```
```  5663 Inf_fun_def, Sup_fun_def, inf_set_def, sup_set_def, Inf_set_def,
```
```  5664 Sup_set_def, le_def, less_def, option_map_def now with object
```
```  5665 equality.  INCOMPATIBILITY.
```
```  5666
```
```  5667 * Records. Removed K_record, and replaced it by pure lambda term
```
```  5668 %x. c. The simplifier setup is now more robust against eta expansion.
```
```  5669 INCOMPATIBILITY: in cases explicitly referring to K_record.
```
```  5670
```
```  5671 * Library/Multiset: {#a, b, c#} abbreviates {#a#} + {#b#} + {#c#}.
```
```  5672
```
```  5673 * Library/ListVector: new theory of arithmetic vector operations.
```
```  5674
```
```  5675 * Library/Order_Relation: new theory of various orderings as sets of
```
```  5676 pairs.  Defines preorders, partial orders, linear orders and
```
```  5677 well-orders on sets and on types.
```
```  5678
```
```  5679
```
```  5680 *** ZF ***
```
```  5681
```
```  5682 * Renamed some theories to allow to loading both ZF and HOL in the
```
```  5683 same session:
```
```  5684
```
```  5685   Datatype  -> Datatype_ZF
```
```  5686   Inductive -> Inductive_ZF
```
```  5687   Int       -> Int_ZF
```
```  5688   IntDiv    -> IntDiv_ZF
```
```  5689   Nat       -> Nat_ZF
```
```  5690   List      -> List_ZF
```
```  5691   Main      -> Main_ZF
```
```  5692
```
```  5693 INCOMPATIBILITY: ZF theories that import individual theories below
```
```  5694 Main might need to be adapted.  Regular theory Main is still
```
```  5695 available, as trivial extension of Main_ZF.
```
```  5696
```
```  5697
```
```  5698 *** ML ***
```
```  5699
```
```  5700 * ML within Isar: antiquotation @{const name} or @{const
```
```  5701 name(typargs)} produces statically-checked Const term.
```
```  5702
```
```  5703 * Functor NamedThmsFun: data is available to the user as dynamic fact
```
```  5704 (of the same name).  Removed obsolete print command.
```
```  5705
```
```  5706 * Removed obsolete "use_legacy_bindings" function.
```
```  5707
```
```  5708 * The ``print mode'' is now a thread-local value derived from a global
```
```  5709 template (the former print_mode reference), thus access becomes
```
```  5710 non-critical.  The global print_mode reference is for session
```
```  5711 management only; user-code should use print_mode_value,
```
```  5712 print_mode_active, PrintMode.setmp etc.  INCOMPATIBILITY.
```
```  5713
```
```  5714 * Functions system/system_out provide a robust way to invoke external
```
```  5715 shell commands, with propagation of interrupts (requires Poly/ML
```
```  5716 5.2.1).  Do not use OS.Process.system etc. from the basis library!
```
```  5717
```
```  5718
```
```  5719 *** System ***
```
```  5720
```
```  5721 * Default settings: PROOFGENERAL_OPTIONS no longer impose xemacs ---
```
```  5722 in accordance with Proof General 3.7, which prefers GNU emacs.
```
```  5723
```
```  5724 * isatool tty runs Isabelle process with plain tty interaction;
```
```  5725 optional line editor may be specified via ISABELLE_LINE_EDITOR
```
```  5726 setting, the default settings attempt to locate "ledit" and "rlwrap".
```
```  5727
```
```  5728 * isatool browser now works with Cygwin as well, using general
```
```  5729 "javapath" function defined in Isabelle process environment.
```
```  5730
```
```  5731 * YXML notation provides a simple and efficient alternative to
```
```  5732 standard XML transfer syntax.  See src/Pure/General/yxml.ML and
```
```  5733 isatool yxml as described in the Isabelle system manual.
```
```  5734
```
```  5735 * JVM class isabelle.IsabelleProcess (located in Isabelle/lib/classes)
```
```  5736 provides general wrapper for managing an Isabelle process in a robust
```
```  5737 fashion, with ``cooked'' output from stdin/stderr.
```
```  5738
```
```  5739 * Rudimentary Isabelle plugin for jEdit (see Isabelle/lib/jedit),
```
```  5740 based on Isabelle/JVM process wrapper (see Isabelle/lib/classes).
```
```  5741
```
```  5742 * Removed obsolete THIS_IS_ISABELLE_BUILD feature.  NB: the documented
```
```  5743 way of changing the user's settings is via
```
```  5744 ISABELLE_HOME_USER/etc/settings, which is a fully featured bash
```
```  5745 script.
```
```  5746
```
```  5747 * Multithreading.max_threads := 0 refers to the number of actual CPU
```
```  5748 cores of the underlying machine, which is a good starting point for
```
```  5749 optimal performance tuning.  The corresponding usedir option -M allows
```
```  5750 "max" as an alias for "0".  WARNING: does not work on certain versions
```
```  5751 of Mac OS (with Poly/ML 5.1).
```
```  5752
```
```  5753 * isabelle-process: non-ML sessions are run with "nice", to reduce the
```
```  5754 adverse effect of Isabelle flooding interactive front-ends (notably
```
```  5755 ProofGeneral / XEmacs).
```
```  5756
```
```  5757
```
```  5758
```
```  5759 New in Isabelle2007 (November 2007)
```
```  5760 -----------------------------------
```
```  5761
```
```  5762 *** General ***
```
```  5763
```
```  5764 * More uniform information about legacy features, notably a
```
```  5765 warning/error of "Legacy feature: ...", depending on the state of the
```
```  5766 tolerate_legacy_features flag (default true). FUTURE INCOMPATIBILITY:
```
```  5767 legacy features will disappear eventually.
```
```  5768
```
```  5769 * Theory syntax: the header format ``theory A = B + C:'' has been
```
```  5770 discontinued in favour of ``theory A imports B C begin''.  Use isatool
```
```  5771 fixheaders to convert existing theory files.  INCOMPATIBILITY.
```
```  5772
```
```  5773 * Theory syntax: the old non-Isar theory file format has been
```
```  5774 discontinued altogether.  Note that ML proof scripts may still be used
```
```  5775 with Isar theories; migration is usually quite simple with the ML
```
```  5776 function use_legacy_bindings.  INCOMPATIBILITY.
```
```  5777
```
```  5778 * Theory syntax: some popular names (e.g. 'class', 'declaration',
```
```  5779 'fun', 'help', 'if') are now keywords.  INCOMPATIBILITY, use double
```
```  5780 quotes.
```
```  5781
```
```  5782 * Theory loader: be more serious about observing the static theory
```
```  5783 header specifications (including optional directories), but not the
```
```  5784 accidental file locations of previously successful loads.  The strict
```
```  5785 update policy of former update_thy is now already performed by
```
```  5786 use_thy, so the former has been removed; use_thys updates several
```
```  5787 theories simultaneously, just as 'imports' within a theory header
```
```  5788 specification, but without merging the results.  Potential
```
```  5789 INCOMPATIBILITY: may need to refine theory headers and commands
```
```  5790 ROOT.ML which depend on load order.
```
```  5791
```
```  5792 * Theory loader: optional support for content-based file
```
```  5793 identification, instead of the traditional scheme of full physical
```
```  5794 path plus date stamp; configured by the ISABELLE_FILE_IDENT setting
```
```  5795 (cf. the system manual).  The new scheme allows to work with
```
```  5796 non-finished theories in persistent session images, such that source
```
```  5797 files may be moved later on without requiring reloads.
```
```  5798
```
```  5799 * Theory loader: old-style ML proof scripts being *attached* to a thy
```
```  5800 file (with the same base name as the theory) are considered a legacy
```
```  5801 feature, which will disappear eventually. Even now, the theory loader
```
```  5802 no longer maintains dependencies on such files.
```
```  5803
```
```  5804 * Syntax: the scope for resolving ambiguities via type-inference is
```
```  5805 now limited to individual terms, instead of whole simultaneous
```
```  5806 specifications as before. This greatly reduces the complexity of the
```
```  5807 syntax module and improves flexibility by separating parsing and
```
```  5808 type-checking. INCOMPATIBILITY: additional type-constraints (explicit
```
```  5809 'fixes' etc.) are required in rare situations.
```
```  5810
```
```  5811 * Syntax: constants introduced by new-style packages ('definition',
```
```  5812 'abbreviation' etc.) are passed through the syntax module in
```
```  5813 ``authentic mode''. This means that associated mixfix annotations
```
```  5814 really stick to such constants, independently of potential name space
```
```  5815 ambiguities introduced later on. INCOMPATIBILITY: constants in parse
```
```  5816 trees are represented slightly differently, may need to adapt syntax
```
```  5817 translations accordingly. Use CONST marker in 'translations' and
```
```  5818 @{const_syntax} antiquotation in 'parse_translation' etc.
```
```  5819
```
```  5820 * Legacy goal package: reduced interface to the bare minimum required
```
```  5821 to keep existing proof scripts running.  Most other user-level
```
```  5822 functions are now part of the OldGoals structure, which is *not* open
```
```  5823 by default (consider isatool expandshort before open OldGoals).
```
```  5824 Removed top_sg, prin, printyp, pprint_term/typ altogether, because
```
```  5825 these tend to cause confusion about the actual goal (!) context being
```
```  5826 used here, which is not necessarily the same as the_context().
```
```  5827
```
```  5828 * Command 'find_theorems': supports "*" wild-card in "name:"
```
```  5829 criterion; "with_dups" option.  Certain ProofGeneral versions might
```
```  5830 support a specific search form (see ProofGeneral/CHANGES).
```
```  5831
```
```  5832 * The ``prems limit'' option (cf. ProofContext.prems_limit) is now -1
```
```  5833 by default, which means that "prems" (and also "fixed variables") are
```
```  5834 suppressed from proof state output.  Note that the ProofGeneral
```
```  5835 settings mechanism allows to change and save options persistently, but
```
```  5836 older versions of Isabelle will fail to start up if a negative prems
```
```  5837 limit is imposed.
```
```  5838
```
```  5839 * Local theory targets may be specified by non-nested blocks of
```
```  5840 ``context/locale/class ... begin'' followed by ``end''.  The body may
```
```  5841 contain definitions, theorems etc., including any derived mechanism
```
```  5842 that has been implemented on top of these primitives.  This concept
```
```  5843 generalizes the existing ``theorem (in ...)'' towards more versatility
```
```  5844 and scalability.
```
```  5845
```
```  5846 * Proof General interface: proper undo of final 'end' command;
```
```  5847 discontinued Isabelle/classic mode (ML proof scripts).
```
```  5848
```
```  5849
```
```  5850 *** Document preparation ***
```
```  5851
```
```  5852 * Added antiquotation @{theory name} which prints the given name,
```
```  5853 after checking that it refers to a valid ancestor theory in the
```
```  5854 current context.
```
```  5855
```
```  5856 * Added antiquotations @{ML_type text} and @{ML_struct text} which
```
```  5857 check the given source text as ML type/structure, printing verbatim.
```
```  5858
```
```  5859 * Added antiquotation @{abbrev "c args"} which prints the abbreviation
```
```  5860 "c args == rhs" given in the current context.  (Any number of
```
```  5861 arguments may be given on the LHS.)
```
```  5862
```
```  5863
```
```  5864 *** Pure ***
```
```  5865
```
```  5866 * The 'class' package offers a combination of axclass and locale to
```
```  5867 achieve Haskell-like type classes in Isabelle.  Definitions and
```
```  5868 theorems within a class context produce both relative results (with
```
```  5869 implicit parameters according to the locale context), and polymorphic
```
```  5870 constants with qualified polymorphism (according to the class
```
```  5871 context).  Within the body context of a 'class' target, a separate
```
```  5872 syntax layer ("user space type system") takes care of converting
```
```  5873 between global polymorphic consts and internal locale representation.
```
```  5874 See src/HOL/ex/Classpackage.thy for examples (as well as main HOL).
```
```  5875 "isatool doc classes" provides a tutorial.
```
```  5876
```
```  5877 * Generic code generator framework allows to generate executable
```
```  5878 code for ML and Haskell (including Isabelle classes).  A short usage
```
```  5879 sketch:
```
```  5880
```
```  5881     internal compilation:
```
```  5882         export_code <list of constants (term syntax)> in SML
```
```  5883     writing SML code to a file:
```
```  5884         export_code <list of constants (term syntax)> in SML <filename>
```
```  5885     writing OCaml code to a file:
```
```  5886         export_code <list of constants (term syntax)> in OCaml <filename>
```
```  5887     writing Haskell code to a bunch of files:
```
```  5888         export_code <list of constants (term syntax)> in Haskell <filename>
```
```  5889
```
```  5890     evaluating closed propositions to True/False using code generation:
```
```  5891         method ``eval''
```
```  5892
```
```  5893 Reasonable default setup of framework in HOL.
```
```  5894
```
```  5895 Theorem attributs for selecting and transforming function equations theorems:
```
```  5896
```
```  5897     [code fun]:        select a theorem as function equation for a specific constant
```
```  5898     [code fun del]:    deselect a theorem as function equation for a specific constant
```
```  5899     [code inline]:     select an equation theorem for unfolding (inlining) in place
```
```  5900     [code inline del]: deselect an equation theorem for unfolding (inlining) in place
```
```  5901
```
```  5902 User-defined serializations (target in {SML, OCaml, Haskell}):
```
```  5903
```
```  5904     code_const <and-list of constants (term syntax)>
```
```  5905       {(target) <and-list of const target syntax>}+
```
```  5906
```
```  5907     code_type <and-list of type constructors>
```
```  5908       {(target) <and-list of type target syntax>}+
```
```  5909
```
```  5910     code_instance <and-list of instances>
```
```  5911       {(target)}+
```
```  5912         where instance ::= <type constructor> :: <class>
```
```  5913
```
```  5914     code_class <and_list of classes>
```
```  5915       {(target) <and-list of class target syntax>}+
```
```  5916         where class target syntax ::= <class name> {where {<classop> == <target syntax>}+}?
```
```  5917
```
```  5918 code_instance and code_class only are effective to target Haskell.
```
```  5919
```
```  5920 For example usage see src/HOL/ex/Codegenerator.thy and
```
```  5921 src/HOL/ex/Codegenerator_Pretty.thy.  A separate tutorial on code
```
```  5922 generation from Isabelle/HOL theories is available via "isatool doc
```
```  5923 codegen".
```
```  5924
```
```  5925 * Code generator: consts in 'consts_code' Isar commands are now
```
```  5926 referred to by usual term syntax (including optional type
```
```  5927 annotations).
```
```  5928
```
```  5929 * Command 'no_translations' removes translation rules from theory
```
```  5930 syntax.
```
```  5931
```
```  5932 * Overloaded definitions are now actually checked for acyclic
```
```  5933 dependencies.  The overloading scheme is slightly more general than
```
```  5934 that of Haskell98, although Isabelle does not demand an exact
```
```  5935 correspondence to type class and instance declarations.
```
```  5936 INCOMPATIBILITY, use ``defs (unchecked overloaded)'' to admit more
```
```  5937 exotic versions of overloading -- at the discretion of the user!
```
```  5938
```
```  5939 Polymorphic constants are represented via type arguments, i.e. the
```
```  5940 instantiation that matches an instance against the most general
```
```  5941 declaration given in the signature.  For example, with the declaration
```
```  5942 c :: 'a => 'a => 'a, an instance c :: nat => nat => nat is represented
```
```  5943 as c(nat).  Overloading is essentially simultaneous structural
```
```  5944 recursion over such type arguments.  Incomplete specification patterns
```
```  5945 impose global constraints on all occurrences, e.g. c('a * 'a) on the
```
```  5946 LHS means that more general c('a * 'b) will be disallowed on any RHS.
```
```  5947 Command 'print_theory' outputs the normalized system of recursive
```
```  5948 equations, see section "definitions".
```
```  5949
```
```  5950 * Configuration options are maintained within the theory or proof
```
```  5951 context (with name and type bool/int/string), providing a very simple
```
```  5952 interface to a poor-man's version of general context data.  Tools may
```
```  5953 declare options in ML (e.g. using Attrib.config_int) and then refer to
```
```  5954 these values using Config.get etc.  Users may change options via an
```
```  5955 associated attribute of the same name.  This form of context
```
```  5956 declaration works particularly well with commands 'declare' or
```
```  5957 'using', for example ``declare [[foo = 42]]''.  Thus it has become
```
```  5958 very easy to avoid global references, which would not observe Isar
```
```  5959 toplevel undo/redo and fail to work with multithreading.
```
```  5960
```
```  5961 Various global ML references of Pure and HOL have been turned into
```
```  5962 configuration options:
```
```  5963
```
```  5964   Unify.search_bound		unify_search_bound
```
```  5965   Unify.trace_bound		unify_trace_bound
```
```  5966   Unify.trace_simp		unify_trace_simp
```
```  5967   Unify.trace_types		unify_trace_types
```
```  5968   Simplifier.simp_depth_limit	simp_depth_limit
```
```  5969   Blast.depth_limit		blast_depth_limit
```
```  5970   DatatypeProp.dtK		datatype_distinctness_limit
```
```  5971   fast_arith_neq_limit  	fast_arith_neq_limit
```
```  5972   fast_arith_split_limit	fast_arith_split_limit
```
```  5973
```
```  5974 * Named collections of theorems may be easily installed as context
```
```  5975 data using the functor NamedThmsFun (see also
```
```  5976 src/Pure/Tools/named_thms.ML).  The user may add or delete facts via
```
```  5977 attributes; there is also a toplevel print command.  This facility is
```
```  5978 just a common case of general context data, which is the preferred way
```
```  5979 for anything more complex than just a list of facts in canonical
```
```  5980 order.
```
```  5981
```
```  5982 * Isar: command 'declaration' augments a local theory by generic
```
```  5983 declaration functions written in ML.  This enables arbitrary content
```
```  5984 being added to the context, depending on a morphism that tells the
```
```  5985 difference of the original declaration context wrt. the application
```
```  5986 context encountered later on.
```
```  5987
```
```  5988 * Isar: proper interfaces for simplification procedures.  Command
```
```  5989 'simproc_setup' declares named simprocs (with match patterns, and body
```
```  5990 text in ML).  Attribute "simproc" adds/deletes simprocs in the current
```
```  5991 context.  ML antiquotation @{simproc name} retrieves named simprocs.
```
```  5992
```
```  5993 * Isar: an extra pair of brackets around attribute declarations
```
```  5994 abbreviates a theorem reference involving an internal dummy fact,
```
```  5995 which will be ignored later --- only the effect of the attribute on
```
```  5996 the background context will persist.  This form of in-place
```
```  5997 declarations is particularly useful with commands like 'declare' and
```
```  5998 'using', for example ``have A using [[simproc a]] by simp''.
```
```  5999
```
```  6000 * Isar: method "assumption" (and implicit closing of subproofs) now
```
```  6001 takes simple non-atomic goal assumptions into account: after applying
```
```  6002 an assumption as a rule the resulting subgoals are solved by atomic
```
```  6003 assumption steps.  This is particularly useful to finish 'obtain'
```
```  6004 goals, such as "!!x. (!!x. P x ==> thesis) ==> P x ==> thesis",
```
```  6005 without referring to the original premise "!!x. P x ==> thesis" in the
```
```  6006 Isar proof context.  POTENTIAL INCOMPATIBILITY: method "assumption" is
```
```  6007 more permissive.
```
```  6008
```
```  6009 * Isar: implicit use of prems from the Isar proof context is
```
```  6010 considered a legacy feature.  Common applications like ``have A .''
```
```  6011 may be replaced by ``have A by fact'' or ``note `A`''.  In general,
```
```  6012 referencing facts explicitly here improves readability and
```
```  6013 maintainability of proof texts.
```
```  6014
```
```  6015 * Isar: improper proof element 'guess' is like 'obtain', but derives
```
```  6016 the obtained context from the course of reasoning!  For example:
```
```  6017
```
```  6018   assume "EX x y. A x & B y"   -- "any previous fact"
```
```  6019   then guess x and y by clarify
```
```  6020
```
```  6021 This technique is potentially adventurous, depending on the facts and
```
```  6022 proof tools being involved here.
```
```  6023
```
```  6024 * Isar: known facts from the proof context may be specified as literal
```
```  6025 propositions, using ASCII back-quote syntax.  This works wherever
```
```  6026 named facts used to be allowed so far, in proof commands, proof
```
```  6027 methods, attributes etc.  Literal facts are retrieved from the context
```
```  6028 according to unification of type and term parameters.  For example,
```
```  6029 provided that "A" and "A ==> B" and "!!x. P x ==> Q x" are known
```
```  6030 theorems in the current context, then these are valid literal facts:
```
```  6031 `A` and `A ==> B` and `!!x. P x ==> Q x" as well as `P a ==> Q a` etc.
```
```  6032
```
```  6033 There is also a proof method "fact" which does the same composition
```
```  6034 for explicit goal states, e.g. the following proof texts coincide with
```
```  6035 certain special cases of literal facts:
```
```  6036
```
```  6037   have "A" by fact                 ==  note `A`
```
```  6038   have "A ==> B" by fact           ==  note `A ==> B`
```
```  6039   have "!!x. P x ==> Q x" by fact  ==  note `!!x. P x ==> Q x`
```
```  6040   have "P a ==> Q a" by fact       ==  note `P a ==> Q a`
```
```  6041
```
```  6042 * Isar: ":" (colon) is no longer a symbolic identifier character in
```
```  6043 outer syntax.  Thus symbolic identifiers may be used without
```
```  6044 additional white space in declarations like this: ``assume *: A''.
```
```  6045
```
```  6046 * Isar: 'print_facts' prints all local facts of the current context,
```
```  6047 both named and unnamed ones.
```
```  6048
```
```  6049 * Isar: 'def' now admits simultaneous definitions, e.g.:
```
```  6050
```
```  6051   def x == "t" and y == "u"
```
```  6052
```
```  6053 * Isar: added command 'unfolding', which is structurally similar to
```
```  6054 'using', but affects both the goal state and facts by unfolding given
```
```  6055 rewrite rules.  Thus many occurrences of the 'unfold' method or
```
```  6056 'unfolded' attribute may be replaced by first-class proof text.
```
```  6057
```
```  6058 * Isar: methods 'unfold' / 'fold', attributes 'unfolded' / 'folded',
```
```  6059 and command 'unfolding' now all support object-level equalities
```
```  6060 (potentially conditional).  The underlying notion of rewrite rule is
```
```  6061 analogous to the 'rule_format' attribute, but *not* that of the
```
```  6062 Simplifier (which is usually more generous).
```
```  6063
```
```  6064 * Isar: the new attribute [rotated n] (default n = 1) rotates the
```
```  6065 premises of a theorem by n. Useful in conjunction with drule.
```
```  6066
```
```  6067 * Isar: the goal restriction operator [N] (default N = 1) evaluates a
```
```  6068 method expression within a sandbox consisting of the first N
```
```  6069 sub-goals, which need to exist.  For example, ``simp_all [3]''
```
```  6070 simplifies the first three sub-goals, while (rule foo, simp_all)[]
```
```  6071 simplifies all new goals that emerge from applying rule foo to the
```
```  6072 originally first one.
```
```  6073
```
```  6074 * Isar: schematic goals are no longer restricted to higher-order
```
```  6075 patterns; e.g. ``lemma "?P(?x)" by (rule TrueI)'' now works as
```
```  6076 expected.
```
```  6077
```
```  6078 * Isar: the conclusion of a long theorem statement is now either
```
```  6079 'shows' (a simultaneous conjunction, as before), or 'obtains'
```
```  6080 (essentially a disjunction of cases with local parameters and
```
```  6081 assumptions).  The latter allows to express general elimination rules
```
```  6082 adequately; in this notation common elimination rules look like this:
```
```  6083
```
```  6084   lemma exE:    -- "EX x. P x ==> (!!x. P x ==> thesis) ==> thesis"
```
```  6085     assumes "EX x. P x"
```
```  6086     obtains x where "P x"
```
```  6087
```
```  6088   lemma conjE:  -- "A & B ==> (A ==> B ==> thesis) ==> thesis"
```
```  6089     assumes "A & B"
```
```  6090     obtains A and B
```
```  6091
```
```  6092   lemma disjE:  -- "A | B ==> (A ==> thesis) ==> (B ==> thesis) ==> thesis"
```
```  6093     assumes "A | B"
```
```  6094     obtains
```
```  6095       A
```
```  6096     | B
```
```  6097
```
```  6098 The subsequent classical rules even refer to the formal "thesis"
```
```  6099 explicitly:
```
```  6100
```
```  6101   lemma classical:     -- "(~ thesis ==> thesis) ==> thesis"
```
```  6102     obtains "~ thesis"
```
```  6103
```
```  6104   lemma Peirce's_Law:  -- "((thesis ==> something) ==> thesis) ==> thesis"
```
```  6105     obtains "thesis ==> something"
```
```  6106
```
```  6107 The actual proof of an 'obtains' statement is analogous to that of the
```
```  6108 Isar proof element 'obtain', only that there may be several cases.
```
```  6109 Optional case names may be specified in parentheses; these will be
```
```  6110 available both in the present proof and as annotations in the
```
```  6111 resulting rule, for later use with the 'cases' method (cf. attribute
```
```  6112 case_names).
```
```  6113
```
```  6114 * Isar: the assumptions of a long theorem statement are available as
```
```  6115 "assms" fact in the proof context.  This is more appropriate than the
```
```  6116 (historical) "prems", which refers to all assumptions of the current
```
```  6117 context, including those from the target locale, proof body etc.
```
```  6118
```
```  6119 * Isar: 'print_statement' prints theorems from the current theory or
```
```  6120 proof context in long statement form, according to the syntax of a
```
```  6121 top-level lemma.
```
```  6122
```
```  6123 * Isar: 'obtain' takes an optional case name for the local context
```
```  6124 introduction rule (default "that").
```
```  6125
```
```  6126 * Isar: removed obsolete 'concl is' patterns.  INCOMPATIBILITY, use
```
```  6127 explicit (is "_ ==> ?foo") in the rare cases where this still happens
```
```  6128 to occur.
```
```  6129
```
```  6130 * Pure: syntax "CONST name" produces a fully internalized constant
```
```  6131 according to the current context.  This is particularly useful for
```
```  6132 syntax translations that should refer to internal constant
```
```  6133 representations independently of name spaces.
```
```  6134
```
```  6135 * Pure: syntax constant for foo (binder "FOO ") is called "foo_binder"
```
```  6136 instead of "FOO ". This allows multiple binder declarations to coexist
```
```  6137 in the same context.  INCOMPATIBILITY.
```
```  6138
```
```  6139 * Isar/locales: 'notation' provides a robust interface to the 'syntax'
```
```  6140 primitive that also works in a locale context (both for constants and
```
```  6141 fixed variables). Type declaration and internal syntactic representation
```
```  6142 of given constants retrieved from the context. Likewise, the
```
```  6143 'no_notation' command allows to remove given syntax annotations from the
```
```  6144 current context.
```
```  6145
```
```  6146 * Isar/locales: new derived specification elements 'axiomatization',
```
```  6147 'definition', 'abbreviation', which support type-inference, admit
```
```  6148 object-level specifications (equality, equivalence).  See also the
```
```  6149 isar-ref manual.  Examples:
```
```  6150
```
```  6151   axiomatization
```
```  6152     eq  (infix "===" 50) where
```
```  6153     eq_refl: "x === x" and eq_subst: "x === y ==> P x ==> P y"
```
```  6154
```
```  6155   definition "f x y = x + y + 1"
```
```  6156   definition g where "g x = f x x"
```
```  6157
```
```  6158   abbreviation
```
```  6159     neq  (infix "=!=" 50) where
```
```  6160     "x =!= y == ~ (x === y)"
```
```  6161
```
```  6162 These specifications may be also used in a locale context.  Then the
```
```  6163 constants being introduced depend on certain fixed parameters, and the
```
```  6164 constant name is qualified by the locale base name.  An internal
```
```  6165 abbreviation takes care for convenient input and output, making the
```
```  6166 parameters implicit and using the original short name.  See also
```
```  6167 src/HOL/ex/Abstract_NAT.thy for an example of deriving polymorphic
```
```  6168 entities from a monomorphic theory.
```
```  6169
```
```  6170 Presently, abbreviations are only available 'in' a target locale, but
```
```  6171 not inherited by general import expressions.  Also note that
```
```  6172 'abbreviation' may be used as a type-safe replacement for 'syntax' +
```
```  6173 'translations' in common applications.  The "no_abbrevs" print mode
```
```  6174 prevents folding of abbreviations in term output.
```
```  6175
```
```  6176 Concrete syntax is attached to specified constants in internal form,
```
```  6177 independently of name spaces.  The parse tree representation is
```
```  6178 slightly different -- use 'notation' instead of raw 'syntax', and
```
```  6179 'translations' with explicit "CONST" markup to accommodate this.
```
```  6180
```
```  6181 * Pure/Isar: unified syntax for new-style specification mechanisms
```
```  6182 (e.g.  'definition', 'abbreviation', or 'inductive' in HOL) admits
```
```  6183 full type inference and dummy patterns ("_").  For example:
```
```  6184
```
```  6185   definition "K x _ = x"
```
```  6186
```
```  6187   inductive conj for A B
```
```  6188   where "A ==> B ==> conj A B"
```
```  6189
```
```  6190 * Pure: command 'print_abbrevs' prints all constant abbreviations of
```
```  6191 the current context.  Print mode "no_abbrevs" prevents inversion of
```
```  6192 abbreviations on output.
```
```  6193
```
```  6194 * Isar/locales: improved parameter handling: use of locales "var" and
```
```  6195 "struct" no longer necessary; - parameter renamings are no longer
```
```  6196 required to be injective.  For example, this allows to define
```
```  6197 endomorphisms as locale endom = homom mult mult h.
```
```  6198
```
```  6199 * Isar/locales: changed the way locales with predicates are defined.
```
```  6200 Instead of accumulating the specification, the imported expression is
```
```  6201 now an interpretation.  INCOMPATIBILITY: different normal form of
```
```  6202 locale expressions.  In particular, in interpretations of locales with
```
```  6203 predicates, goals repesenting already interpreted fragments are not
```
```  6204 removed automatically.  Use methods `intro_locales' and
```
```  6205 `unfold_locales'; see below.
```
```  6206
```
```  6207 * Isar/locales: new methods `intro_locales' and `unfold_locales'
```
```  6208 provide backward reasoning on locales predicates.  The methods are
```
```  6209 aware of interpretations and discharge corresponding goals.
```
```  6210 `intro_locales' is less aggressive then `unfold_locales' and does not
```
```  6211 unfold predicates to assumptions.
```
```  6212
```
```  6213 * Isar/locales: the order in which locale fragments are accumulated
```
```  6214 has changed.  This enables to override declarations from fragments due
```
```  6215 to interpretations -- for example, unwanted simp rules.
```
```  6216
```
```  6217 * Isar/locales: interpretation in theories and proof contexts has been
```
```  6218 extended.  One may now specify (and prove) equations, which are
```
```  6219 unfolded in interpreted theorems.  This is useful for replacing
```
```  6220 defined concepts (constants depending on locale parameters) by
```
```  6221 concepts already existing in the target context.  Example:
```
```  6222
```
```  6223   interpretation partial_order ["op <= :: [int, int] => bool"]
```
```  6224     where "partial_order.less (op <=) (x::int) y = (x < y)"
```
```  6225
```
```  6226 Typically, the constant `partial_order.less' is created by a
```
```  6227 definition specification element in the context of locale
```
```  6228 partial_order.
```
```  6229
```
```  6230 * Method "induct": improved internal context management to support
```
```  6231 local fixes and defines on-the-fly. Thus explicit meta-level
```
```  6232 connectives !!  and ==> are rarely required anymore in inductive goals
```
```  6233 (using object-logic connectives for this purpose has been long
```
```  6234 obsolete anyway). Common proof patterns are explained in
```
```  6235 src/HOL/Induct/Common_Patterns.thy, see also
```
```  6236 src/HOL/Isar_examples/Puzzle.thy and src/HOL/Lambda for realistic
```
```  6237 examples.
```
```  6238
```
```  6239 * Method "induct": improved handling of simultaneous goals. Instead of
```
```  6240 introducing object-level conjunction, the statement is now split into
```
```  6241 several conclusions, while the corresponding symbolic cases are nested
```
```  6242 accordingly. INCOMPATIBILITY, proofs need to be structured explicitly,
```
```  6243 see src/HOL/Induct/Common_Patterns.thy, for example.
```
```  6244
```
```  6245 * Method "induct": mutual induction rules are now specified as a list
```
```  6246 of rule sharing the same induction cases. HOL packages usually provide
```
```  6247 foo_bar.inducts for mutually defined items foo and bar (e.g. inductive
```
```  6248 predicates/sets or datatypes). INCOMPATIBILITY, users need to specify
```
```  6249 mutual induction rules differently, i.e. like this:
```
```  6250
```
```  6251   (induct rule: foo_bar.inducts)
```
```  6252   (induct set: foo bar)
```
```  6253   (induct pred: foo bar)
```
```  6254   (induct type: foo bar)
```
```  6255
```