1Isabelle NEWS -- history of user-relevant changes
2=================================================
3
4(Note: Isabelle/jEdit shows a tree-view of the NEWS file in Sidekick.)
5
6
7New in Isabelle2020 (April 2020)
8--------------------------------
9
10*** General ***
11
12* Session ROOT files need to specify explicit 'directories' for import
13of theory files. Directories cannot be shared by different sessions.
14(Recall that import of theories from other sessions works via
15session-qualified theory names, together with suitable 'sessions'
16declarations in the ROOT.)
17
18* Internal derivations record dependencies on oracles and other theorems
19accurately, including the implicit type-class reasoning wrt. proven
20class relations and type arities. In particular, the formal tagging with
21"Pure.skip_proofs" of results stemming from "instance ... sorry" is now
22propagated properly to theorems depending on such type instances.
23
24* Command 'sorry' (oracle "Pure.skip_proofs") is more precise about the
25actual proposition that is assumed in the goal and proof context. This
26requires at least Proofterm.proofs = 1 to show up in theorem
27dependencies.
28
29* Command 'thm_oracles' prints all oracles used in given theorems,
30covering the full graph of transitive dependencies.
31
32* Command 'thm_deps' prints immediate theorem dependencies of the given
33facts. The former graph visualization has been discontinued, because it
34was hardly usable.
35
36* Refined treatment of proof terms, including type-class proofs for
37minor object-logics (FOL, FOLP, Sequents).
38
39* The inference kernel is now confined to one main module: structure
40Thm, without the former circular dependency on structure Axclass.
41
42* Mixfix annotations may use "' " (single quote followed by space) to
43separate delimiters (as documented in the isar-ref manual), without
44requiring an auxiliary empty block. A literal single quote needs to be
45escaped properly. Minor INCOMPATIBILITY.
46
47
48*** Isar ***
49
50* The proof method combinator (subproofs m) applies the method
51expression m consecutively to each subgoal, constructing individual
52subproofs internally. This impacts the internal construction of proof
53terms: it makes a cascade of let-expressions within the derivation tree
54and may thus improve scalability.
55
56* Attribute "trace_locales" activates tracing of locale instances during
57roundup. It replaces the diagnostic command 'print_dependencies', which
58has been discontinued.
59
60
61*** Isabelle/jEdit Prover IDE ***
62
63* Prover IDE startup is now much faster, because theory dependencies are
64no longer explored in advance. The overall session structure with its
65declarations of 'directories' is sufficient to locate theory files. Thus
66the "session focus" of option "isabelle jedit -S" has become obsolete
67(likewise for "isabelle vscode_server -S"). Existing option "-R" is both
68sufficient and more convenient to start editing a particular session.
69
70* Actions isabelle.tooltip (CS+b) and isabelle.message (CS+m) display
71tooltip message popups, corresponding to mouse hovering with/without the
72CONTROL/COMMAND key pressed.
73
74* The following actions allow to navigate errors within the current
75document snapshot:
76
77  isabelle.first-error (CS+a)
78  isabelle.last-error (CS+z)
79  isabelle.next-error (CS+n)
80  isabelle.prev-error (CS+p)
81
82* Support more brackets: \<llangle> \<rrangle> (intended for implicit argument syntax).
83
84* Action isabelle.jconsole (menu item Plugins / Isabelle / Java/VM
85Monitor) applies the jconsole tool on the running Isabelle/jEdit
86process. This allows to monitor resource usage etc.
87
88* More adequate default font sizes for Linux on HD / UHD displays:
89automatic font scaling is usually absent on Linux, in contrast to
90Windows and macOS.
91
92* The default value for the jEdit property "view.antiAlias" (menu item
93Utilities / Global Options / Text Area / Anti Aliased smooth text) is
94now "subpixel HRGB", instead of former "standard". Especially on Linux
95this often leads to faster text rendering, but can also cause problems
96with odd color shades. An alternative is to switch back to "standard"
97here, and set the following Java system property:
98
99    isabelle jedit -Dsun.java2d.opengl=true
100
101This can be made persistent via JEDIT_JAVA_OPTIONS in
102$ISABELLE_HOME_USER/etc/settings. For the "Isabelle2020" desktop
103application there is a corresponding options file in the same directory.
104
105
106*** Isabelle/VSCode Prover IDE ***
107
108* Update of State and Preview panels to use new WebviewPanel API of
109VSCode.
110
111
112*** HOL ***
113
114* Improvements of the 'lift_bnf' command:
115  - Add support for quotient types.
116  - Generate transfer rules for the lifted map/set/rel/pred constants
117    (theorems "<type>.<constant>_transfer_raw").
118
119* Term_XML.Encode/Decode.term uses compact representation of Const
120"typargs" from the given declaration environment. This also makes more
121sense for translations to lambda-calculi with explicit polymorphism.
122INCOMPATIBILITY, use Term_XML.Encode/Decode.term_raw in special
123applications.
124
125* ASCII membership syntax concerning big operators for infimum and
126supremum has been discontinued. INCOMPATIBILITY.
127
128* Removed multiplicativity assumption from class
129"normalization_semidom". Introduced various new intermediate classes
130with the multiplicativity assumption; many theorem statements
131(especially involving GCD/LCM) had to be adapted. This allows for a more
132natural instantiation of the algebraic typeclasses for e.g. Gaussian
133integers. INCOMPATIBILITY.
134
135* Clear distinction between types for bits (False / True) and Z2 (0 /
1361): theory HOL-Library.Bit has been renamed accordingly.
137INCOMPATIBILITY.
138
139* Dynamic facts "algebra_split_simps" and "field_split_simps" correspond
140to algebra_simps and field_simps but contain more aggressive rules
141potentially splitting goals; algebra_split_simps roughly replaces
142sign_simps and field_split_simps can be used instead of divide_simps.
143INCOMPATIBILITY.
144
145* Theory HOL.Complete_Lattices:
146renamed Inf_Sup -> Inf_eq_Sup and Sup_Inf -> Sup_eq_Inf
147
148* Theory HOL-Library.Monad_Syntax: infix operation "bind" (\<bind>)
149associates to the left now as is customary.
150
151* Theory HOL-Library.Ramsey: full finite Ramsey's theorem with
152multiple colours and arbitrary exponents.
153
154* Session HOL-Proofs: build faster thanks to better treatment of proof
155terms in Isabelle/Pure.
156
157* Session HOL-Word: bitwise NOT-operator has proper prefix syntax. Minor
158INCOMPATIBILITY.
159
160* Session HOL-Analysis: proof method "metric" implements a decision
161procedure for simple linear statements in metric spaces.
162
163* Session HOL-Complex_Analysis has been split off from HOL-Analysis.
164
165
166*** ML ***
167
168* Theory construction may be forked internally, the operation
169Theory.join_theory recovers a single result theory. See also the example
170in theory "HOL-ex.Join_Theory".
171
172* Antiquotation @{oracle_name} inlines a formally checked oracle name.
173
174* Minimal support for a soft-type system within the Isabelle logical
175framework (module Soft_Type_System).
176
177* Former Variable.auto_fixes has been replaced by slightly more general
178Proof_Context.augment: it is subject to an optional soft-type system of
179the underlying object-logic. Minor INCOMPATIBILITY.
180
181* More scalable Export.export using XML.tree to avoid premature string
182allocations, with convenient shortcut XML.blob. Minor INCOMPATIBILITY.
183
184* Prover IDE support for the underlying Poly/ML compiler (not the basis
185library). Open $ML_SOURCES/ROOT.ML in Isabelle/jEdit to browse the
186implementation with full markup.
187
188
189*** System ***
190
191* Standard rendering for more Isabelle symbols: \<llangle> \<rrangle> \<bbar> \<sqdot>
192
193* The command-line tool "isabelle scala_project" creates a Gradle
194project configuration for Isabelle/Scala/jEdit, to support Scala IDEs
195such as IntelliJ IDEA.
196
197* The command-line tool "isabelle phabricator_setup" facilitates
198self-hosting of the Phabricator software-development platform, with
199support for Git, Mercurial, Subversion repositories. This helps to avoid
200monoculture and to escape the gravity of centralized version control by
201Github and/or Bitbucket. For further documentation, see chapter
202"Phabricator server administration" in the "system" manual. A notable
203example installation is https://isabelle-dev.sketis.net/.
204
205* The command-line tool "isabelle hg_setup" simplifies the setup of
206Mercurial repositories, with hosting via Phabricator or SSH file server
207access.
208
209* The command-line tool "isabelle imports" has been discontinued: strict
210checking of session directories enforces session-qualified theory names
211in applications -- users are responsible to specify session ROOT entries
212properly.
213
214* The command-line tool "isabelle dump" and its underlying
215Isabelle/Scala module isabelle.Dump has become more scalable, by
216splitting sessions and supporting a base logic image. Minor
217INCOMPATIBILITY in options and parameters.
218
219* The command-line tool "isabelle build_docker" has been slightly
220improved: it is now properly documented in the "system" manual.
221
222* Isabelle/Scala support for the Linux platform (Ubuntu): packages,
223users, system services.
224
225* Isabelle/Scala support for proof terms (with full type/term
226information) in module isabelle.Term.
227
228* Isabelle/Scala: more scalable output of YXML files, e.g. relevant for
229"isabelle dump".
230
231* Theory export via Isabelle/Scala has been reworked. The former "fact"
232name space is now split into individual "thm" items: names are
233potentially indexed, such as "foo" for singleton facts, or "bar(1)",
234"bar(2)", "bar(3)" for multi-facts. Theorem dependencies are now
235exported as well: this spans an overall dependency graph of internal
236inferences; it might help to reconstruct the formal structure of theory
237libraries. See also the module isabelle.Export_Theory in Isabelle/Scala.
238
239* Theory export of structured specifications, based on internal
240declarations of Spec_Rules by packages like 'definition', 'inductive',
241'primrec', 'function'.
242
243* Old settings variables ISABELLE_PLATFORM and ISABELLE_WINDOWS_PLATFORM
244have been discontinued -- deprecated since Isabelle2018.
245
246* More complete x86_64 platform support on macOS, notably Catalina where
247old x86 has been discontinued.
248
249* Update to GHC stack 2.1.3 with stackage lts-13.19/ghc-8.6.4.
250
251* Update to OCaml Opam 2.0.6 (using ocaml 4.05.0 as before).
252
253
254
255New in Isabelle2019 (June 2019)
256-------------------------------
257
258*** General ***
259
260* The font collection "Isabelle DejaVu" is systematically derived from
261the existing "DejaVu" fonts, with variants "Sans Mono", "Sans", "Serif"
262and styles "Normal", "Bold", "Italic/Oblique", "Bold-Italic/Oblique".
263The DejaVu base fonts are retricted to well-defined Unicode ranges and
264augmented by special Isabelle symbols, taken from the former
265"IsabelleText" font (which is no longer provided separately). The line
266metrics and overall rendering quality is closer to original DejaVu.
267INCOMPATIBILITY with display configuration expecting the old
268"IsabelleText" font: use e.g. "Isabelle DejaVu Sans Mono" instead.
269
270* The Isabelle fonts render "\<inverse>" properly as superscript "-1".
271
272* Old-style inner comments (* ... *) within the term language are no
273longer supported (legacy feature in Isabelle2018).
274
275* Old-style {* verbatim *} tokens are explicitly marked as legacy
276feature and will be removed soon. Use \<open>cartouche\<close> syntax instead, e.g.
277via "isabelle update_cartouches -t" (available since Isabelle2015).
278
279* Infix operators that begin or end with a "*" are now parenthesized
280without additional spaces, e.g. "(*)" instead of "( * )". Minor
281INCOMPATIBILITY.
282
283* Mixfix annotations may use cartouches instead of old-style double
284quotes, e.g. (infixl \<open>+\<close> 60). The command-line tool "isabelle update -u
285mixfix_cartouches" allows to update existing theory sources
286automatically.
287
288* ML setup commands (e.g. 'setup', 'method_setup', 'parse_translation')
289need to provide a closed expression -- without trailing semicolon. Minor
290INCOMPATIBILITY.
291
292* Commands 'generate_file', 'export_generated_files', and
293'compile_generated_files' support a stateless (PIDE-conformant) model
294for generated sources and compiled binaries of other languages. The
295compilation process is managed in Isabelle/ML, and results exported to
296the session database for further use (e.g. with "isabelle export" or
297"isabelle build -e").
298
299
300*** Isabelle/jEdit Prover IDE ***
301
302* Fonts for the text area, gutter, GUI elements etc. use the "Isabelle
303DejaVu" collection by default, which provides uniform rendering quality
304with the usual Isabelle symbols. Line spacing no longer needs to be
305adjusted: properties for the old IsabelleText font had "Global Options /
306Text Area / Extra vertical line spacing (in pixels): -2", it now
307defaults to 1, but 0 works as well.
308
309* The jEdit File Browser is more prominent in the default GUI layout of
310Isabelle/jEdit: various virtual file-systems provide access to Isabelle
311resources, notably via "favorites:" (or "Edit Favorites").
312
313* Further markup and rendering for "plain text" (e.g. informal prose)
314and "raw text" (e.g. verbatim sources). This improves the visual
315appearance of formal comments inside the term language, or in general
316for repeated alternation of formal and informal text.
317
318* Action "isabelle-export-browser" points the File Browser to the theory
319exports of the current buffer, based on the "isabelle-export:" virtual
320file-system. The directory view needs to be reloaded manually to follow
321ongoing document processing.
322
323* Action "isabelle-session-browser" points the File Browser to session
324information, based on the "isabelle-session:" virtual file-system. Its
325entries are structured according to chapter / session names, the open
326operation is redirected to the session ROOT file.
327
328* Support for user-defined file-formats via class isabelle.File_Format
329in Isabelle/Scala (e.g. see isabelle.Bibtex.File_Format), configured via
330the shell function "isabelle_file_format" in etc/settings (e.g. of an
331Isabelle component).
332
333* System option "jedit_text_overview" allows to disable the text
334overview column.
335
336* Command-line options "-s" and "-u" of "isabelle jedit" override the
337default for system option "system_heaps" that determines the heap
338storage directory for "isabelle build". Option "-n" is now clearly
339separated from option "-s".
340
341* The Isabelle/jEdit desktop application uses the same options as
342"isabelle jedit" for its internal "isabelle build" process: the implicit
343option "-o system_heaps" (or "-s") has been discontinued. This reduces
344the potential for surprise wrt. command-line tools.
345
346* The official download of the Isabelle/jEdit application already
347contains heap images for Isabelle/HOL within its main directory: thus
348the first encounter becomes faster and more robust (e.g. when run from a
349read-only directory).
350
351* Isabelle DejaVu fonts are available with hinting by default, which is
352relevant for low-resolution displays. This may be disabled via system
353option "isabelle_fonts_hinted = false" in
354$ISABELLE_HOME_USER/etc/preferences -- it occasionally yields better
355results.
356
357* OpenJDK 11 has quite different font rendering, with better glyph
358shapes and improved sub-pixel anti-aliasing. In some situations results
359might be *worse* than Oracle Java 8, though -- a proper HiDPI / UHD
360display is recommended.
361
362* OpenJDK 11 supports GTK version 2.2 and 3 (according to system
363property jdk.gtk.version). The factory default is version 3, but
364ISABELLE_JAVA_SYSTEM_OPTIONS includes "-Djdk.gtk.version=2.2" to make
365this more conservative (as in Java 8). Depending on the GTK theme
366configuration, "-Djdk.gtk.version=3" might work better or worse.
367
368
369*** Document preparation ***
370
371* Document markers are formal comments of the form \<^marker>\<open>marker_body\<close> that
372are stripped from document output: the effect is to modify the semantic
373presentation context or to emit markup to the PIDE document. Some
374predefined markers are taken from the Dublin Core Metadata Initiative,
375e.g. \<^marker>\<open>contributor arg\<close> or \<^marker>\<open>license arg\<close> and produce PIDE markup that
376can be retrieved from the document database.
377
378* Old-style command tags %name are re-interpreted as markers with
379proof-scope \<^marker>\<open>tag (proof) name\<close> and produce LaTeX environments as
380before. Potential INCOMPATIBILITY: multiple markers are composed in
381canonical order, resulting in a reversed list of tags in the
382presentation context.
383
384* Marker \<^marker>\<open>tag name\<close> does not apply to the proof of a top-level goal
385statement by default (e.g. 'theorem', 'lemma'). This is a subtle change
386of semantics wrt. old-style %name.
387
388* In Isabelle/jEdit, the string "\tag" may be completed to a "\<^marker>\<open>tag \<close>"
389template.
390
391* Document antiquotation option "cartouche" indicates if the output
392should be delimited as cartouche; this takes precedence over the
393analogous option "quotes".
394
395* Many document antiquotations are internally categorized as "embedded"
396and expect one cartouche argument, which is typically used with the
397\<^control>\<open>cartouche\<close> notation (e.g. \<^term>\<open>\<lambda>x y. x\<close>). The cartouche
398delimiters are stripped in output of the source (antiquotation option
399"source"), but it is possible to enforce delimiters via option
400"source_cartouche", e.g. @{term [source_cartouche] \<open>\<lambda>x y. x\<close>}.
401
402
403*** Isar ***
404
405* Implicit cases goal1, goal2, goal3, etc. have been discontinued
406(legacy feature since Isabelle2016).
407
408* More robust treatment of structural errors: begin/end blocks take
409precedence over goal/proof. This is particularly relevant for the
410headless PIDE session and server.
411
412* Command keywords of kind thy_decl / thy_goal may be more specifically
413fit into the traditional document model of "definition-statement-proof"
414via thy_defn / thy_stmt / thy_goal_defn / thy_goal_stmt.
415
416
417*** HOL ***
418
419* Command 'export_code' produces output as logical files within the
420theory context, as well as formal session exports that can be
421materialized via command-line tools "isabelle export" or "isabelle build
422-e" (with 'export_files' in the session ROOT). Isabelle/jEdit also
423provides a virtual file-system "isabelle-export:" that can be explored
424in the regular file-browser. A 'file_prefix' argument allows to specify
425an explicit name prefix for the target file (SML, OCaml, Scala) or
426directory (Haskell); the default is "export" with a consecutive number
427within each theory.
428
429* Command 'export_code': the 'file' argument is now legacy and will be
430removed soon: writing to the physical file-system is not well-defined in
431a reactive/parallel application like Isabelle. The empty 'file' argument
432has been discontinued already: it is superseded by the file-browser in
433Isabelle/jEdit on "isabelle-export:". Minor INCOMPATIBILITY.
434
435* Command 'code_reflect' no longer supports the 'file' argument: it has
436been superseded by 'file_prefix' for stateless file management as in
437'export_code'. Minor INCOMPATIBILITY.
438
439* Code generation for OCaml: proper strings are used for literals.
440Minor INCOMPATIBILITY.
441
442* Code generation for OCaml: Zarith supersedes Nums as library for
443proper integer arithmetic. The library is located via standard
444invocations of "ocamlfind" (via ISABELLE_OCAMLFIND settings variable).
445The environment provided by "isabelle ocaml_setup" already contains this
446tool and the required packages. Minor INCOMPATIBILITY.
447
448* Code generation for Haskell: code includes for Haskell must contain
449proper module frame, nothing is added magically any longer.
450INCOMPATIBILITY.
451
452* Code generation: slightly more conventional syntax for 'code_stmts'
453antiquotation. Minor INCOMPATIBILITY.
454
455* Theory List: the precedence of the list_update operator has changed:
456"f a [n := x]" now needs to be written "(f a)[n := x]".
457
458* The functions \<Union>, \<Inter>, \<Squnion>, \<Sqinter> (not the corresponding binding operators)
459now have the same precedence as any other prefix function symbol. Minor
460INCOMPATIBILITY.
461
462* Simplified syntax setup for big operators under image. In rare
463situations, type conversions are not inserted implicitly any longer
464and need to be given explicitly. Auxiliary abbreviations INFIMUM,
465SUPREMUM, UNION, INTER should now rarely occur in output and are just
466retained as migration auxiliary. Abbreviations MINIMUM and MAXIMUM
467are gone INCOMPATIBILITY.
468
469* The simplifier uses image_cong_simp as a congruence rule. The historic
470and not really well-formed congruence rules INF_cong*, SUP_cong*, are
471not used by default any longer. INCOMPATIBILITY; consider using declare
472image_cong_simp [cong del] in extreme situations.
473
474* INF_image and SUP_image are no default simp rules any longer.
475INCOMPATIBILITY, prefer image_comp as simp rule if needed.
476
477* Strong congruence rules (with =simp=> in the premises) for constant f
478are now uniformly called f_cong_simp, in accordance with congruence
479rules produced for mappers by the datatype package. INCOMPATIBILITY.
480
481* Retired lemma card_Union_image; use the simpler card_UN_disjoint
482instead. INCOMPATIBILITY.
483
484* Facts sum_mset.commute and prod_mset.commute have been renamed to
485sum_mset.swap and prod_mset.swap, similarly to sum.swap and prod.swap.
486INCOMPATIBILITY.
487
488* ML structure Inductive: slightly more conventional naming schema.
489Minor INCOMPATIBILITY.
490
491* ML: Various _global variants of specification tools have been removed.
492Minor INCOMPATIBILITY, prefer combinators
493Named_Target.theory_map[_result] to lift specifications to the global
494theory level.
495
496* Theory HOL-Library.Simps_Case_Conv: 'case_of_simps' now supports
497overlapping and non-exhaustive patterns and handles arbitrarily nested
498patterns. It uses on the same algorithm as HOL-Library.Code_Lazy, which
499assumes sequential left-to-right pattern matching. The generated
500equation no longer tuples the arguments on the right-hand side.
501INCOMPATIBILITY.
502
503* Theory HOL-Library.Multiset: the \<Union># operator now has the same
504precedence as any other prefix function symbol.
505
506* Theory HOL-Library.Cardinal_Notations has been discontinued in favor
507of the bundle cardinal_syntax (available in theory Main). Minor
508INCOMPATIBILITY.
509
510* Session HOL-Library and HOL-Number_Theory: Exponentiation by squaring,
511used for computing powers in class "monoid_mult" and modular
512exponentiation.
513
514* Session HOL-Computational_Algebra: Formal Laurent series and overhaul
515of Formal power series.
516
517* Session HOL-Number_Theory: More material on residue rings in
518Carmichael's function, primitive roots, more properties for "ord".
519
520* Session HOL-Analysis: Better organization and much more material
521at the level of abstract topological spaces.
522
523* Session HOL-Algebra: Free abelian groups, etc., ported from HOL Light;
524 algebraic closure of a field by de Vilhena and Baillon.
525
526* Session HOL-Homology has been added. It is a port of HOL Light's
527homology library, with new proofs of "invariance of domain" and related
528results.
529
530* Session HOL-SPARK: .prv files are no longer written to the
531file-system, but exported to the session database. Results may be
532retrieved via "isabelle build -e HOL-SPARK-Examples" on the
533command-line.
534
535* Sledgehammer:
536  - The URL for SystemOnTPTP, which is used by remote provers, has been
537    updated.
538  - The machine-learning-based filter MaSh has been optimized to take
539    less time (in most cases).
540
541* SMT: reconstruction is now possible using the SMT solver veriT.
542
543* Session HOL-Word:
544  * New theory More_Word as comprehensive entrance point.
545  * Merged type class bitss into type class bits.
546  INCOMPATIBILITY.
547
548
549*** ML ***
550
551* Command 'generate_file' allows to produce sources for other languages,
552with antiquotations in the Isabelle context (only the control-cartouche
553form). The default "cartouche" antiquotation evaluates an ML expression
554of type string and inlines the result as a string literal of the target
555language. For example, this works for Haskell as follows:
556
557  generate_file "Pure.hs" = \<open>
558  module Isabelle.Pure where
559    allConst, impConst, eqConst :: String
560    allConst = \<open>\<^const_name>\<open>Pure.all\<close>\<close>
561    impConst = \<open>\<^const_name>\<open>Pure.imp\<close>\<close>
562    eqConst = \<open>\<^const_name>\<open>Pure.eq\<close>\<close>
563  \<close>
564
565See also commands 'export_generated_files' and 'compile_generated_files'
566to use the results.
567
568* ML evaluation (notably via command 'ML' or 'ML_file') is subject to
569option ML_environment to select a named environment, such as "Isabelle"
570for Isabelle/ML, or "SML" for official Standard ML.
571
572* ML antiquotation @{master_dir} refers to the master directory of the
573underlying theory, i.e. the directory of the theory file.
574
575* ML antiquotation @{verbatim} inlines its argument as string literal,
576preserving newlines literally. The short form \<^verbatim>\<open>abc\<close> is particularly
577useful.
578
579* Local_Theory.reset is no longer available in user space. Regular
580definitional packages should use balanced blocks of
581Local_Theory.open_target versus Local_Theory.close_target instead, or
582the Local_Theory.subtarget(_result) combinator. Rare INCOMPATIBILITY.
583
584* Original PolyML.pointerEq is retained as a convenience for tools that
585don't use Isabelle/ML (where this is called "pointer_eq").
586
587
588*** System ***
589
590* Update to OpenJDK 11: the current long-term support version of Java.
591
592* Update to Poly/ML 5.8 allows to use the native x86_64 platform without
593the full overhead of 64-bit values everywhere. This special x86_64_32
594mode provides up to 16GB ML heap, while program code and stacks are
595allocated elsewhere. Thus approx. 5 times more memory is available for
596applications compared to old x86 mode (which is no longer used by
597Isabelle). The switch to the x86_64 CPU architecture also avoids
598compatibility problems with Linux and macOS, where 32-bit applications
599are gradually phased out.
600
601* System option "checkpoint" has been discontinued: obsolete thanks to
602improved memory management in Poly/ML.
603
604* System option "system_heaps" determines where to store the session
605image of "isabelle build" (and other tools using that internally).
606Former option "-s" is superseded by option "-o system_heaps".
607INCOMPATIBILITY in command-line syntax.
608
609* Session directory $ISABELLE_HOME/src/Tools/Haskell provides some
610source modules for Isabelle tools implemented in Haskell, notably for
611Isabelle/PIDE.
612
613* The command-line tool "isabelle build -e" retrieves theory exports
614from the session build database, using 'export_files' in session ROOT
615entries.
616
617* The command-line tool "isabelle update" uses Isabelle/PIDE in
618batch-mode to update theory sources based on semantic markup produced in
619Isabelle/ML. Actual updates depend on system options that may be enabled
620via "-u OPT" (for "update_OPT"), see also $ISABELLE_HOME/etc/options
621section "Theory update". Theory sessions are specified as in "isabelle
622dump".
623
624* The command-line tool "isabelle update -u control_cartouches" changes
625antiquotations into control-symbol format (where possible): @{NAME}
626becomes \<^NAME> and @{NAME ARG} becomes \<^NAME>\<open>ARG\<close>.
627
628* Support for Isabelle command-line tools defined in Isabelle/Scala.
629Instances of class Isabelle_Scala_Tools may be configured via the shell
630function "isabelle_scala_tools" in etc/settings (e.g. of an Isabelle
631component).
632
633* Isabelle Server command "use_theories" supports "nodes_status_delay"
634for continuous output of node status information. The time interval is
635specified in seconds; a negative value means it is disabled (default).
636
637* Isabelle Server command "use_theories" terminates more robustly in the
638presence of structurally broken sources: full consolidation of theories
639is no longer required.
640
641* OCaml tools and libraries are now accesed via ISABELLE_OCAMLFIND,
642which needs to point to a suitable version of "ocamlfind" (e.g. via
643OPAM, see below). INCOMPATIBILITY: settings variables ISABELLE_OCAML and
644ISABELLE_OCAMLC are no longer supported.
645
646* Support for managed installations of Glasgow Haskell Compiler and
647OCaml via the following command-line tools:
648
649  isabelle ghc_setup
650  isabelle ghc_stack
651
652  isabelle ocaml_setup
653  isabelle ocaml_opam
654
655The global installation state is determined by the following settings
656(and corresponding directory contents):
657
658  ISABELLE_STACK_ROOT
659  ISABELLE_STACK_RESOLVER
660  ISABELLE_GHC_VERSION
661
662  ISABELLE_OPAM_ROOT
663  ISABELLE_OCAML_VERSION
664
665After setup, the following Isabelle settings are automatically
666redirected (overriding existing user settings):
667
668  ISABELLE_GHC
669
670  ISABELLE_OCAMLFIND
671
672The old meaning of these settings as locally installed executables may
673be recovered by purging the directories ISABELLE_STACK_ROOT /
674ISABELLE_OPAM_ROOT, or by resetting these variables in
675$ISABELLE_HOME_USER/etc/settings.
676
677
678
679New in Isabelle2018 (August 2018)
680---------------------------------
681
682*** General ***
683
684* Session-qualified theory names are mandatory: it is no longer possible
685to refer to unqualified theories from the parent session.
686INCOMPATIBILITY for old developments that have not been updated to
687Isabelle2017 yet (using the "isabelle imports" tool).
688
689* Only the most fundamental theory names are global, usually the entry
690points to major logic sessions: Pure, Main, Complex_Main, HOLCF, IFOL,
691FOL, ZF, ZFC etc. INCOMPATIBILITY, need to use qualified names for
692formerly global "HOL-Probability.Probability" and "HOL-SPARK.SPARK".
693
694* Global facts need to be closed: no free variables and no hypotheses.
695Rare INCOMPATIBILITY.
696
697* Facts stemming from locale interpretation are subject to lazy
698evaluation for improved performance. Rare INCOMPATIBILITY: errors
699stemming from interpretation morphisms might be deferred and thus
700difficult to locate; enable system option "strict_facts" temporarily to
701avoid this.
702
703* Marginal comments need to be written exclusively in the new-style form
704"\<comment> \<open>text\<close>", old ASCII variants like "-- {* ... *}" are no longer
705supported. INCOMPATIBILITY, use the command-line tool "isabelle
706update_comments" to update existing theory files.
707
708* Old-style inner comments (* ... *) within the term language are legacy
709and will be discontinued soon: use formal comments "\<comment> \<open>...\<close>" or "\<^cancel>\<open>...\<close>"
710instead.
711
712* The "op <infix-op>" syntax for infix operators has been replaced by
713"(<infix-op>)". If <infix-op> begins or ends with a "*", there needs to
714be a space between the "*" and the corresponding parenthesis.
715INCOMPATIBILITY, use the command-line tool "isabelle update_op" to
716convert theory and ML files to the new syntax. Because it is based on
717regular expression matching, the result may need a bit of manual
718postprocessing. Invoking "isabelle update_op" converts all files in the
719current directory (recursively). In case you want to exclude conversion
720of ML files (because the tool frequently also converts ML's "op"
721syntax), use option "-m".
722
723* Theory header 'abbrevs' specifications need to be separated by 'and'.
724INCOMPATIBILITY.
725
726* Command 'external_file' declares the formal dependency on the given
727file name, such that the Isabelle build process knows about it, but
728without specific Prover IDE management.
729
730* Session ROOT entries no longer allow specification of 'files'. Rare
731INCOMPATIBILITY, use command 'external_file' within a proper theory
732context.
733
734* Session root directories may be specified multiple times: each
735accessible ROOT file is processed only once. This facilitates
736specification of $ISABELLE_HOME_USER/ROOTS or command-line options like
737-d or -D for "isabelle build" and "isabelle jedit". Example:
738
739  isabelle build -D '~~/src/ZF'
740
741* The command 'display_drafts' has been discontinued. INCOMPATIBILITY,
742use action "isabelle.draft" (or "print") in Isabelle/jEdit instead.
743
744* In HTML output, the Isabelle symbol "\<hyphen>" is rendered as explicit
745Unicode hyphen U+2010, to avoid unclear meaning of the old "soft hyphen"
746U+00AD. Rare INCOMPATIBILITY, e.g. copy-paste of historic Isabelle HTML
747output.
748
749
750*** Isabelle/jEdit Prover IDE ***
751
752* The command-line tool "isabelle jedit" provides more flexible options
753for session management:
754
755  - option -R builds an auxiliary logic image with all theories from
756    other sessions that are not already present in its parent
757
758  - option -S is like -R, with a focus on the selected session and its
759    descendants (this reduces startup time for big projects like AFP)
760
761  - option -A specifies an alternative ancestor session for options -R
762    and -S
763
764  - option -i includes additional sessions into the name-space of
765    theories
766
767  Examples:
768    isabelle jedit -R HOL-Number_Theory
769    isabelle jedit -R HOL-Number_Theory -A HOL
770    isabelle jedit -d '$AFP' -S Formal_SSA -A HOL
771    isabelle jedit -d '$AFP' -S Formal_SSA -A HOL-Analysis
772    isabelle jedit -d '$AFP' -S Formal_SSA -A HOL-Analysis -i CryptHOL
773
774* PIDE markup for session ROOT files: allows to complete session names,
775follow links to theories and document files etc.
776
777* Completion supports theory header imports, using theory base name.
778E.g. "Prob" may be completed to "HOL-Probability.Probability".
779
780* Named control symbols (without special Unicode rendering) are shown as
781bold-italic keyword. This is particularly useful for the short form of
782antiquotations with control symbol: \<^name>\<open>argument\<close>. The action
783"isabelle.antiquoted_cartouche" turns an antiquotation with 0 or 1
784arguments into this format.
785
786* Completion provides templates for named symbols with arguments,
787e.g. "\<comment> \<open>ARGUMENT\<close>" or "\<^emph>\<open>ARGUMENT\<close>".
788
789* Slightly more parallel checking, notably for high priority print
790functions (e.g. State output).
791
792* The view title is set dynamically, according to the Isabelle
793distribution and the logic session name. The user can override this via
794set-view-title (stored persistently in $JEDIT_SETTINGS/perspective.xml).
795
796* System options "spell_checker_include" and "spell_checker_exclude"
797supersede former "spell_checker_elements" to determine regions of text
798that are subject to spell-checking. Minor INCOMPATIBILITY.
799
800* Action "isabelle.preview" is able to present more file formats,
801notably bibtex database files and ML files.
802
803* Action "isabelle.draft" is similar to "isabelle.preview", but shows a
804plain-text document draft. Both are available via the menu "Plugins /
805Isabelle".
806
807* When loading text files, the Isabelle symbols encoding UTF-8-Isabelle
808is only used if there is no conflict with existing Unicode sequences in
809the file. Otherwise, the fallback encoding is plain UTF-8 and Isabelle
810symbols remain in literal \<symbol> form. This avoids accidental loss of
811Unicode content when saving the file.
812
813* Bibtex database files (.bib) are semantically checked.
814
815* Update to jedit-5.5.0, the latest release.
816
817
818*** Isabelle/VSCode Prover IDE ***
819
820* HTML preview of theories and other file-formats similar to
821Isabelle/jEdit.
822
823* Command-line tool "isabelle vscode_server" accepts the same options
824-A, -R, -S, -i for session selection as "isabelle jedit". This is
825relevant for isabelle.args configuration settings in VSCode. The former
826option -A (explore all known session files) has been discontinued: it is
827enabled by default, unless option -S is used to focus on a particular
828spot in the session structure. INCOMPATIBILITY.
829
830
831*** Document preparation ***
832
833* Formal comments work uniformly in outer syntax, inner syntax (term
834language), Isabelle/ML and some other embedded languages of Isabelle.
835See also "Document comments" in the isar-ref manual. The following forms
836are supported:
837
838  - marginal text comment: \<comment> \<open>\<dots>\<close>
839  - canceled source: \<^cancel>\<open>\<dots>\<close>
840  - raw LaTeX: \<^latex>\<open>\<dots>\<close>
841
842* Outside of the inner theory body, the default presentation context is
843theory Pure. Thus elementary antiquotations may be used in markup
844commands (e.g. 'chapter', 'section', 'text') and formal comments.
845
846* System option "document_tags" specifies alternative command tags. This
847is occasionally useful to control the global visibility of commands via
848session options (e.g. in ROOT).
849
850* Document markup commands ('section', 'text' etc.) are implicitly
851tagged as "document" and visible by default. This avoids the application
852of option "document_tags" to these commands.
853
854* Isabelle names are mangled into LaTeX macro names to allow the full
855identifier syntax with underscore, prime, digits. This is relevant for
856antiquotations in control symbol notation, e.g. \<^const_name> becomes
857\isactrlconstUNDERSCOREname.
858
859* Document preparation with skip_proofs option now preserves the content
860more accurately: only terminal proof steps ('by' etc.) are skipped.
861
862* Document antiquotation @{theory name} requires the long
863session-qualified theory name: this is what users reading the text
864normally need to import.
865
866* Document antiquotation @{session name} checks and prints the given
867session name verbatim.
868
869* Document antiquotation @{cite} now checks the given Bibtex entries
870against the Bibtex database files -- only in batch-mode session builds.
871
872* Command-line tool "isabelle document" has been re-implemented in
873Isabelle/Scala, with simplified arguments and explicit errors from the
874latex and bibtex process. Minor INCOMPATIBILITY.
875
876* Session ROOT entry: empty 'document_files' means there is no document
877for this session. There is no need to specify options [document = false]
878anymore.
879
880
881*** Isar ***
882
883* Command 'interpret' no longer exposes resulting theorems as literal
884facts, notably for the \<open>prop\<close> notation or the "fact" proof method. This
885improves modularity of proofs and scalability of locale interpretation.
886Rare INCOMPATIBILITY, need to refer to explicitly named facts instead
887(e.g. use 'find_theorems' or 'try' to figure this out).
888
889* The old 'def' command has been discontinued (legacy since
890Isbelle2016-1). INCOMPATIBILITY, use 'define' instead -- usually with
891object-logic equality or equivalence.
892
893
894*** Pure ***
895
896* The inner syntax category "sort" now includes notation "_" for the
897dummy sort: it is effectively ignored in type-inference.
898
899* Rewrites clauses (keyword 'rewrites') were moved into the locale
900expression syntax, where they are part of locale instances. In
901interpretation commands rewrites clauses now need to occur before 'for'
902and 'defines'. Rare INCOMPATIBILITY; definitions immediately subject to
903rewriting may need to be pulled up into the surrounding theory.
904
905* For 'rewrites' clauses, if activating a locale instance fails, fall
906back to reading the clause first. This helps avoid qualification of
907locale instances where the qualifier's sole purpose is avoiding
908duplicate constant declarations.
909
910* Proof method "simp" now supports a new modifier "flip:" followed by a
911list of theorems. Each of these theorems is removed from the simpset
912(without warning if it is not there) and the symmetric version of the
913theorem (i.e. lhs and rhs exchanged) is added to the simpset. For "auto"
914and friends the modifier is "simp flip:".
915
916
917*** HOL ***
918
919* Sledgehammer: bundled version of "vampire" (for non-commercial users)
920helps to avoid fragility of "remote_vampire" service.
921
922* Clarified relationship of characters, strings and code generation:
923
924  - Type "char" is now a proper datatype of 8-bit values.
925
926  - Conversions "nat_of_char" and "char_of_nat" are gone; use more
927    general conversions "of_char" and "char_of" with suitable type
928    constraints instead.
929
930  - The zero character is just written "CHR 0x00", not "0" any longer.
931
932  - Type "String.literal" (for code generation) is now isomorphic to
933    lists of 7-bit (ASCII) values; concrete values can be written as
934    "STR ''...''" for sequences of printable characters and "STR 0x..."
935    for one single ASCII code point given as hexadecimal numeral.
936
937  - Type "String.literal" supports concatenation "... + ..." for all
938    standard target languages.
939
940  - Theory HOL-Library.Code_Char is gone; study the explanations
941    concerning "String.literal" in the tutorial on code generation to
942    get an idea how target-language string literals can be converted to
943    HOL string values and vice versa.
944
945  - Session Imperative-HOL: operation "raise" directly takes a value of
946    type "String.literal" as argument, not type "string".
947
948INCOMPATIBILITY.
949
950* Code generation: Code generation takes an explicit option
951"case_insensitive" to accomodate case-insensitive file systems.
952
953* Abstract bit operations as part of Main: push_bit, take_bit, drop_bit.
954
955* New, more general, axiomatization of complete_distrib_lattice. The
956former axioms:
957
958  "sup x (Inf X) = Inf (sup x ` X)" and "inf x (Sup X) = Sup (inf x ` X)"
959
960are replaced by:
961
962  "Inf (Sup ` A) <= Sup (Inf ` {f ` A | f . (! Y \<in> A . f Y \<in> Y)})"
963
964The instantiations of sets and functions as complete_distrib_lattice are
965moved to Hilbert_Choice.thy because their proofs need the Hilbert choice
966operator. The dual of this property is also proved in theory
967HOL.Hilbert_Choice.
968
969* New syntax for the minimum/maximum of a function over a finite set:
970MIN x\<in>A. B and even MIN x. B (only useful for finite types), also MAX.
971
972* Clarifed theorem names:
973
974  Min.antimono ~> Min.subset_imp
975  Max.antimono ~> Max.subset_imp
976
977Minor INCOMPATIBILITY.
978
979* SMT module:
980
981  - The 'smt_oracle' option is now necessary when using the 'smt' method
982    with a solver other than Z3. INCOMPATIBILITY.
983
984  - The encoding to first-order logic is now more complete in the
985    presence of higher-order quantifiers. An 'smt_explicit_application'
986    option has been added to control this. INCOMPATIBILITY.
987
988* Facts sum.commute(_restrict) and prod.commute(_restrict) renamed to
989sum.swap(_restrict) and prod.swap(_restrict), to avoid name clashes on
990interpretation of abstract locales. INCOMPATIBILITY.
991
992* Predicate coprime is now a real definition, not a mere abbreviation.
993INCOMPATIBILITY.
994
995* Predicate pairwise_coprime abolished, use "pairwise coprime" instead.
996INCOMPATIBILITY.
997
998* The relator rel_filter on filters has been strengthened to its
999canonical categorical definition with better properties.
1000INCOMPATIBILITY.
1001
1002* Generalized linear algebra involving linear, span, dependent, dim
1003from type class real_vector to locales module and vector_space.
1004Renamed:
1005
1006  span_inc ~> span_superset
1007  span_superset ~> span_base
1008  span_eq ~> span_eq_iff
1009
1010INCOMPATIBILITY.
1011
1012* Class linordered_semiring_1 covers zero_less_one also, ruling out
1013pathologic instances. Minor INCOMPATIBILITY.
1014
1015* Theory HOL.List: functions "sorted_wrt" and "sorted" now compare every
1016element in a list to all following elements, not just the next one.
1017
1018* Theory HOL.List syntax:
1019
1020  - filter-syntax "[x <- xs. P]" is no longer output syntax, but only
1021    input syntax
1022
1023  - list comprehension syntax now supports tuple patterns in "pat <- xs"
1024
1025* Theory Map: "empty" must now be qualified as "Map.empty".
1026
1027* Removed nat-int transfer machinery. Rare INCOMPATIBILITY.
1028
1029* Fact mod_mult_self4 (on nat) renamed to Suc_mod_mult_self3, to avoid
1030clash with fact mod_mult_self4 (on more generic semirings).
1031INCOMPATIBILITY.
1032
1033* Eliminated some theorem aliasses:
1034  even_times_iff ~> even_mult_iff
1035  mod_2_not_eq_zero_eq_one_nat ~> not_mod_2_eq_0_eq_1
1036  even_of_nat ~> even_int_iff
1037
1038INCOMPATIBILITY.
1039
1040* Eliminated some theorem duplicate variations:
1041
1042  - dvd_eq_mod_eq_0_numeral can be replaced by dvd_eq_mod_eq_0
1043  - mod_Suc_eq_Suc_mod can be replaced by mod_Suc
1044  - mod_Suc_eq_Suc_mod [symmetrict] can be replaced by mod_simps
1045  - mod_eq_0_iff can be replaced by mod_eq_0_iff_dvd and dvd_def
1046  - the witness of mod_eqD can be given directly as "_ div _"
1047
1048INCOMPATIBILITY.
1049
1050* Classical setup: Assumption "m mod d = 0" (for m d :: nat) is no
1051longer aggresively destroyed to "\<exists>q. m = d * q". INCOMPATIBILITY, adding
1052"elim!: dvd" to classical proof methods in most situations restores
1053broken proofs.
1054
1055* Theory HOL-Library.Conditional_Parametricity provides command
1056'parametric_constant' for proving parametricity of non-recursive
1057definitions. For constants that are not fully parametric the command
1058will infer conditions on relations (e.g., bi_unique, bi_total, or type
1059class conditions such as "respects 0") sufficient for parametricity. See
1060theory HOL-ex.Conditional_Parametricity_Examples for some examples.
1061
1062* Theory HOL-Library.Code_Lazy provides a new preprocessor for the code
1063generator to generate code for algebraic types with lazy evaluation
1064semantics even in call-by-value target languages. See the theories
1065HOL-ex.Code_Lazy_Demo and HOL-Codegenerator_Test.Code_Lazy_Test for some
1066examples.
1067
1068* Theory HOL-Library.Landau_Symbols has been moved here from AFP.
1069
1070* Theory HOL-Library.Old_Datatype no longer provides the legacy command
1071'old_datatype'. INCOMPATIBILITY.
1072
1073* Theory HOL-Computational_Algebra.Polynomial_Factorial does not provide
1074instances of rat, real, complex as factorial rings etc. Import
1075HOL-Computational_Algebra.Field_as_Ring explicitly in case of need.
1076INCOMPATIBILITY.
1077
1078* Session HOL-Algebra: renamed (^) to [^] to avoid conflict with new
1079infix/prefix notation.
1080
1081* Session HOL-Algebra: revamped with much new material. The set of
1082isomorphisms between two groups is now denoted iso rather than iso_set.
1083INCOMPATIBILITY.
1084
1085* Session HOL-Analysis: the Arg function now respects the same interval
1086as Ln, namely (-pi,pi]; the old Arg function has been renamed Arg2pi.
1087INCOMPATIBILITY.
1088
1089* Session HOL-Analysis: the functions zorder, zer_poly, porder and
1090pol_poly have been redefined. All related lemmas have been reworked.
1091INCOMPATIBILITY.
1092
1093* Session HOL-Analysis: infinite products, Moebius functions, the
1094Riemann mapping theorem, the Vitali covering theorem,
1095change-of-variables results for integration and measures.
1096
1097* Session HOL-Real_Asymp: proof method "real_asymp" proves asymptotics
1098or real-valued functions (limits, "Big-O", etc.) automatically.
1099See also ~~/src/HOL/Real_Asymp/Manual for some documentation.
1100
1101* Session HOL-Types_To_Sets: more tool support (unoverload_type combines
1102internalize_sorts and unoverload) and larger experimental application
1103(type based linear algebra transferred to linear algebra on subspaces).
1104
1105
1106*** ML ***
1107
1108* Operation Export.export emits theory exports (arbitrary blobs), which
1109are stored persistently in the session build database.
1110
1111* Command 'ML_export' exports ML toplevel bindings to the global
1112bootstrap environment of the ML process. This allows ML evaluation
1113without a formal theory context, e.g. in command-line tools like
1114"isabelle process".
1115
1116
1117*** System ***
1118
1119* Mac OS X 10.10 Yosemite is now the baseline version; Mavericks is no
1120longer supported.
1121
1122* Linux and Windows/Cygwin is for x86_64 only, old 32bit platform
1123support has been discontinued.
1124
1125* Java runtime is for x86_64 only. Corresponding Isabelle settings have
1126been renamed to ISABELLE_TOOL_JAVA_OPTIONS and JEDIT_JAVA_OPTIONS,
1127instead of former 32/64 variants. INCOMPATIBILITY.
1128
1129* Old settings ISABELLE_PLATFORM and ISABELLE_WINDOWS_PLATFORM should be
1130phased out due to unclear preference of 32bit vs. 64bit architecture.
1131Explicit GNU bash expressions are now preferred, for example (with
1132quotes):
1133
1134  #Posix executables (Unix or Cygwin), with preference for 64bit
1135  "${ISABELLE_PLATFORM64:-$ISABELLE_PLATFORM32}"
1136
1137  #native Windows or Unix executables, with preference for 64bit
1138  "${ISABELLE_WINDOWS_PLATFORM64:-${ISABELLE_WINDOWS_PLATFORM32:-${ISABELLE_PLATFORM64:-$ISABELLE_PLATFORM32}}}"
1139
1140  #native Windows (32bit) or Unix executables (preference for 64bit)
1141  "${ISABELLE_WINDOWS_PLATFORM32:-${ISABELLE_PLATFORM64:-$ISABELLE_PLATFORM32}}"
1142
1143* Command-line tool "isabelle build" supports new options:
1144  - option -B NAME: include session NAME and all descendants
1145  - option -S: only observe changes of sources, not heap images
1146  - option -f: forces a fresh build
1147
1148* Command-line tool "isabelle build" options -c -x -B refer to
1149descendants wrt. the session parent or import graph. Subtle
1150INCOMPATIBILITY: options -c -x used to refer to the session parent graph
1151only.
1152
1153* Command-line tool "isabelle build" takes "condition" options with the
1154corresponding environment values into account, when determining the
1155up-to-date status of a session.
1156
1157* The command-line tool "dump" dumps information from the cumulative
1158PIDE session database: many sessions may be loaded into a given logic
1159image, results from all loaded theories are written to the output
1160directory.
1161
1162* Command-line tool "isabelle imports -I" also reports actual session
1163imports. This helps to minimize the session dependency graph.
1164
1165* The command-line tool "export" and 'export_files' in session ROOT
1166entries retrieve theory exports from the session build database.
1167
1168* The command-line tools "isabelle server" and "isabelle client" provide
1169access to the Isabelle Server: it supports responsive session management
1170and concurrent use of theories, based on Isabelle/PIDE infrastructure.
1171See also the "system" manual.
1172
1173* The command-line tool "isabelle update_comments" normalizes formal
1174comments in outer syntax as follows: \<comment> \<open>text\<close> (whith a single space to
1175approximate the appearance in document output). This is more specific
1176than former "isabelle update_cartouches -c": the latter tool option has
1177been discontinued.
1178
1179* The command-line tool "isabelle mkroot" now always produces a document
1180outline: its options have been adapted accordingly. INCOMPATIBILITY.
1181
1182* The command-line tool "isabelle mkroot -I" initializes a Mercurial
1183repository for the generated session files.
1184
1185* Settings ISABELLE_HEAPS + ISABELLE_BROWSER_INFO (or
1186ISABELLE_HEAPS_SYSTEM + ISABELLE_BROWSER_INFO_SYSTEM in "system build
1187mode") determine the directory locations of the main build artefacts --
1188instead of hard-wired directories in ISABELLE_HOME_USER (or
1189ISABELLE_HOME).
1190
1191* Settings ISABELLE_PATH and ISABELLE_OUTPUT have been discontinued:
1192heap images and session databases are always stored in
1193$ISABELLE_HEAPS/$ML_IDENTIFIER (command-line default) or
1194$ISABELLE_HEAPS_SYSTEM/$ML_IDENTIFIER (main Isabelle application or
1195"isabelle jedit -s" or "isabelle build -s").
1196
1197* ISABELLE_LATEX and ISABELLE_PDFLATEX now include platform-specific
1198options for improved error reporting. Potential INCOMPATIBILITY with
1199unusual LaTeX installations, may have to adapt these settings.
1200
1201* Update to Poly/ML 5.7.1 with slightly improved performance and PIDE
1202markup for identifier bindings. It now uses The GNU Multiple Precision
1203Arithmetic Library (libgmp) on all platforms, notably Mac OS X with
120432/64 bit.
1205
1206
1207
1208New in Isabelle2017 (October 2017)
1209----------------------------------
1210
1211*** General ***
1212
1213* Experimental support for Visual Studio Code (VSCode) as alternative
1214Isabelle/PIDE front-end, see also
1215https://marketplace.visualstudio.com/items?itemName=makarius.Isabelle2017
1216
1217VSCode is a new type of application that continues the concepts of
1218"programmer's editor" and "integrated development environment" towards
1219fully semantic editing and debugging -- in a relatively light-weight
1220manner. Thus it fits nicely on top of the Isabelle/PIDE infrastructure.
1221Technically, VSCode is based on the Electron application framework
1222(Node.js + Chromium browser + V8), which is implemented in JavaScript
1223and TypeScript, while Isabelle/VSCode mainly consists of Isabelle/Scala
1224modules around a Language Server implementation.
1225
1226* Theory names are qualified by the session name that they belong to.
1227This affects imports, but not the theory name space prefix (which is
1228just the theory base name as before).
1229
1230In order to import theories from other sessions, the ROOT file format
1231provides a new 'sessions' keyword. In contrast, a theory that is
1232imported in the old-fashioned manner via an explicit file-system path
1233belongs to the current session, and might cause theory name conflicts
1234later on. Theories that are imported from other sessions are excluded
1235from the current session document. The command-line tool "isabelle
1236imports" helps to update theory imports.
1237
1238* The main theory entry points for some non-HOL sessions have changed,
1239to avoid confusion with the global name "Main" of the session HOL. This
1240leads to the follow renamings:
1241
1242  CTT/Main.thy    ~>  CTT/CTT.thy
1243  ZF/Main.thy     ~>  ZF/ZF.thy
1244  ZF/Main_ZF.thy  ~>  ZF/ZF.thy
1245  ZF/Main_ZFC.thy ~>  ZF/ZFC.thy
1246  ZF/ZF.thy       ~>  ZF/ZF_Base.thy
1247
1248INCOMPATIBILITY.
1249
1250* Commands 'alias' and 'type_alias' introduce aliases for constants and
1251type constructors, respectively. This allows adhoc changes to name-space
1252accesses within global or local theory contexts, e.g. within a 'bundle'.
1253
1254* Document antiquotations @{prf} and @{full_prf} output proof terms
1255(again) in the same way as commands 'prf' and 'full_prf'.
1256
1257* Computations generated by the code generator can be embedded directly
1258into ML, alongside with @{code} antiquotations, using the following
1259antiquotations:
1260
1261  @{computation ... terms: ... datatypes: ...} :
1262    ((term -> term) -> 'ml option -> 'a) -> Proof.context -> term -> 'a
1263  @{computation_conv ... terms: ... datatypes: ...} :
1264    (Proof.context -> 'ml -> conv) -> Proof.context -> conv
1265  @{computation_check terms: ... datatypes: ...} : Proof.context -> conv
1266
1267See src/HOL/ex/Computations.thy,
1268src/HOL/Decision_Procs/Commutative_Ring.thy and
1269src/HOL/Decision_Procs/Reflective_Field.thy for examples and the
1270tutorial on code generation.
1271
1272
1273*** Prover IDE -- Isabelle/Scala/jEdit ***
1274
1275* Session-qualified theory imports allow the Prover IDE to process
1276arbitrary theory hierarchies independently of the underlying logic
1277session image (e.g. option "isabelle jedit -l"), but the directory
1278structure needs to be known in advance (e.g. option "isabelle jedit -d"
1279or a line in the file $ISABELLE_HOME_USER/ROOTS).
1280
1281* The PIDE document model maintains file content independently of the
1282status of jEdit editor buffers. Reloading jEdit buffers no longer causes
1283changes of formal document content. Theory dependencies are always
1284resolved internally, without the need for corresponding editor buffers.
1285The system option "jedit_auto_load" has been discontinued: it is
1286effectively always enabled.
1287
1288* The Theories dockable provides a "Purge" button, in order to restrict
1289the document model to theories that are required for open editor
1290buffers.
1291
1292* The Theories dockable indicates the overall status of checking of each
1293entry. When all forked tasks of a theory are finished, the border is
1294painted with thick lines; remaining errors in this situation are
1295represented by a different border color.
1296
1297* Automatic indentation is more careful to avoid redundant spaces in
1298intermediate situations. Keywords are indented after input (via typed
1299characters or completion); see also option "jedit_indent_input".
1300
1301* Action "isabelle.preview" opens an HTML preview of the current theory
1302document in the default web browser.
1303
1304* Command-line invocation "isabelle jedit -R -l LOGIC" opens the ROOT
1305entry of the specified logic session in the editor, while its parent is
1306used for formal checking.
1307
1308* The main Isabelle/jEdit plugin may be restarted manually (using the
1309jEdit Plugin Manager), as long as the "Isabelle Base" plugin remains
1310enabled at all times.
1311
1312* Update to current jedit-5.4.0.
1313
1314
1315*** Pure ***
1316
1317* Deleting the last code equations for a particular function using
1318[code del] results in function with no equations (runtime abort) rather
1319than an unimplemented function (generation time abort). Use explicit
1320[[code drop:]] to enforce the latter. Minor INCOMPATIBILITY.
1321
1322* Proper concept of code declarations in code.ML:
1323  - Regular code declarations act only on the global theory level, being
1324    ignored with warnings if syntactically malformed.
1325  - Explicitly global code declarations yield errors if syntactically
1326    malformed.
1327  - Default code declarations are silently ignored if syntactically
1328    malformed.
1329Minor INCOMPATIBILITY.
1330
1331* Clarified and standardized internal data bookkeeping of code
1332declarations: history of serials allows to track potentially
1333non-monotonous declarations appropriately. Minor INCOMPATIBILITY.
1334
1335
1336*** HOL ***
1337
1338* The Nunchaku model finder is now part of "Main".
1339
1340* SMT module:
1341  - A new option, 'smt_nat_as_int', has been added to translate 'nat' to
1342    'int' and benefit from the SMT solver's theory reasoning. It is
1343    disabled by default.
1344  - The legacy module "src/HOL/Library/Old_SMT.thy" has been removed.
1345  - Several small issues have been rectified in the 'smt' command.
1346
1347* (Co)datatype package: The 'size_gen_o_map' lemma is no longer
1348generated for datatypes with type class annotations. As a result, the
1349tactic that derives it no longer fails on nested datatypes. Slight
1350INCOMPATIBILITY.
1351
1352* Command and antiquotation "value" with modified default strategy:
1353terms without free variables are always evaluated using plain evaluation
1354only, with no fallback on normalization by evaluation. Minor
1355INCOMPATIBILITY.
1356
1357* Theories "GCD" and "Binomial" are already included in "Main" (instead
1358of "Complex_Main").
1359
1360* Constant "surj" is a full input/output abbreviation (again).
1361Minor INCOMPATIBILITY.
1362
1363* Dropped aliasses RangeP, DomainP for Rangep, Domainp respectively.
1364INCOMPATIBILITY.
1365
1366* Renamed ii to imaginary_unit in order to free up ii as a variable
1367name. The syntax \<i> remains available. INCOMPATIBILITY.
1368
1369* Dropped abbreviations transP, antisymP, single_valuedP; use constants
1370transp, antisymp, single_valuedp instead. INCOMPATIBILITY.
1371
1372* Constant "subseq" in Topological_Spaces has been removed -- it is
1373subsumed by "strict_mono". Some basic lemmas specific to "subseq" have
1374been renamed accordingly, e.g. "subseq_o" -> "strict_mono_o" etc.
1375
1376* Theory List: "sublist" renamed to "nths" in analogy with "nth", and
1377"sublisteq" renamed to "subseq". Minor INCOMPATIBILITY.
1378
1379* Theory List: new generic function "sorted_wrt".
1380
1381* Named theorems mod_simps covers various congruence rules concerning
1382mod, replacing former zmod_simps. INCOMPATIBILITY.
1383
1384* Swapped orientation of congruence rules mod_add_left_eq,
1385mod_add_right_eq, mod_add_eq, mod_mult_left_eq, mod_mult_right_eq,
1386mod_mult_eq, mod_minus_eq, mod_diff_left_eq, mod_diff_right_eq,
1387mod_diff_eq. INCOMPATIBILITY.
1388
1389* Generalized some facts:
1390    measure_induct_rule
1391    measure_induct
1392    zminus_zmod ~> mod_minus_eq
1393    zdiff_zmod_left ~> mod_diff_left_eq
1394    zdiff_zmod_right ~> mod_diff_right_eq
1395    zmod_eq_dvd_iff ~> mod_eq_dvd_iff
1396INCOMPATIBILITY.
1397
1398* Algebraic type class hierarchy of euclidean (semi)rings in HOL:
1399euclidean_(semi)ring, euclidean_(semi)ring_cancel,
1400unique_euclidean_(semi)ring; instantiation requires provision of a
1401euclidean size.
1402
1403* Theory "HOL-Number_Theory.Euclidean_Algorithm" has been reworked:
1404  - Euclidean induction is available as rule eucl_induct.
1405  - Constants Euclidean_Algorithm.gcd, Euclidean_Algorithm.lcm,
1406    Euclidean_Algorithm.Gcd and Euclidean_Algorithm.Lcm allow
1407    easy instantiation of euclidean (semi)rings as GCD (semi)rings.
1408  - Coefficients obtained by extended euclidean algorithm are
1409    available as "bezout_coefficients".
1410INCOMPATIBILITY.
1411
1412* Theory "Number_Theory.Totient" introduces basic notions about Euler's
1413totient function previously hidden as solitary example in theory
1414Residues. Definition changed so that "totient 1 = 1" in agreement with
1415the literature. Minor INCOMPATIBILITY.
1416
1417* New styles in theory "HOL-Library.LaTeXsugar":
1418  - "dummy_pats" for printing equations with "_" on the lhs;
1419  - "eta_expand" for printing eta-expanded terms.
1420
1421* Theory "HOL-Library.Permutations": theorem bij_swap_ompose_bij has
1422been renamed to bij_swap_compose_bij. INCOMPATIBILITY.
1423
1424* New theory "HOL-Library.Going_To_Filter" providing the "f going_to F"
1425filter for describing points x such that f(x) is in the filter F.
1426
1427* Theory "HOL-Library.Formal_Power_Series": constants X/E/L/F have been
1428renamed to fps_X/fps_exp/fps_ln/fps_hypergeo to avoid polluting the name
1429space. INCOMPATIBILITY.
1430
1431* Theory "HOL-Library.FinFun" has been moved to AFP (again).
1432INCOMPATIBILITY.
1433
1434* Theory "HOL-Library.FuncSet": some old and rarely used ASCII
1435replacement syntax has been removed. INCOMPATIBILITY, standard syntax
1436with symbols should be used instead. The subsequent commands help to
1437reproduce the old forms, e.g. to simplify porting old theories:
1438
1439syntax (ASCII)
1440  "_PiE" :: "pttrn \<Rightarrow> 'a set \<Rightarrow> 'b set \<Rightarrow> ('a \<Rightarrow> 'b) set"  ("(3PIE _:_./ _)" 10)
1441  "_Pi"  :: "pttrn \<Rightarrow> 'a set \<Rightarrow> 'b set \<Rightarrow> ('a \<Rightarrow> 'b) set"  ("(3PI _:_./ _)" 10)
1442  "_lam" :: "pttrn \<Rightarrow> 'a set \<Rightarrow> 'a \<Rightarrow> 'b \<Rightarrow> ('a \<Rightarrow> 'b)"  ("(3%_:_./ _)" [0,0,3] 3)
1443
1444* Theory "HOL-Library.Multiset": the simprocs on subsets operators of
1445multisets have been renamed:
1446
1447  msetless_cancel_numerals ~> msetsubset_cancel
1448  msetle_cancel_numerals ~> msetsubset_eq_cancel
1449
1450INCOMPATIBILITY.
1451
1452* Theory "HOL-Library.Pattern_Aliases" provides input and output syntax
1453for pattern aliases as known from Haskell, Scala and ML.
1454
1455* Theory "HOL-Library.Uprod" formalizes the type of unordered pairs.
1456
1457* Session HOL-Analysis: more material involving arcs, paths, covering
1458spaces, innessential maps, retracts, infinite products, simplicial
1459complexes. Baire Category theorem. Major results include the Jordan
1460Curve Theorem and the Great Picard Theorem.
1461
1462* Session HOL-Algebra has been extended by additional lattice theory:
1463the Knaster-Tarski fixed point theorem and Galois Connections.
1464
1465* Sessions HOL-Computational_Algebra and HOL-Number_Theory: new notions
1466of squarefreeness, n-th powers, and prime powers.
1467
1468* Session "HOL-Computional_Algebra" covers many previously scattered
1469theories, notably Euclidean_Algorithm, Factorial_Ring,
1470Formal_Power_Series, Fraction_Field, Fundamental_Theorem_Algebra,
1471Normalized_Fraction, Polynomial_FPS, Polynomial, Primes. Minor
1472INCOMPATIBILITY.
1473
1474
1475*** System ***
1476
1477* Isabelle/Scala: the SQL module supports access to relational
1478databases, either as plain file (SQLite) or full-scale server
1479(PostgreSQL via local port or remote ssh connection).
1480
1481* Results of "isabelle build" are recorded as SQLite database (i.e.
1482"Application File Format" in the sense of
1483https://www.sqlite.org/appfileformat.html). This allows systematic
1484access via operations from module Sessions.Store in Isabelle/Scala.
1485
1486* System option "parallel_proofs" is 1 by default (instead of more
1487aggressive 2). This requires less heap space and avoids burning parallel
1488CPU cycles, while full subproof parallelization is enabled for repeated
1489builds (according to parallel_subproofs_threshold).
1490
1491* System option "record_proofs" allows to change the global
1492Proofterm.proofs variable for a session. Regular values are are 0, 1, 2;
1493a negative value means the current state in the ML heap image remains
1494unchanged.
1495
1496* Isabelle settings variable ISABELLE_SCALA_BUILD_OPTIONS has been
1497renamed to ISABELLE_SCALAC_OPTIONS. Rare INCOMPATIBILITY.
1498
1499* Isabelle settings variables ISABELLE_WINDOWS_PLATFORM,
1500ISABELLE_WINDOWS_PLATFORM32, ISABELLE_WINDOWS_PLATFORM64 indicate the
1501native Windows platform (independently of the Cygwin installation). This
1502is analogous to ISABELLE_PLATFORM, ISABELLE_PLATFORM32,
1503ISABELLE_PLATFORM64.
1504
1505* Command-line tool "isabelle build_docker" builds a Docker image from
1506the Isabelle application bundle for Linux. See also
1507https://hub.docker.com/r/makarius/isabelle
1508
1509* Command-line tool "isabelle vscode_server" provides a Language Server
1510Protocol implementation, e.g. for the Visual Studio Code editor. It
1511serves as example for alternative PIDE front-ends.
1512
1513* Command-line tool "isabelle imports" helps to maintain theory imports
1514wrt. session structure. Examples for the main Isabelle distribution:
1515
1516  isabelle imports -I -a
1517  isabelle imports -U -a
1518  isabelle imports -U -i -a
1519  isabelle imports -M -a -d '~~/src/Benchmarks'
1520
1521
1522
1523New in Isabelle2016-1 (December 2016)
1524-------------------------------------
1525
1526*** General ***
1527
1528* Splitter in proof methods "simp", "auto" and friends:
1529  - The syntax "split add" has been discontinued, use plain "split",
1530    INCOMPATIBILITY.
1531  - For situations with many conditional or case expressions, there is
1532    an alternative splitting strategy that can be much faster. It is
1533    selected by writing "split!" instead of "split". It applies safe
1534    introduction and elimination rules after each split rule. As a
1535    result the subgoal may be split into several subgoals.
1536
1537* Command 'bundle' provides a local theory target to define a bundle
1538from the body of specification commands (such as 'declare',
1539'declaration', 'notation', 'lemmas', 'lemma'). For example:
1540
1541bundle foo
1542begin
1543  declare a [simp]
1544  declare b [intro]
1545end
1546
1547* Command 'unbundle' is like 'include', but works within a local theory
1548context. Unlike "context includes ... begin", the effect of 'unbundle'
1549on the target context persists, until different declarations are given.
1550
1551* Simplified outer syntax: uniform category "name" includes long
1552identifiers. Former "xname" / "nameref" / "name reference" has been
1553discontinued.
1554
1555* Embedded content (e.g. the inner syntax of types, terms, props) may be
1556delimited uniformly via cartouches. This works better than old-fashioned
1557quotes when sub-languages are nested.
1558
1559* Mixfix annotations support general block properties, with syntax
1560"(\<open>x=a y=b z \<dots>\<close>". Notable property names are "indent", "consistent",
1561"unbreakable", "markup". The existing notation "(DIGITS" is equivalent
1562to "(\<open>indent=DIGITS\<close>". The former notation "(00" for unbreakable blocks
1563is superseded by "(\<open>unbreabable\<close>" --- rare INCOMPATIBILITY.
1564
1565* Proof method "blast" is more robust wrt. corner cases of Pure
1566statements without object-logic judgment.
1567
1568* Commands 'prf' and 'full_prf' are somewhat more informative (again):
1569proof terms are reconstructed and cleaned from administrative thm nodes.
1570
1571* Code generator: config option "code_timing" triggers measurements of
1572different phases of code generation. See src/HOL/ex/Code_Timing.thy for
1573examples.
1574
1575* Code generator: implicits in Scala (stemming from type class
1576instances) are generated into companion object of corresponding type
1577class, to resolve some situations where ambiguities may occur.
1578
1579* Solve direct: option "solve_direct_strict_warnings" gives explicit
1580warnings for lemma statements with trivial proofs.
1581
1582
1583*** Prover IDE -- Isabelle/Scala/jEdit ***
1584
1585* More aggressive flushing of machine-generated input, according to
1586system option editor_generated_input_delay (in addition to existing
1587editor_input_delay for regular user edits). This may affect overall PIDE
1588reactivity and CPU usage.
1589
1590* Syntactic indentation according to Isabelle outer syntax. Action
1591"indent-lines" (shortcut C+i) indents the current line according to
1592command keywords and some command substructure. Action
1593"isabelle.newline" (shortcut ENTER) indents the old and the new line
1594according to command keywords only; see also option
1595"jedit_indent_newline".
1596
1597* Semantic indentation for unstructured proof scripts ('apply' etc.) via
1598number of subgoals. This requires information of ongoing document
1599processing and may thus lag behind, when the user is editing too
1600quickly; see also option "jedit_script_indent" and
1601"jedit_script_indent_limit".
1602
1603* Refined folding mode "isabelle" based on Isar syntax: 'next' and 'qed'
1604are treated as delimiters for fold structure; 'begin' and 'end'
1605structure of theory specifications is treated as well.
1606
1607* Command 'proof' provides information about proof outline with cases,
1608e.g. for proof methods "cases", "induct", "goal_cases".
1609
1610* Completion templates for commands involving "begin ... end" blocks,
1611e.g. 'context', 'notepad'.
1612
1613* Sidekick parser "isabelle-context" shows nesting of context blocks
1614according to 'begin' and 'end' structure.
1615
1616* Highlighting of entity def/ref positions wrt. cursor.
1617
1618* Action "isabelle.select-entity" (shortcut CS+ENTER) selects all
1619occurrences of the formal entity at the caret position. This facilitates
1620systematic renaming.
1621
1622* PIDE document markup works across multiple Isar commands, e.g. the
1623results established at the end of a proof are properly identified in the
1624theorem statement.
1625
1626* Cartouche abbreviations work both for " and ` to accomodate typical
1627situations where old ASCII notation may be updated.
1628
1629* Dockable window "Symbols" also provides access to 'abbrevs' from the
1630outer syntax of the current theory buffer. This provides clickable
1631syntax templates, including entries with empty abbrevs name (which are
1632inaccessible via keyboard completion).
1633
1634* IDE support for the Isabelle/Pure bootstrap process, with the
1635following independent stages:
1636
1637  src/Pure/ROOT0.ML
1638  src/Pure/ROOT.ML
1639  src/Pure/Pure.thy
1640  src/Pure/ML_Bootstrap.thy
1641
1642The ML ROOT files act like quasi-theories in the context of theory
1643ML_Bootstrap: this allows continuous checking of all loaded ML files.
1644The theory files are presented with a modified header to import Pure
1645from the running Isabelle instance. Results from changed versions of
1646each stage are *not* propagated to the next stage, and isolated from the
1647actual Isabelle/Pure that runs the IDE itself. The sequential
1648dependencies of the above files are only observed for batch build.
1649
1650* Isabelle/ML and Standard ML files are presented in Sidekick with the
1651tree structure of section headings: this special comment format is
1652described in "implementation" chapter 0, e.g. (*** section ***).
1653
1654* Additional abbreviations for syntactic completion may be specified
1655within the theory header as 'abbrevs'. The theory syntax for 'keywords'
1656has been simplified accordingly: optional abbrevs need to go into the
1657new 'abbrevs' section.
1658
1659* Global abbreviations via $ISABELLE_HOME/etc/abbrevs and
1660$ISABELLE_HOME_USER/etc/abbrevs are no longer supported. Minor
1661INCOMPATIBILITY, use 'abbrevs' within theory header instead.
1662
1663* Action "isabelle.keymap-merge" asks the user to resolve pending
1664Isabelle keymap changes that are in conflict with the current jEdit
1665keymap; non-conflicting changes are always applied implicitly. This
1666action is automatically invoked on Isabelle/jEdit startup and thus
1667increases chances that users see new keyboard shortcuts when re-using
1668old keymaps.
1669
1670* ML and document antiquotations for file-systems paths are more uniform
1671and diverse:
1672
1673  @{path NAME}   -- no file-system check
1674  @{file NAME}   -- check for plain file
1675  @{dir NAME}    -- check for directory
1676
1677Minor INCOMPATIBILITY, former uses of @{file} and @{file_unchecked} may
1678have to be changed.
1679
1680
1681*** Document preparation ***
1682
1683* New symbol \<circle>, e.g. for temporal operator.
1684
1685* New document and ML antiquotation @{locale} for locales, similar to
1686existing antiquotation @{class}.
1687
1688* Mixfix annotations support delimiters like \<^control>\<open>cartouche\<close> --
1689this allows special forms of document output.
1690
1691* Raw LaTeX output now works via \<^latex>\<open>...\<close> instead of raw control
1692symbol \<^raw:...>. INCOMPATIBILITY, notably for LaTeXsugar.thy and its
1693derivatives.
1694
1695* \<^raw:...> symbols are no longer supported.
1696
1697* Old 'header' command is no longer supported (legacy since
1698Isabelle2015).
1699
1700
1701*** Isar ***
1702
1703* Many specification elements support structured statements with 'if' /
1704'for' eigen-context, e.g. 'axiomatization', 'abbreviation',
1705'definition', 'inductive', 'function'.
1706
1707* Toplevel theorem statements support eigen-context notation with 'if' /
1708'for' (in postfix), which corresponds to 'assumes' / 'fixes' in the
1709traditional long statement form (in prefix). Local premises are called
1710"that" or "assms", respectively. Empty premises are *not* bound in the
1711context: INCOMPATIBILITY.
1712
1713* Command 'define' introduces a local (non-polymorphic) definition, with
1714optional abstraction over local parameters. The syntax resembles
1715'definition' and 'obtain'. It fits better into the Isar language than
1716old 'def', which is now a legacy feature.
1717
1718* Command 'obtain' supports structured statements with 'if' / 'for'
1719context.
1720
1721* Command '\<proof>' is an alias for 'sorry', with different
1722typesetting. E.g. to produce proof holes in examples and documentation.
1723
1724* The defining position of a literal fact \<open>prop\<close> is maintained more
1725carefully, and made accessible as hyperlink in the Prover IDE.
1726
1727* Commands 'finally' and 'ultimately' used to expose the result as
1728literal fact: this accidental behaviour has been discontinued. Rare
1729INCOMPATIBILITY, use more explicit means to refer to facts in Isar.
1730
1731* Command 'axiomatization' has become more restrictive to correspond
1732better to internal axioms as singleton facts with mandatory name. Minor
1733INCOMPATIBILITY.
1734
1735* Proof methods may refer to the main facts via the dynamic fact
1736"method_facts". This is particularly useful for Eisbach method
1737definitions.
1738
1739* Proof method "use" allows to modify the main facts of a given method
1740expression, e.g.
1741
1742  (use facts in simp)
1743  (use facts in \<open>simp add: ...\<close>)
1744
1745* The old proof method "default" has been removed (legacy since
1746Isabelle2016). INCOMPATIBILITY, use "standard" instead.
1747
1748
1749*** Pure ***
1750
1751* Pure provides basic versions of proof methods "simp" and "simp_all"
1752that only know about meta-equality (==). Potential INCOMPATIBILITY in
1753theory imports that merge Pure with e.g. Main of Isabelle/HOL: the order
1754is relevant to avoid confusion of Pure.simp vs. HOL.simp.
1755
1756* The command 'unfolding' and proof method "unfold" include a second
1757stage where given equations are passed through the attribute "abs_def"
1758before rewriting. This ensures that definitions are fully expanded,
1759regardless of the actual parameters that are provided. Rare
1760INCOMPATIBILITY in some corner cases: use proof method (simp only:)
1761instead, or declare [[unfold_abs_def = false]] in the proof context.
1762
1763* Type-inference improves sorts of newly introduced type variables for
1764the object-logic, using its base sort (i.e. HOL.type for Isabelle/HOL).
1765Thus terms like "f x" or "\<And>x. P x" without any further syntactic context
1766produce x::'a::type in HOL instead of x::'a::{} in Pure. Rare
1767INCOMPATIBILITY, need to provide explicit type constraints for Pure
1768types where this is really intended.
1769
1770
1771*** HOL ***
1772
1773* New proof method "argo" using the built-in Argo solver based on SMT
1774technology. The method can be used to prove goals of quantifier-free
1775propositional logic, goals based on a combination of quantifier-free
1776propositional logic with equality, and goals based on a combination of
1777quantifier-free propositional logic with linear real arithmetic
1778including min/max/abs. See HOL/ex/Argo_Examples.thy for examples.
1779
1780* The new "nunchaku" command integrates the Nunchaku model finder. The
1781tool is experimental. See ~~/src/HOL/Nunchaku/Nunchaku.thy for details.
1782
1783* Metis: The problem encoding has changed very slightly. This might
1784break existing proofs. INCOMPATIBILITY.
1785
1786* Sledgehammer:
1787  - The MaSh relevance filter is now faster than before.
1788  - Produce syntactically correct Vampire 4.0 problem files.
1789
1790* (Co)datatype package:
1791  - New commands for defining corecursive functions and reasoning about
1792    them in "~~/src/HOL/Library/BNF_Corec.thy": 'corec', 'corecursive',
1793    'friend_of_corec', and 'corecursion_upto'; and 'corec_unique' proof
1794    method. See 'isabelle doc corec'.
1795  - The predicator :: ('a \<Rightarrow> bool) \<Rightarrow> 'a F \<Rightarrow> bool is now a first-class
1796    citizen in bounded natural functors.
1797  - 'primrec' now allows nested calls through the predicator in addition
1798    to the map function.
1799  - 'bnf' automatically discharges reflexive proof obligations.
1800  - 'bnf' outputs a slightly modified proof obligation expressing rel in
1801       terms of map and set
1802       (not giving a specification for rel makes this one reflexive).
1803  - 'bnf' outputs a new proof obligation expressing pred in terms of set
1804       (not giving a specification for pred makes this one reflexive).
1805    INCOMPATIBILITY: manual 'bnf' declarations may need adjustment.
1806  - Renamed lemmas:
1807      rel_prod_apply ~> rel_prod_inject
1808      pred_prod_apply ~> pred_prod_inject
1809    INCOMPATIBILITY.
1810  - The "size" plugin has been made compatible again with locales.
1811  - The theorems about "rel" and "set" may have a slightly different (but
1812    equivalent) form.
1813    INCOMPATIBILITY.
1814
1815* The 'coinductive' command produces a proper coinduction rule for
1816mutual coinductive predicates. This new rule replaces the old rule,
1817which exposed details of the internal fixpoint construction and was
1818hard to use. INCOMPATIBILITY.
1819
1820* New abbreviations for negated existence (but not bounded existence):
1821
1822  \<nexists>x. P x \<equiv> \<not> (\<exists>x. P x)
1823  \<nexists>!x. P x \<equiv> \<not> (\<exists>!x. P x)
1824
1825* The print mode "HOL" for ASCII syntax of binders "!", "?", "?!", "@"
1826has been removed for output. It is retained for input only, until it is
1827eliminated altogether.
1828
1829* The unique existence quantifier no longer provides 'binder' syntax,
1830but uses syntax translations (as for bounded unique existence). Thus
1831iterated quantification \<exists>!x y. P x y with its slightly confusing
1832sequential meaning \<exists>!x. \<exists>!y. P x y is no longer possible. Instead,
1833pattern abstraction admits simultaneous unique existence \<exists>!(x, y). P x y
1834(analogous to existing notation \<exists>!(x, y)\<in>A. P x y). Potential
1835INCOMPATIBILITY in rare situations.
1836
1837* Conventional syntax "%(). t" for unit abstractions. Slight syntactic
1838INCOMPATIBILITY.
1839
1840* Renamed constants and corresponding theorems:
1841
1842    setsum ~> sum
1843    setprod ~> prod
1844    listsum ~> sum_list
1845    listprod ~> prod_list
1846
1847INCOMPATIBILITY.
1848
1849* Sligthly more standardized theorem names:
1850    sgn_times ~> sgn_mult
1851    sgn_mult' ~> Real_Vector_Spaces.sgn_mult
1852    divide_zero_left ~> div_0
1853    zero_mod_left ~> mod_0
1854    divide_zero ~> div_by_0
1855    divide_1 ~> div_by_1
1856    nonzero_mult_divide_cancel_left ~> nonzero_mult_div_cancel_left
1857    div_mult_self1_is_id ~> nonzero_mult_div_cancel_left
1858    nonzero_mult_divide_cancel_right ~> nonzero_mult_div_cancel_right
1859    div_mult_self2_is_id ~> nonzero_mult_div_cancel_right
1860    is_unit_divide_mult_cancel_left ~> is_unit_div_mult_cancel_left
1861    is_unit_divide_mult_cancel_right ~> is_unit_div_mult_cancel_right
1862    mod_div_equality ~> div_mult_mod_eq
1863    mod_div_equality2 ~> mult_div_mod_eq
1864    mod_div_equality3 ~> mod_div_mult_eq
1865    mod_div_equality4 ~> mod_mult_div_eq
1866    minus_div_eq_mod ~> minus_div_mult_eq_mod
1867    minus_div_eq_mod2 ~> minus_mult_div_eq_mod
1868    minus_mod_eq_div ~> minus_mod_eq_div_mult
1869    minus_mod_eq_div2 ~> minus_mod_eq_mult_div
1870    div_mod_equality' ~> minus_mod_eq_div_mult [symmetric]
1871    mod_div_equality' ~> minus_div_mult_eq_mod [symmetric]
1872    zmod_zdiv_equality ~> mult_div_mod_eq [symmetric]
1873    zmod_zdiv_equality' ~> minus_div_mult_eq_mod [symmetric]
1874    Divides.mult_div_cancel ~> minus_mod_eq_mult_div [symmetric]
1875    mult_div_cancel ~> minus_mod_eq_mult_div [symmetric]
1876    zmult_div_cancel ~> minus_mod_eq_mult_div [symmetric]
1877    div_1 ~> div_by_Suc_0
1878    mod_1 ~> mod_by_Suc_0
1879INCOMPATIBILITY.
1880
1881* New type class "idom_abs_sgn" specifies algebraic properties
1882of sign and absolute value functions.  Type class "sgn_if" has
1883disappeared.  Slight INCOMPATIBILITY.
1884
1885* Dedicated syntax LENGTH('a) for length of types.
1886
1887* Characters (type char) are modelled as finite algebraic type
1888corresponding to {0..255}.
1889
1890  - Logical representation:
1891    * 0 is instantiated to the ASCII zero character.
1892    * All other characters are represented as "Char n"
1893      with n being a raw numeral expression less than 256.
1894    * Expressions of the form "Char n" with n greater than 255
1895      are non-canonical.
1896  - Printing and parsing:
1897    * Printable characters are printed and parsed as "CHR ''\<dots>''"
1898      (as before).
1899    * The ASCII zero character is printed and parsed as "0".
1900    * All other canonical characters are printed as "CHR 0xXX"
1901      with XX being the hexadecimal character code.  "CHR n"
1902      is parsable for every numeral expression n.
1903    * Non-canonical characters have no special syntax and are
1904      printed as their logical representation.
1905  - Explicit conversions from and to the natural numbers are
1906    provided as char_of_nat, nat_of_char (as before).
1907  - The auxiliary nibble type has been discontinued.
1908
1909INCOMPATIBILITY.
1910
1911* Type class "div" with operation "mod" renamed to type class "modulo"
1912with operation "modulo", analogously to type class "divide". This
1913eliminates the need to qualify any of those names in the presence of
1914infix "mod" syntax. INCOMPATIBILITY.
1915
1916* Statements and proofs of Knaster-Tarski fixpoint combinators lfp/gfp
1917have been clarified. The fixpoint properties are lfp_fixpoint, its
1918symmetric lfp_unfold (as before), and the duals for gfp. Auxiliary items
1919for the proof (lfp_lemma2 etc.) are no longer exported, but can be
1920easily recovered by composition with eq_refl. Minor INCOMPATIBILITY.
1921
1922* Constant "surj" is a mere input abbreviation, to avoid hiding an
1923equation in term output. Minor INCOMPATIBILITY.
1924
1925* Command 'code_reflect' accepts empty constructor lists for datatypes,
1926which renders those abstract effectively.
1927
1928* Command 'export_code' checks given constants for abstraction
1929violations: a small guarantee that given constants specify a safe
1930interface for the generated code.
1931
1932* Code generation for Scala: ambiguous implicts in class diagrams are
1933spelt out explicitly.
1934
1935* Static evaluators (Code_Evaluation.static_* in Isabelle/ML) rely on
1936explicitly provided auxiliary definitions for required type class
1937dictionaries rather than half-working magic. INCOMPATIBILITY, see the
1938tutorial on code generation for details.
1939
1940* Theory Set_Interval: substantial new theorems on indexed sums and
1941products.
1942
1943* Locale bijection establishes convenient default simp rules such as
1944"inv f (f a) = a" for total bijections.
1945
1946* Abstract locales semigroup, abel_semigroup, semilattice,
1947semilattice_neutr, ordering, ordering_top, semilattice_order,
1948semilattice_neutr_order, comm_monoid_set, semilattice_set,
1949semilattice_neutr_set, semilattice_order_set,
1950semilattice_order_neutr_set monoid_list, comm_monoid_list,
1951comm_monoid_list_set, comm_monoid_mset, comm_monoid_fun use boldified
1952syntax uniformly that does not clash with corresponding global syntax.
1953INCOMPATIBILITY.
1954
1955* Former locale lifting_syntax is now a bundle, which is easier to
1956include in a local context or theorem statement, e.g. "context includes
1957lifting_syntax begin ... end". Minor INCOMPATIBILITY.
1958
1959* Some old / obsolete theorems have been renamed / removed, potential
1960INCOMPATIBILITY.
1961
1962  nat_less_cases  --  removed, use linorder_cases instead
1963  inv_image_comp  --  removed, use image_inv_f_f instead
1964  image_surj_f_inv_f  ~>  image_f_inv_f
1965
1966* Some theorems about groups and orders have been generalised from
1967  groups to semi-groups that are also monoids:
1968    le_add_same_cancel1
1969    le_add_same_cancel2
1970    less_add_same_cancel1
1971    less_add_same_cancel2
1972    add_le_same_cancel1
1973    add_le_same_cancel2
1974    add_less_same_cancel1
1975    add_less_same_cancel2
1976
1977* Some simplifications theorems about rings have been removed, since
1978  superseeded by a more general version:
1979    less_add_cancel_left_greater_zero ~> less_add_same_cancel1
1980    less_add_cancel_right_greater_zero ~> less_add_same_cancel2
1981    less_eq_add_cancel_left_greater_eq_zero ~> le_add_same_cancel1
1982    less_eq_add_cancel_right_greater_eq_zero ~> le_add_same_cancel2
1983    less_eq_add_cancel_left_less_eq_zero ~> add_le_same_cancel1
1984    less_eq_add_cancel_right_less_eq_zero ~> add_le_same_cancel2
1985    less_add_cancel_left_less_zero ~> add_less_same_cancel1
1986    less_add_cancel_right_less_zero ~> add_less_same_cancel2
1987INCOMPATIBILITY.
1988
1989* Renamed split_if -> if_split and split_if_asm -> if_split_asm to
1990resemble the f.split naming convention, INCOMPATIBILITY.
1991
1992* Added class topological_monoid.
1993
1994* The following theorems have been renamed:
1995
1996  setsum_left_distrib ~> sum_distrib_right
1997  setsum_right_distrib ~> sum_distrib_left
1998
1999INCOMPATIBILITY.
2000
2001* Compound constants INFIMUM and SUPREMUM are mere abbreviations now.
2002INCOMPATIBILITY.
2003
2004* "Gcd (f ` A)" and "Lcm (f ` A)" are printed with optional
2005comprehension-like syntax analogously to "Inf (f ` A)" and "Sup (f `
2006A)".
2007
2008* Class semiring_Lcd merged into semiring_Gcd. INCOMPATIBILITY.
2009
2010* The type class ordered_comm_monoid_add is now called
2011ordered_cancel_comm_monoid_add. A new type class ordered_comm_monoid_add
2012is introduced as the combination of ordered_ab_semigroup_add +
2013comm_monoid_add. INCOMPATIBILITY.
2014
2015* Introduced the type classes canonically_ordered_comm_monoid_add and
2016dioid.
2017
2018* Introduced the type class ordered_ab_semigroup_monoid_add_imp_le. When
2019instantiating linordered_semiring_strict and ordered_ab_group_add, an
2020explicit instantiation of ordered_ab_semigroup_monoid_add_imp_le might
2021be required. INCOMPATIBILITY.
2022
2023* Dropped various legacy fact bindings, whose replacements are often
2024of a more general type also:
2025  lcm_left_commute_nat ~> lcm.left_commute
2026  lcm_left_commute_int ~> lcm.left_commute
2027  gcd_left_commute_nat ~> gcd.left_commute
2028  gcd_left_commute_int ~> gcd.left_commute
2029  gcd_greatest_iff_nat ~> gcd_greatest_iff
2030  gcd_greatest_iff_int ~> gcd_greatest_iff
2031  coprime_dvd_mult_nat ~> coprime_dvd_mult
2032  coprime_dvd_mult_int ~> coprime_dvd_mult
2033  zpower_numeral_even ~> power_numeral_even
2034  gcd_mult_cancel_nat ~> gcd_mult_cancel
2035  gcd_mult_cancel_int ~> gcd_mult_cancel
2036  div_gcd_coprime_nat ~> div_gcd_coprime
2037  div_gcd_coprime_int ~> div_gcd_coprime
2038  zpower_numeral_odd ~> power_numeral_odd
2039  zero_less_int_conv ~> of_nat_0_less_iff
2040  gcd_greatest_nat ~> gcd_greatest
2041  gcd_greatest_int ~> gcd_greatest
2042  coprime_mult_nat ~> coprime_mult
2043  coprime_mult_int ~> coprime_mult
2044  lcm_commute_nat ~> lcm.commute
2045  lcm_commute_int ~> lcm.commute
2046  int_less_0_conv ~> of_nat_less_0_iff
2047  gcd_commute_nat ~> gcd.commute
2048  gcd_commute_int ~> gcd.commute
2049  Gcd_insert_nat ~> Gcd_insert
2050  Gcd_insert_int ~> Gcd_insert
2051  of_int_int_eq ~> of_int_of_nat_eq
2052  lcm_least_nat ~> lcm_least
2053  lcm_least_int ~> lcm_least
2054  lcm_assoc_nat ~> lcm.assoc
2055  lcm_assoc_int ~> lcm.assoc
2056  int_le_0_conv ~> of_nat_le_0_iff
2057  int_eq_0_conv ~> of_nat_eq_0_iff
2058  Gcd_empty_nat ~> Gcd_empty
2059  Gcd_empty_int ~> Gcd_empty
2060  gcd_assoc_nat ~> gcd.assoc
2061  gcd_assoc_int ~> gcd.assoc
2062  zero_zle_int ~> of_nat_0_le_iff
2063  lcm_dvd2_nat ~> dvd_lcm2
2064  lcm_dvd2_int ~> dvd_lcm2
2065  lcm_dvd1_nat ~> dvd_lcm1
2066  lcm_dvd1_int ~> dvd_lcm1
2067  gcd_zero_nat ~> gcd_eq_0_iff
2068  gcd_zero_int ~> gcd_eq_0_iff
2069  gcd_dvd2_nat ~> gcd_dvd2
2070  gcd_dvd2_int ~> gcd_dvd2
2071  gcd_dvd1_nat ~> gcd_dvd1
2072  gcd_dvd1_int ~> gcd_dvd1
2073  int_numeral ~> of_nat_numeral
2074  lcm_ac_nat ~> ac_simps
2075  lcm_ac_int ~> ac_simps
2076  gcd_ac_nat ~> ac_simps
2077  gcd_ac_int ~> ac_simps
2078  abs_int_eq ~> abs_of_nat
2079  zless_int ~> of_nat_less_iff
2080  zdiff_int ~> of_nat_diff
2081  zadd_int ~> of_nat_add
2082  int_mult ~> of_nat_mult
2083  int_Suc ~> of_nat_Suc
2084  inj_int ~> inj_of_nat
2085  int_1 ~> of_nat_1
2086  int_0 ~> of_nat_0
2087  Lcm_empty_nat ~> Lcm_empty
2088  Lcm_empty_int ~> Lcm_empty
2089  Lcm_insert_nat ~> Lcm_insert
2090  Lcm_insert_int ~> Lcm_insert
2091  comp_fun_idem_gcd_nat ~> comp_fun_idem_gcd
2092  comp_fun_idem_gcd_int ~> comp_fun_idem_gcd
2093  comp_fun_idem_lcm_nat ~> comp_fun_idem_lcm
2094  comp_fun_idem_lcm_int ~> comp_fun_idem_lcm
2095  Lcm_eq_0 ~> Lcm_eq_0_I
2096  Lcm0_iff ~> Lcm_0_iff
2097  Lcm_dvd_int ~> Lcm_least
2098  divides_mult_nat ~> divides_mult
2099  divides_mult_int ~> divides_mult
2100  lcm_0_nat ~> lcm_0_right
2101  lcm_0_int ~> lcm_0_right
2102  lcm_0_left_nat ~> lcm_0_left
2103  lcm_0_left_int ~> lcm_0_left
2104  dvd_gcd_D1_nat ~> dvd_gcdD1
2105  dvd_gcd_D1_int ~> dvd_gcdD1
2106  dvd_gcd_D2_nat ~> dvd_gcdD2
2107  dvd_gcd_D2_int ~> dvd_gcdD2
2108  coprime_dvd_mult_iff_nat ~> coprime_dvd_mult_iff
2109  coprime_dvd_mult_iff_int ~> coprime_dvd_mult_iff
2110  realpow_minus_mult ~> power_minus_mult
2111  realpow_Suc_le_self ~> power_Suc_le_self
2112  dvd_Gcd, dvd_Gcd_nat, dvd_Gcd_int removed in favour of Gcd_greatest
2113INCOMPATIBILITY.
2114
2115* Renamed HOL/Quotient_Examples/FSet.thy to
2116HOL/Quotient_Examples/Quotient_FSet.thy INCOMPATIBILITY.
2117
2118* Session HOL-Library: theory FinFun bundles "finfun_syntax" and
2119"no_finfun_syntax" allow to control optional syntax in local contexts;
2120this supersedes former theory FinFun_Syntax. INCOMPATIBILITY, e.g. use
2121"unbundle finfun_syntax" to imitate import of
2122"~~/src/HOL/Library/FinFun_Syntax".
2123
2124* Session HOL-Library: theory Multiset_Permutations (executably) defines
2125the set of permutations of a given set or multiset, i.e. the set of all
2126lists that contain every element of the carrier (multi-)set exactly
2127once.
2128
2129* Session HOL-Library: multiset membership is now expressed using
2130set_mset rather than count.
2131
2132  - Expressions "count M a > 0" and similar simplify to membership
2133    by default.
2134
2135  - Converting between "count M a = 0" and non-membership happens using
2136    equations count_eq_zero_iff and not_in_iff.
2137
2138  - Rules count_inI and in_countE obtain facts of the form
2139    "count M a = n" from membership.
2140
2141  - Rules count_in_diffI and in_diff_countE obtain facts of the form
2142    "count M a = n + count N a" from membership on difference sets.
2143
2144INCOMPATIBILITY.
2145
2146* Session HOL-Library: theory LaTeXsugar uses new-style "dummy_pats" for
2147displaying equations in functional programming style --- variables
2148present on the left-hand but not on the righ-hand side are replaced by
2149underscores.
2150
2151* Session HOL-Library: theory Combinator_PER provides combinator to
2152build partial equivalence relations from a predicate and an equivalence
2153relation.
2154
2155* Session HOL-Library: theory Perm provides basic facts about almost
2156everywhere fix bijections.
2157
2158* Session HOL-Library: theory Normalized_Fraction allows viewing an
2159element of a field of fractions as a normalized fraction (i.e. a pair of
2160numerator and denominator such that the two are coprime and the
2161denominator is normalized wrt. unit factors).
2162
2163* Session HOL-NSA has been renamed to HOL-Nonstandard_Analysis.
2164
2165* Session HOL-Multivariate_Analysis has been renamed to HOL-Analysis.
2166
2167* Session HOL-Analysis: measure theory has been moved here from
2168HOL-Probability. When importing HOL-Analysis some theorems need
2169additional name spaces prefixes due to name clashes. INCOMPATIBILITY.
2170
2171* Session HOL-Analysis: more complex analysis including Cauchy's
2172inequality, Liouville theorem, open mapping theorem, maximum modulus
2173principle, Residue theorem, Schwarz Lemma.
2174
2175* Session HOL-Analysis: Theory of polyhedra: faces, extreme points,
2176polytopes, and the Krein���Milman Minkowski theorem.
2177
2178* Session HOL-Analysis: Numerous results ported from the HOL Light
2179libraries: homeomorphisms, continuous function extensions, invariance of
2180domain.
2181
2182* Session HOL-Probability: the type of emeasure and nn_integral was
2183changed from ereal to ennreal, INCOMPATIBILITY.
2184
2185  emeasure :: 'a measure \<Rightarrow> 'a set \<Rightarrow> ennreal
2186  nn_integral :: 'a measure \<Rightarrow> ('a \<Rightarrow> ennreal) \<Rightarrow> ennreal
2187
2188* Session HOL-Probability: Code generation and QuickCheck for
2189Probability Mass Functions.
2190
2191* Session HOL-Probability: theory Random_Permutations contains some
2192theory about choosing a permutation of a set uniformly at random and
2193folding over a list in random order.
2194
2195* Session HOL-Probability: theory SPMF formalises discrete
2196subprobability distributions.
2197
2198* Session HOL-Library: the names of multiset theorems have been
2199normalised to distinguish which ordering the theorems are about
2200
2201    mset_less_eqI ~> mset_subset_eqI
2202    mset_less_insertD ~> mset_subset_insertD
2203    mset_less_eq_count ~> mset_subset_eq_count
2204    mset_less_diff_self ~> mset_subset_diff_self
2205    mset_le_exists_conv ~> mset_subset_eq_exists_conv
2206    mset_le_mono_add_right_cancel ~> mset_subset_eq_mono_add_right_cancel
2207    mset_le_mono_add_left_cancel ~> mset_subset_eq_mono_add_left_cancel
2208    mset_le_mono_add ~> mset_subset_eq_mono_add
2209    mset_le_add_left ~> mset_subset_eq_add_left
2210    mset_le_add_right ~> mset_subset_eq_add_right
2211    mset_le_single ~> mset_subset_eq_single
2212    mset_le_multiset_union_diff_commute ~> mset_subset_eq_multiset_union_diff_commute
2213    diff_le_self ~> diff_subset_eq_self
2214    mset_leD ~> mset_subset_eqD
2215    mset_lessD ~> mset_subsetD
2216    mset_le_insertD ~> mset_subset_eq_insertD
2217    mset_less_of_empty ~> mset_subset_of_empty
2218    mset_less_size ~> mset_subset_size
2219    wf_less_mset_rel ~> wf_subset_mset_rel
2220    count_le_replicate_mset_le ~> count_le_replicate_mset_subset_eq
2221    mset_remdups_le ~> mset_remdups_subset_eq
2222    ms_lesseq_impl ~> subset_eq_mset_impl
2223
2224Some functions have been renamed:
2225    ms_lesseq_impl -> subset_eq_mset_impl
2226
2227* HOL-Library: multisets are now ordered with the multiset ordering
2228    #\<subseteq># ~> \<le>
2229    #\<subset># ~> <
2230    le_multiset ~> less_eq_multiset
2231    less_multiset ~> le_multiset
2232INCOMPATIBILITY.
2233
2234* Session HOL-Library: the prefix multiset_order has been discontinued:
2235the theorems can be directly accessed. As a consequence, the lemmas
2236"order_multiset" and "linorder_multiset" have been discontinued, and the
2237interpretations "multiset_linorder" and "multiset_wellorder" have been
2238replaced by instantiations. INCOMPATIBILITY.
2239
2240* Session HOL-Library: some theorems about the multiset ordering have
2241been renamed:
2242
2243    le_multiset_def ~> less_eq_multiset_def
2244    less_multiset_def ~> le_multiset_def
2245    less_eq_imp_le_multiset ~> subset_eq_imp_le_multiset
2246    mult_less_not_refl ~> mset_le_not_refl
2247    mult_less_trans ~> mset_le_trans
2248    mult_less_not_sym ~> mset_le_not_sym
2249    mult_less_asym ~> mset_le_asym
2250    mult_less_irrefl ~> mset_le_irrefl
2251    union_less_mono2{,1,2} ~> union_le_mono2{,1,2}
2252
2253    le_multiset\<^sub>H\<^sub>O ~> less_eq_multiset\<^sub>H\<^sub>O
2254    le_multiset_total ~> less_eq_multiset_total
2255    less_multiset_right_total ~> subset_eq_imp_le_multiset
2256    le_multiset_empty_left ~> less_eq_multiset_empty_left
2257    le_multiset_empty_right ~> less_eq_multiset_empty_right
2258    less_multiset_empty_right ~> le_multiset_empty_left
2259    less_multiset_empty_left ~> le_multiset_empty_right
2260    union_less_diff_plus ~> union_le_diff_plus
2261    ex_gt_count_imp_less_multiset ~> ex_gt_count_imp_le_multiset
2262    less_multiset_plus_left_nonempty ~> le_multiset_plus_left_nonempty
2263    le_multiset_plus_right_nonempty ~> le_multiset_plus_right_nonempty
2264INCOMPATIBILITY.
2265
2266* Session HOL-Library: the lemma mset_map has now the attribute [simp].
2267INCOMPATIBILITY.
2268
2269* Session HOL-Library: some theorems about multisets have been removed.
2270INCOMPATIBILITY, use the following replacements:
2271
2272    le_multiset_plus_plus_left_iff ~> add_less_cancel_right
2273    less_multiset_plus_plus_left_iff ~> add_less_cancel_right
2274    le_multiset_plus_plus_right_iff ~> add_less_cancel_left
2275    less_multiset_plus_plus_right_iff ~> add_less_cancel_left
2276    add_eq_self_empty_iff ~> add_cancel_left_right
2277    mset_subset_add_bothsides ~> subset_mset.add_less_cancel_right
2278    mset_less_add_bothsides ~> subset_mset.add_less_cancel_right
2279    mset_le_add_bothsides ~> subset_mset.add_less_cancel_right
2280    empty_inter ~> subset_mset.inf_bot_left
2281    inter_empty ~> subset_mset.inf_bot_right
2282    empty_sup ~> subset_mset.sup_bot_left
2283    sup_empty ~> subset_mset.sup_bot_right
2284    bdd_below_multiset ~> subset_mset.bdd_above_bot
2285    subset_eq_empty ~> subset_mset.le_zero_eq
2286    le_empty ~> subset_mset.le_zero_eq
2287    mset_subset_empty_nonempty ~> subset_mset.zero_less_iff_neq_zero
2288    mset_less_empty_nonempty ~> subset_mset.zero_less_iff_neq_zero
2289
2290* Session HOL-Library: some typeclass constraints about multisets have
2291been reduced from ordered or linordered to preorder. Multisets have the
2292additional typeclasses order_bot, no_top,
2293ordered_ab_semigroup_add_imp_le, ordered_cancel_comm_monoid_add,
2294linordered_cancel_ab_semigroup_add, and
2295ordered_ab_semigroup_monoid_add_imp_le. INCOMPATIBILITY.
2296
2297* Session HOL-Library: there are some new simplification rules about
2298multisets, the multiset ordering, and the subset ordering on multisets.
2299INCOMPATIBILITY.
2300
2301* Session HOL-Library: the subset ordering on multisets has now the
2302interpretations ordered_ab_semigroup_monoid_add_imp_le and
2303bounded_lattice_bot. INCOMPATIBILITY.
2304
2305* Session HOL-Library, theory Multiset: single has been removed in favor
2306of add_mset that roughly corresponds to Set.insert. Some theorems have
2307removed or changed:
2308
2309  single_not_empty ~> add_mset_not_empty or empty_not_add_mset
2310  fold_mset_insert ~> fold_mset_add_mset
2311  image_mset_insert ~> image_mset_add_mset
2312  union_single_eq_diff
2313  multi_self_add_other_not_self
2314  diff_single_eq_union
2315INCOMPATIBILITY.
2316
2317* Session HOL-Library, theory Multiset: some theorems have been changed
2318to use add_mset instead of single:
2319
2320  mset_add
2321  multi_self_add_other_not_self
2322  diff_single_eq_union
2323  union_single_eq_diff
2324  union_single_eq_member
2325  add_eq_conv_diff
2326  insert_noteq_member
2327  add_eq_conv_ex
2328  multi_member_split
2329  multiset_add_sub_el_shuffle
2330  mset_subset_eq_insertD
2331  mset_subset_insertD
2332  insert_subset_eq_iff
2333  insert_union_subset_iff
2334  multi_psub_of_add_self
2335  inter_add_left1
2336  inter_add_left2
2337  inter_add_right1
2338  inter_add_right2
2339  sup_union_left1
2340  sup_union_left2
2341  sup_union_right1
2342  sup_union_right2
2343  size_eq_Suc_imp_eq_union
2344  multi_nonempty_split
2345  mset_insort
2346  mset_update
2347  mult1I
2348  less_add
2349  mset_zip_take_Cons_drop_twice
2350  rel_mset_Zero
2351  msed_map_invL
2352  msed_map_invR
2353  msed_rel_invL
2354  msed_rel_invR
2355  le_multiset_right_total
2356  multiset_induct
2357  multiset_induct2_size
2358  multiset_induct2
2359INCOMPATIBILITY.
2360
2361* Session HOL-Library, theory Multiset: the definitions of some
2362constants have changed to use add_mset instead of adding a single
2363element:
2364
2365  image_mset
2366  mset
2367  replicate_mset
2368  mult1
2369  pred_mset
2370  rel_mset'
2371  mset_insort
2372
2373INCOMPATIBILITY.
2374
2375* Session HOL-Library, theory Multiset: due to the above changes, the
2376attributes of some multiset theorems have been changed:
2377
2378  insert_DiffM  [] ~> [simp]
2379  insert_DiffM2 [simp] ~> []
2380  diff_add_mset_swap [simp]
2381  fold_mset_add_mset [simp]
2382  diff_diff_add [simp] (for multisets only)
2383  diff_cancel [simp] ~> []
2384  count_single [simp] ~> []
2385  set_mset_single [simp] ~> []
2386  size_multiset_single [simp] ~> []
2387  size_single [simp] ~> []
2388  image_mset_single [simp] ~> []
2389  mset_subset_eq_mono_add_right_cancel [simp] ~> []
2390  mset_subset_eq_mono_add_left_cancel [simp] ~> []
2391  fold_mset_single [simp] ~> []
2392  subset_eq_empty [simp] ~> []
2393  empty_sup [simp] ~> []
2394  sup_empty [simp] ~> []
2395  inter_empty [simp] ~> []
2396  empty_inter [simp] ~> []
2397INCOMPATIBILITY.
2398
2399* Session HOL-Library, theory Multiset: the order of the variables in
2400the second cases of multiset_induct, multiset_induct2_size,
2401multiset_induct2 has been changed (e.g. Add A a ~> Add a A).
2402INCOMPATIBILITY.
2403
2404* Session HOL-Library, theory Multiset: there is now a simplification
2405procedure on multisets. It mimics the behavior of the procedure on
2406natural numbers. INCOMPATIBILITY.
2407
2408* Session HOL-Library, theory Multiset: renamed sums and products of
2409multisets:
2410
2411  msetsum ~> sum_mset
2412  msetprod ~> prod_mset
2413
2414* Session HOL-Library, theory Multiset: the notation for intersection
2415and union of multisets have been changed:
2416
2417  #\<inter> ~> \<inter>#
2418  #\<union> ~> \<union>#
2419
2420INCOMPATIBILITY.
2421
2422* Session HOL-Library, theory Multiset: the lemma
2423one_step_implies_mult_aux on multisets has been removed, use
2424one_step_implies_mult instead. INCOMPATIBILITY.
2425
2426* Session HOL-Library: theory Complete_Partial_Order2 provides reasoning
2427support for monotonicity and continuity in chain-complete partial orders
2428and about admissibility conditions for fixpoint inductions.
2429
2430* Session HOL-Library: theory Library/Polynomial contains also
2431derivation of polynomials (formerly in Library/Poly_Deriv) but not
2432gcd/lcm on polynomials over fields. This has been moved to a separate
2433theory Library/Polynomial_GCD_euclidean.thy, to pave way for a possible
2434future different type class instantiation for polynomials over factorial
2435rings. INCOMPATIBILITY.
2436
2437* Session HOL-Library: theory Sublist provides function "prefixes" with
2438the following renaming
2439
2440  prefixeq -> prefix
2441  prefix -> strict_prefix
2442  suffixeq -> suffix
2443  suffix -> strict_suffix
2444
2445Added theory of longest common prefixes.
2446
2447* Session HOL-Number_Theory: algebraic foundation for primes:
2448Generalisation of predicate "prime" and introduction of predicates
2449"prime_elem", "irreducible", a "prime_factorization" function, and the
2450"factorial_ring" typeclass with instance proofs for nat, int, poly. Some
2451theorems now have different names, most notably "prime_def" is now
2452"prime_nat_iff". INCOMPATIBILITY.
2453
2454* Session Old_Number_Theory has been removed, after porting remaining
2455theories.
2456
2457* Session HOL-Types_To_Sets provides an experimental extension of
2458Higher-Order Logic to allow translation of types to sets.
2459
2460
2461*** ML ***
2462
2463* Integer.gcd and Integer.lcm use efficient operations from the Poly/ML
2464library (notably for big integers). Subtle change of semantics:
2465Integer.gcd and Integer.lcm both normalize the sign, results are never
2466negative. This coincides with the definitions in HOL/GCD.thy.
2467INCOMPATIBILITY.
2468
2469* Structure Rat for rational numbers is now an integral part of
2470Isabelle/ML, with special notation @int/nat or @int for numerals (an
2471abbreviation for antiquotation @{Pure.rat argument}) and ML pretty
2472printing. Standard operations on type Rat.rat are provided via ad-hoc
2473overloading of + - * / < <= > >= ~ abs. INCOMPATIBILITY, need to
2474use + instead of +/ etc. Moreover, exception Rat.DIVZERO has been
2475superseded by General.Div.
2476
2477* ML antiquotation @{path} is superseded by @{file}, which ensures that
2478the argument is a plain file. Minor INCOMPATIBILITY.
2479
2480* Antiquotation @{make_string} is available during Pure bootstrap --
2481with approximative output quality.
2482
2483* Low-level ML system structures (like PolyML and RunCall) are no longer
2484exposed to Isabelle/ML user-space. Potential INCOMPATIBILITY.
2485
2486* The ML function "ML" provides easy access to run-time compilation.
2487This is particularly useful for conditional compilation, without
2488requiring separate files.
2489
2490* Option ML_exception_debugger controls detailed exception trace via the
2491Poly/ML debugger. Relevant ML modules need to be compiled beforehand
2492with ML_file_debug, or with ML_file and option ML_debugger enabled. Note
2493debugger information requires consirable time and space: main
2494Isabelle/HOL with full debugger support may need ML_system_64.
2495
2496* Local_Theory.restore has been renamed to Local_Theory.reset to
2497emphasize its disruptive impact on the cumulative context, notably the
2498scope of 'private' or 'qualified' names. Note that Local_Theory.reset is
2499only appropriate when targets are managed, e.g. starting from a global
2500theory and returning to it. Regular definitional packages should use
2501balanced blocks of Local_Theory.open_target versus
2502Local_Theory.close_target instead. Rare INCOMPATIBILITY.
2503
2504* Structure TimeLimit (originally from the SML/NJ library) has been
2505replaced by structure Timeout, with slightly different signature.
2506INCOMPATIBILITY.
2507
2508* Discontinued cd and pwd operations, which are not well-defined in a
2509multi-threaded environment. Note that files are usually located
2510relatively to the master directory of a theory (see also
2511File.full_path). Potential INCOMPATIBILITY.
2512
2513* Binding.empty_atts supersedes Thm.empty_binding and
2514Attrib.empty_binding. Minor INCOMPATIBILITY.
2515
2516
2517*** System ***
2518
2519* SML/NJ and old versions of Poly/ML are no longer supported.
2520
2521* Poly/ML heaps now follow the hierarchy of sessions, and thus require
2522much less disk space.
2523
2524* The Isabelle ML process is now managed directly by Isabelle/Scala, and
2525shell scripts merely provide optional command-line access. In
2526particular:
2527
2528  . Scala module ML_Process to connect to the raw ML process,
2529    with interaction via stdin/stdout/stderr or in batch mode;
2530  . command-line tool "isabelle console" as interactive wrapper;
2531  . command-line tool "isabelle process" as batch mode wrapper.
2532
2533* The executable "isabelle_process" has been discontinued. Tools and
2534prover front-ends should use ML_Process or Isabelle_Process in
2535Isabelle/Scala. INCOMPATIBILITY.
2536
2537* New command-line tool "isabelle process" supports ML evaluation of
2538literal expressions (option -e) or files (option -f) in the context of a
2539given heap image. Errors lead to premature exit of the ML process with
2540return code 1.
2541
2542* The command-line tool "isabelle build" supports option -N for cyclic
2543shuffling of NUMA CPU nodes. This may help performance tuning on Linux
2544servers with separate CPU/memory modules.
2545
2546* System option "threads" (for the size of the Isabelle/ML thread farm)
2547is also passed to the underlying ML runtime system as --gcthreads,
2548unless there is already a default provided via ML_OPTIONS settings.
2549
2550* System option "checkpoint" helps to fine-tune the global heap space
2551management of isabelle build. This is relevant for big sessions that may
2552exhaust the small 32-bit address space of the ML process (which is used
2553by default).
2554
2555* System option "profiling" specifies the mode for global ML profiling
2556in "isabelle build". Possible values are "time", "allocations". The
2557command-line tool "isabelle profiling_report" helps to digest the
2558resulting log files.
2559
2560* System option "ML_process_policy" specifies an optional command prefix
2561for the underlying ML process, e.g. to control CPU affinity on
2562multiprocessor systems. The "isabelle jedit" tool allows to override the
2563implicit default via option -p.
2564
2565* Command-line tool "isabelle console" provides option -r to help to
2566bootstrapping Isabelle/Pure interactively.
2567
2568* Command-line tool "isabelle yxml" has been discontinued.
2569INCOMPATIBILITY, use operations from the modules "XML" and "YXML" in
2570Isabelle/ML or Isabelle/Scala.
2571
2572* Many Isabelle tools that require a Java runtime system refer to the
2573settings ISABELLE_TOOL_JAVA_OPTIONS32 / ISABELLE_TOOL_JAVA_OPTIONS64,
2574depending on the underlying platform. The settings for "isabelle build"
2575ISABELLE_BUILD_JAVA_OPTIONS32 / ISABELLE_BUILD_JAVA_OPTIONS64 have been
2576discontinued. Potential INCOMPATIBILITY.
2577
2578* The Isabelle system environment always ensures that the main
2579executables are found within the shell search $PATH: "isabelle" and
2580"isabelle_scala_script".
2581
2582* Isabelle tools may consist of .scala files: the Scala compiler is
2583invoked on the spot. The source needs to define some object that extends
2584Isabelle_Tool.Body.
2585
2586* File.bash_string, File.bash_path etc. represent Isabelle/ML and
2587Isabelle/Scala strings authentically within GNU bash. This is useful to
2588produce robust shell scripts under program control, without worrying
2589about spaces or special characters. Note that user output works via
2590Path.print (ML) or Path.toString (Scala). INCOMPATIBILITY, the old (and
2591less versatile) operations File.shell_quote, File.shell_path etc. have
2592been discontinued.
2593
2594* The isabelle_java executable allows to run a Java process within the
2595name space of Java and Scala components that are bundled with Isabelle,
2596but without the Isabelle settings environment.
2597
2598* Isabelle/Scala: the SSH module supports ssh and sftp connections, for
2599remote command-execution and file-system access. This resembles
2600operations from module File and Isabelle_System to some extent. Note
2601that Path specifications need to be resolved remotely via
2602ssh.remote_path instead of File.standard_path: the implicit process
2603environment is different, Isabelle settings are not available remotely.
2604
2605* Isabelle/Scala: the Mercurial module supports repositories via the
2606regular hg command-line interface. The repositroy clone and working
2607directory may reside on a local or remote file-system (via ssh
2608connection).
2609
2610
2611
2612New in Isabelle2016 (February 2016)
2613-----------------------------------
2614
2615*** General ***
2616
2617* Eisbach is now based on Pure instead of HOL. Objects-logics may import
2618either the theory ~~/src/HOL/Eisbach/Eisbach (for HOL etc.) or
2619~~/src/HOL/Eisbach/Eisbach_Old_Appl_Syntax (for FOL, ZF etc.). Note that
2620the HOL-Eisbach session located in ~~/src/HOL/Eisbach/ contains further
2621examples that do require HOL.
2622
2623* Better resource usage on all platforms (Linux, Windows, Mac OS X) for
2624both Isabelle/ML and Isabelle/Scala.  Slightly reduced heap space usage.
2625
2626* Former "xsymbols" syntax with Isabelle symbols is used by default,
2627without any special print mode. Important ASCII replacement syntax
2628remains available under print mode "ASCII", but less important syntax
2629has been removed (see below).
2630
2631* Support for more arrow symbols, with rendering in LaTeX and Isabelle
2632fonts: \<Lleftarrow> \<Rrightarrow> \<longlongleftarrow> \<longlongrightarrow> \<longlonglongleftarrow> \<longlonglongrightarrow>.
2633
2634* Special notation \<struct> for the first implicit 'structure' in the
2635context has been discontinued. Rare INCOMPATIBILITY, use explicit
2636structure name instead, notably in indexed notation with block-subscript
2637(e.g. \<odot>\<^bsub>A\<^esub>).
2638
2639* The glyph for \<diamond> in the IsabelleText font now corresponds better to its
2640counterpart \<box> as quantifier-like symbol. A small diamond is available as
2641\<diamondop>; the old symbol \<struct> loses this rendering and any special
2642meaning.
2643
2644* Syntax for formal comments "-- text" now also supports the symbolic
2645form "\<comment> text". Command-line tool "isabelle update_cartouches -c" helps
2646to update old sources.
2647
2648* Toplevel theorem statements have been simplified as follows:
2649
2650  theorems             ~>  lemmas
2651  schematic_lemma      ~>  schematic_goal
2652  schematic_theorem    ~>  schematic_goal
2653  schematic_corollary  ~>  schematic_goal
2654
2655Command-line tool "isabelle update_theorems" updates theory sources
2656accordingly.
2657
2658* Toplevel theorem statement 'proposition' is another alias for
2659'theorem'.
2660
2661* The old 'defs' command has been removed (legacy since Isabelle2014).
2662INCOMPATIBILITY, use regular 'definition' instead. Overloaded and/or
2663deferred definitions require a surrounding 'overloading' block.
2664
2665
2666*** Prover IDE -- Isabelle/Scala/jEdit ***
2667
2668* IDE support for the source-level debugger of Poly/ML, to work with
2669Isabelle/ML and official Standard ML. Option "ML_debugger" and commands
2670'ML_file_debug', 'ML_file_no_debug', 'SML_file_debug',
2671'SML_file_no_debug' control compilation of sources with or without
2672debugging information. The Debugger panel allows to set breakpoints (via
2673context menu), step through stopped threads, evaluate local ML
2674expressions etc. At least one Debugger view needs to be active to have
2675any effect on the running ML program.
2676
2677* The State panel manages explicit proof state output, with dynamic
2678auto-update according to cursor movement. Alternatively, the jEdit
2679action "isabelle.update-state" (shortcut S+ENTER) triggers manual
2680update.
2681
2682* The Output panel no longer shows proof state output by default, to
2683avoid GUI overcrowding. INCOMPATIBILITY, use the State panel instead or
2684enable option "editor_output_state".
2685
2686* The text overview column (status of errors, warnings etc.) is updated
2687asynchronously, leading to much better editor reactivity. Moreover, the
2688full document node content is taken into account. The width of the
2689column is scaled according to the main text area font, for improved
2690visibility.
2691
2692* The main text area no longer changes its color hue in outdated
2693situations. The text overview column takes over the role to indicate
2694unfinished edits in the PIDE pipeline. This avoids flashing text display
2695due to ad-hoc updates by auxiliary GUI components, such as the State
2696panel.
2697
2698* Slightly improved scheduling for urgent print tasks (e.g. command
2699state output, interactive queries) wrt. long-running background tasks.
2700
2701* Completion of symbols via prefix of \<name> or \<^name> or \name is
2702always possible, independently of the language context. It is never
2703implicit: a popup will show up unconditionally.
2704
2705* Additional abbreviations for syntactic completion may be specified in
2706$ISABELLE_HOME/etc/abbrevs and $ISABELLE_HOME_USER/etc/abbrevs, with
2707support for simple templates using ASCII 007 (bell) as placeholder.
2708
2709* Symbols \<oplus>, \<Oplus>, \<otimes>, \<Otimes>, \<odot>, \<Odot>, \<ominus>, \<oslash> no longer provide abbreviations for
2710completion like "+o", "*o", ".o" etc. -- due to conflicts with other
2711ASCII syntax. INCOMPATIBILITY, use plain backslash-completion or define
2712suitable abbreviations in $ISABELLE_HOME_USER/etc/abbrevs.
2713
2714* Action "isabelle-emph" (with keyboard shortcut C+e LEFT) controls
2715emphasized text style; the effect is visible in document output, not in
2716the editor.
2717
2718* Action "isabelle-reset" now uses keyboard shortcut C+e BACK_SPACE,
2719instead of former C+e LEFT.
2720
2721* The command-line tool "isabelle jedit" and the isabelle.Main
2722application wrapper treat the default $USER_HOME/Scratch.thy more
2723uniformly, and allow the dummy file argument ":" to open an empty buffer
2724instead.
2725
2726* New command-line tool "isabelle jedit_client" allows to connect to an
2727already running Isabelle/jEdit process. This achieves the effect of
2728single-instance applications seen on common GUI desktops.
2729
2730* The default look-and-feel for Linux is the traditional "Metal", which
2731works better with GUI scaling for very high-resolution displays (e.g.
27324K). Moreover, it is generally more robust than "Nimbus".
2733
2734* Update to jedit-5.3.0, with improved GUI scaling and support of
2735high-resolution displays (e.g. 4K).
2736
2737* The main Isabelle executable is managed as single-instance Desktop
2738application uniformly on all platforms: Linux, Windows, Mac OS X.
2739
2740
2741*** Document preparation ***
2742
2743* Commands 'paragraph' and 'subparagraph' provide additional section
2744headings. Thus there are 6 levels of standard headings, as in HTML.
2745
2746* Command 'text_raw' has been clarified: input text is processed as in
2747'text' (with antiquotations and control symbols). The key difference is
2748the lack of the surrounding isabelle markup environment in output.
2749
2750* Text is structured in paragraphs and nested lists, using notation that
2751is similar to Markdown. The control symbols for list items are as
2752follows:
2753
2754  \<^item>  itemize
2755  \<^enum>  enumerate
2756  \<^descr>  description
2757
2758* There is a new short form for antiquotations with a single argument
2759that is a cartouche: \<^name>\<open>...\<close> is equivalent to @{name \<open>...\<close>} and
2760\<open>...\<close> without control symbol is equivalent to @{cartouche \<open>...\<close>}.
2761\<^name> without following cartouche is equivalent to @{name}. The
2762standard Isabelle fonts provide glyphs to render important control
2763symbols, e.g. "\<^verbatim>", "\<^emph>", "\<^bold>".
2764
2765* Antiquotations @{noindent}, @{smallskip}, @{medskip}, @{bigskip} with
2766corresponding control symbols \<^noindent>, \<^smallskip>, \<^medskip>, \<^bigskip> specify spacing formally, using
2767standard LaTeX macros of the same names.
2768
2769* Antiquotation @{cartouche} in Isabelle/Pure is the same as @{text}.
2770Consequently, \<open>...\<close> without any decoration prints literal quasi-formal
2771text. Command-line tool "isabelle update_cartouches -t" helps to update
2772old sources, by approximative patching of the content of string and
2773cartouche tokens seen in theory sources.
2774
2775* The @{text} antiquotation now ignores the antiquotation option
2776"source". The given text content is output unconditionally, without any
2777surrounding quotes etc. Subtle INCOMPATIBILITY, put quotes into the
2778argument where they are really intended, e.g. @{text \<open>"foo"\<close>}. Initial
2779or terminal spaces are ignored.
2780
2781* Antiquotations @{emph} and @{bold} output LaTeX source recursively,
2782adding appropriate text style markup. These may be used in the short
2783form \<^emph>\<open>...\<close> and \<^bold>\<open>...\<close>.
2784
2785* Document antiquotation @{footnote} outputs LaTeX source recursively,
2786marked as \footnote{}. This may be used in the short form \<^footnote>\<open>...\<close>.
2787
2788* Antiquotation @{verbatim [display]} supports option "indent".
2789
2790* Antiquotation @{theory_text} prints uninterpreted theory source text
2791(Isar outer syntax with command keywords etc.). This may be used in the
2792short form \<^theory_text>\<open>...\<close>. @{theory_text [display]} supports option "indent".
2793
2794* Antiquotation @{doc ENTRY} provides a reference to the given
2795documentation, with a hyperlink in the Prover IDE.
2796
2797* Antiquotations @{command}, @{method}, @{attribute} print checked
2798entities of the Isar language.
2799
2800* HTML presentation uses the standard IsabelleText font and Unicode
2801rendering of Isabelle symbols like Isabelle/Scala/jEdit.  The former
2802print mode "HTML" loses its special meaning.
2803
2804
2805*** Isar ***
2806
2807* Local goals ('have', 'show', 'hence', 'thus') allow structured rule
2808statements like fixes/assumes/shows in theorem specifications, but the
2809notation is postfix with keywords 'if' (or 'when') and 'for'. For
2810example:
2811
2812  have result: "C x y"
2813    if "A x" and "B y"
2814    for x :: 'a and y :: 'a
2815    <proof>
2816
2817The local assumptions are bound to the name "that". The result is
2818exported from context of the statement as usual. The above roughly
2819corresponds to a raw proof block like this:
2820
2821  {
2822    fix x :: 'a and y :: 'a
2823    assume that: "A x" "B y"
2824    have "C x y" <proof>
2825  }
2826  note result = this
2827
2828The keyword 'when' may be used instead of 'if', to indicate 'presume'
2829instead of 'assume' above.
2830
2831* Assumptions ('assume', 'presume') allow structured rule statements
2832using 'if' and 'for', similar to 'have' etc. above. For example:
2833
2834  assume result: "C x y"
2835    if "A x" and "B y"
2836    for x :: 'a and y :: 'a
2837
2838This assumes "\<And>x y::'a. A x \<Longrightarrow> B y \<Longrightarrow> C x y" and produces a general
2839result as usual: "A ?x \<Longrightarrow> B ?y \<Longrightarrow> C ?x ?y".
2840
2841Vacuous quantification in assumptions is omitted, i.e. a for-context
2842only effects propositions according to actual use of variables. For
2843example:
2844
2845  assume "A x" and "B y" for x and y
2846
2847is equivalent to:
2848
2849  assume "\<And>x. A x" and "\<And>y. B y"
2850
2851* The meaning of 'show' with Pure rule statements has changed: premises
2852are treated in the sense of 'assume', instead of 'presume'. This means,
2853a goal like "\<And>x. A x \<Longrightarrow> B x \<Longrightarrow> C x" can be solved completely as
2854follows:
2855
2856  show "\<And>x. A x \<Longrightarrow> B x \<Longrightarrow> C x"
2857
2858or:
2859
2860  show "C x" if "A x" "B x" for x
2861
2862Rare INCOMPATIBILITY, the old behaviour may be recovered as follows:
2863
2864  show "C x" when "A x" "B x" for x
2865
2866* New command 'consider' states rules for generalized elimination and
2867case splitting. This is like a toplevel statement "theorem obtains" used
2868within a proof body; or like a multi-branch 'obtain' without activation
2869of the local context elements yet.
2870
2871* Proof method "cases" allows to specify the rule as first entry of
2872chained facts.  This is particularly useful with 'consider':
2873
2874  consider (a) A | (b) B | (c) C <proof>
2875  then have something
2876  proof cases
2877    case a
2878    then show ?thesis <proof>
2879  next
2880    case b
2881    then show ?thesis <proof>
2882  next
2883    case c
2884    then show ?thesis <proof>
2885  qed
2886
2887* Command 'case' allows fact name and attribute specification like this:
2888
2889  case a: (c xs)
2890  case a [attributes]: (c xs)
2891
2892Facts that are introduced by invoking the case context are uniformly
2893qualified by "a"; the same name is used for the cumulative fact. The old
2894form "case (c xs) [attributes]" is no longer supported. Rare
2895INCOMPATIBILITY, need to adapt uses of case facts in exotic situations,
2896and always put attributes in front.
2897
2898* The standard proof method of commands 'proof' and '..' is now called
2899"standard" to make semantically clear what it is; the old name "default"
2900is still available as legacy for some time. Documentation now explains
2901'..' more accurately as "by standard" instead of "by rule".
2902
2903* Nesting of Isar goal structure has been clarified: the context after
2904the initial backwards refinement is retained for the whole proof, within
2905all its context sections (as indicated via 'next'). This is e.g.
2906relevant for 'using', 'including', 'supply':
2907
2908  have "A \<and> A" if a: A for A
2909    supply [simp] = a
2910  proof
2911    show A by simp
2912  next
2913    show A by simp
2914  qed
2915
2916* Command 'obtain' binds term abbreviations (via 'is' patterns) in the
2917proof body as well, abstracted over relevant parameters.
2918
2919* Improved type-inference for theorem statement 'obtains': separate
2920parameter scope for of each clause.
2921
2922* Term abbreviations via 'is' patterns also work for schematic
2923statements: result is abstracted over unknowns.
2924
2925* Command 'subgoal' allows to impose some structure on backward
2926refinements, to avoid proof scripts degenerating into long of 'apply'
2927sequences. Further explanations and examples are given in the isar-ref
2928manual.
2929
2930* Command 'supply' supports fact definitions during goal refinement
2931('apply' scripts).
2932
2933* Proof method "goal_cases" turns the current subgoals into cases within
2934the context; the conclusion is bound to variable ?case in each case. For
2935example:
2936
2937lemma "\<And>x. A x \<Longrightarrow> B x \<Longrightarrow> C x"
2938  and "\<And>y z. U y \<Longrightarrow> V z \<Longrightarrow> W y z"
2939proof goal_cases
2940  case (1 x)
2941  then show ?case using \<open>A x\<close> \<open>B x\<close> sorry
2942next
2943  case (2 y z)
2944  then show ?case using \<open>U y\<close> \<open>V z\<close> sorry
2945qed
2946
2947lemma "\<And>x. A x \<Longrightarrow> B x \<Longrightarrow> C x"
2948  and "\<And>y z. U y \<Longrightarrow> V z \<Longrightarrow> W y z"
2949proof goal_cases
2950  case prems: 1
2951  then show ?case using prems sorry
2952next
2953  case prems: 2
2954  then show ?case using prems sorry
2955qed
2956
2957* The undocumented feature of implicit cases goal1, goal2, goal3, etc.
2958is marked as legacy, and will be removed eventually. The proof method
2959"goals" achieves a similar effect within regular Isar; often it can be
2960done more adequately by other means (e.g. 'consider').
2961
2962* The vacuous fact "TERM x" may be established "by fact" or as `TERM x`
2963as well, not just "by this" or "." as before.
2964
2965* Method "sleep" succeeds after a real-time delay (in seconds). This is
2966occasionally useful for demonstration and testing purposes.
2967
2968
2969*** Pure ***
2970
2971* Qualifiers in locale expressions default to mandatory ('!') regardless
2972of the command. Previously, for 'locale' and 'sublocale' the default was
2973optional ('?'). The old synatx '!' has been discontinued.
2974INCOMPATIBILITY, remove '!' and add '?' as required.
2975
2976* Keyword 'rewrites' identifies rewrite morphisms in interpretation
2977commands. Previously, the keyword was 'where'. INCOMPATIBILITY.
2978
2979* More gentle suppression of syntax along locale morphisms while
2980printing terms. Previously 'abbreviation' and 'notation' declarations
2981would be suppressed for morphisms except term identity. Now
2982'abbreviation' is also kept for morphims that only change the involved
2983parameters, and only 'notation' is suppressed. This can be of great help
2984when working with complex locale hierarchies, because proof states are
2985displayed much more succinctly. It also means that only notation needs
2986to be redeclared if desired, as illustrated by this example:
2987
2988  locale struct = fixes composition :: "'a => 'a => 'a" (infixl "\<cdot>" 65)
2989  begin
2990    definition derived (infixl "\<odot>" 65) where ...
2991  end
2992
2993  locale morphism =
2994    left: struct composition + right: struct composition'
2995    for composition (infix "\<cdot>" 65) and composition' (infix "\<cdot>''" 65)
2996  begin
2997    notation right.derived ("\<odot>''")
2998  end
2999
3000* Command 'global_interpretation' issues interpretations into global
3001theories, with optional rewrite definitions following keyword 'defines'.
3002
3003* Command 'sublocale' accepts optional rewrite definitions after keyword
3004'defines'.
3005
3006* Command 'permanent_interpretation' has been discontinued. Use
3007'global_interpretation' or 'sublocale' instead. INCOMPATIBILITY.
3008
3009* Command 'print_definitions' prints dependencies of definitional
3010specifications. This functionality used to be part of 'print_theory'.
3011
3012* Configuration option rule_insts_schematic has been discontinued
3013(intermediate legacy feature in Isabelle2015). INCOMPATIBILITY.
3014
3015* Abbreviations in type classes now carry proper sort constraint. Rare
3016INCOMPATIBILITY in situations where the previous misbehaviour has been
3017exploited.
3018
3019* Refinement of user-space type system in type classes: pseudo-local
3020operations behave more similar to abbreviations. Potential
3021INCOMPATIBILITY in exotic situations.
3022
3023
3024*** HOL ***
3025
3026* The 'typedef' command has been upgraded from a partially checked
3027"axiomatization", to a full definitional specification that takes the
3028global collection of overloaded constant / type definitions into
3029account. Type definitions with open dependencies on overloaded
3030definitions need to be specified as "typedef (overloaded)". This
3031provides extra robustness in theory construction. Rare INCOMPATIBILITY.
3032
3033* Qualification of various formal entities in the libraries is done more
3034uniformly via "context begin qualified definition ... end" instead of
3035old-style "hide_const (open) ...". Consequently, both the defined
3036constant and its defining fact become qualified, e.g. Option.is_none and
3037Option.is_none_def. Occasional INCOMPATIBILITY in applications.
3038
3039* Some old and rarely used ASCII replacement syntax has been removed.
3040INCOMPATIBILITY, standard syntax with symbols should be used instead.
3041The subsequent commands help to reproduce the old forms, e.g. to
3042simplify porting old theories:
3043
3044  notation iff  (infixr "<->" 25)
3045
3046  notation Times  (infixr "<*>" 80)
3047
3048  type_notation Map.map  (infixr "~=>" 0)
3049  notation Map.map_comp  (infixl "o'_m" 55)
3050
3051  type_notation FinFun.finfun ("(_ =>f /_)" [22, 21] 21)
3052
3053  notation FuncSet.funcset  (infixr "->" 60)
3054  notation FuncSet.extensional_funcset  (infixr "->\<^sub>E" 60)
3055
3056  notation Omega_Words_Fun.conc (infixr "conc" 65)
3057
3058  notation Preorder.equiv ("op ~~")
3059    and Preorder.equiv ("(_/ ~~ _)" [51, 51] 50)
3060
3061  notation (in topological_space) tendsto (infixr "--->" 55)
3062  notation (in topological_space) LIMSEQ ("((_)/ ----> (_))" [60, 60] 60)
3063  notation LIM ("((_)/ -- (_)/ --> (_))" [60, 0, 60] 60)
3064
3065  notation NSA.approx (infixl "@=" 50)
3066  notation NSLIMSEQ ("((_)/ ----NS> (_))" [60, 60] 60)
3067  notation NSLIM ("((_)/ -- (_)/ --NS> (_))" [60, 0, 60] 60)
3068
3069* The alternative notation "\<Colon>" for type and sort constraints has been
3070removed: in LaTeX document output it looks the same as "::".
3071INCOMPATIBILITY, use plain "::" instead.
3072
3073* Commands 'inductive' and 'inductive_set' work better when names for
3074intro rules are omitted: the "cases" and "induct" rules no longer
3075declare empty case_names, but no case_names at all. This allows to use
3076numbered cases in proofs, without requiring method "goal_cases".
3077
3078* Inductive definitions ('inductive', 'coinductive', etc.) expose
3079low-level facts of the internal construction only if the option
3080"inductive_internals" is enabled. This refers to the internal predicate
3081definition and its monotonicity result. Rare INCOMPATIBILITY.
3082
3083* Recursive function definitions ('fun', 'function', 'partial_function')
3084expose low-level facts of the internal construction only if the option
3085"function_internals" is enabled. Its internal inductive definition is
3086also subject to "inductive_internals". Rare INCOMPATIBILITY.
3087
3088* BNF datatypes ('datatype', 'codatatype', etc.) expose low-level facts
3089of the internal construction only if the option "bnf_internals" is
3090enabled. This supersedes the former option "bnf_note_all". Rare
3091INCOMPATIBILITY.
3092
3093* Combinator to represent case distinction on products is named
3094"case_prod", uniformly, discontinuing any input aliasses. Very popular
3095theorem aliasses have been retained.
3096
3097Consolidated facts:
3098  PairE ~> prod.exhaust
3099  Pair_eq ~> prod.inject
3100  pair_collapse ~> prod.collapse
3101  Pair_fst_snd_eq ~> prod_eq_iff
3102  split_twice ~> prod.case_distrib
3103  split_weak_cong ~> prod.case_cong_weak
3104  split_split ~> prod.split
3105  split_split_asm ~> prod.split_asm
3106  splitI ~> case_prodI
3107  splitD ~> case_prodD
3108  splitI2 ~> case_prodI2
3109  splitI2' ~> case_prodI2'
3110  splitE ~> case_prodE
3111  splitE' ~> case_prodE'
3112  split_pair ~> case_prod_Pair
3113  split_eta ~> case_prod_eta
3114  split_comp ~> case_prod_comp
3115  mem_splitI ~> mem_case_prodI
3116  mem_splitI2 ~> mem_case_prodI2
3117  mem_splitE ~> mem_case_prodE
3118  The_split ~> The_case_prod
3119  cond_split_eta ~> cond_case_prod_eta
3120  Collect_split_in_rel_leE ~> Collect_case_prod_in_rel_leE
3121  Collect_split_in_rel_leI ~> Collect_case_prod_in_rel_leI
3122  in_rel_Collect_split_eq ~> in_rel_Collect_case_prod_eq
3123  Collect_split_Grp_eqD ~> Collect_case_prod_Grp_eqD
3124  Collect_split_Grp_inD ~> Collect_case_prod_Grp_in
3125  Domain_Collect_split ~> Domain_Collect_case_prod
3126  Image_Collect_split ~> Image_Collect_case_prod
3127  Range_Collect_split ~> Range_Collect_case_prod
3128  Eps_split ~> Eps_case_prod
3129  Eps_split_eq ~> Eps_case_prod_eq
3130  split_rsp ~> case_prod_rsp
3131  curry_split ~> curry_case_prod
3132  split_curry ~> case_prod_curry
3133
3134Changes in structure HOLogic:
3135  split_const ~> case_prod_const
3136  mk_split ~> mk_case_prod
3137  mk_psplits ~> mk_ptupleabs
3138  strip_psplits ~> strip_ptupleabs
3139
3140INCOMPATIBILITY.
3141
3142* The coercions to type 'real' have been reorganised. The function
3143'real' is no longer overloaded, but has type 'nat => real' and
3144abbreviates of_nat for that type. Also 'real_of_int :: int => real'
3145abbreviates of_int for that type. Other overloaded instances of 'real'
3146have been replaced by 'real_of_ereal' and 'real_of_float'.
3147
3148Consolidated facts (among others):
3149  real_of_nat_le_iff -> of_nat_le_iff
3150  real_of_nat_numeral of_nat_numeral
3151  real_of_int_zero of_int_0
3152  real_of_nat_zero of_nat_0
3153  real_of_one of_int_1
3154  real_of_int_add of_int_add
3155  real_of_nat_add of_nat_add
3156  real_of_int_diff of_int_diff
3157  real_of_nat_diff of_nat_diff
3158  floor_subtract floor_diff_of_int
3159  real_of_int_inject of_int_eq_iff
3160  real_of_int_gt_zero_cancel_iff of_int_0_less_iff
3161  real_of_int_ge_zero_cancel_iff of_int_0_le_iff
3162  real_of_nat_ge_zero of_nat_0_le_iff
3163  real_of_int_ceiling_ge le_of_int_ceiling
3164  ceiling_less_eq ceiling_less_iff
3165  ceiling_le_eq ceiling_le_iff
3166  less_floor_eq less_floor_iff
3167  floor_less_eq floor_less_iff
3168  floor_divide_eq_div floor_divide_of_int_eq
3169  real_of_int_zero_cancel of_nat_eq_0_iff
3170  ceiling_real_of_int ceiling_of_int
3171
3172INCOMPATIBILITY.
3173
3174* Theory Map: lemma map_of_is_SomeD was a clone of map_of_SomeD and has
3175been removed. INCOMPATIBILITY.
3176
3177* Quickcheck setup for finite sets.
3178
3179* Discontinued simp_legacy_precond. Potential INCOMPATIBILITY.
3180
3181* Sledgehammer:
3182  - The MaSh relevance filter has been sped up.
3183  - Proof reconstruction has been improved, to minimize the incidence of
3184    cases where Sledgehammer gives a proof that does not work.
3185  - Auto Sledgehammer now minimizes and preplays the results.
3186  - Handle Vampire 4.0 proof output without raising exception.
3187  - Eliminated "MASH" environment variable. Use the "MaSh" option in
3188    Isabelle/jEdit instead. INCOMPATIBILITY.
3189  - Eliminated obsolete "blocking" option and related subcommands.
3190
3191* Nitpick:
3192  - Fixed soundness bug in translation of "finite" predicate.
3193  - Fixed soundness bug in "destroy_constrs" optimization.
3194  - Fixed soundness bug in translation of "rat" type.
3195  - Removed "check_potential" and "check_genuine" options.
3196  - Eliminated obsolete "blocking" option.
3197
3198* (Co)datatype package:
3199  - New commands "lift_bnf" and "copy_bnf" for lifting (copying) a BNF
3200    structure on the raw type to an abstract type defined using typedef.
3201  - Always generate "case_transfer" theorem.
3202  - For mutual types, generate slightly stronger "rel_induct",
3203    "rel_coinduct", and "coinduct" theorems. INCOMPATIBILITY.
3204  - Allow discriminators and selectors with the same name as the type
3205    being defined.
3206  - Avoid various internal name clashes (e.g., 'datatype f = f').
3207
3208* Transfer: new methods for interactive debugging of 'transfer' and
3209'transfer_prover': 'transfer_start', 'transfer_step', 'transfer_end',
3210'transfer_prover_start' and 'transfer_prover_end'.
3211
3212* New diagnostic command print_record for displaying record definitions.
3213
3214* Division on integers is bootstrapped directly from division on
3215naturals and uses generic numeral algorithm for computations. Slight
3216INCOMPATIBILITY, simproc numeral_divmod replaces and generalizes former
3217simprocs binary_int_div and binary_int_mod
3218
3219* Tightened specification of class semiring_no_zero_divisors. Minor
3220INCOMPATIBILITY.
3221
3222* Class algebraic_semidom introduces common algebraic notions of
3223integral (semi)domains, particularly units. Although logically subsumed
3224by fields, is is not a super class of these in order not to burden
3225fields with notions that are trivial there.
3226
3227* Class normalization_semidom specifies canonical representants for
3228equivalence classes of associated elements in an integral (semi)domain.
3229This formalizes associated elements as well.
3230
3231* Abstract specification of gcd/lcm operations in classes semiring_gcd,
3232semiring_Gcd, semiring_Lcd. Minor INCOMPATIBILITY: facts gcd_nat.commute
3233and gcd_int.commute are subsumed by gcd.commute, as well as
3234gcd_nat.assoc and gcd_int.assoc by gcd.assoc.
3235
3236* Former constants Fields.divide (_ / _) and Divides.div (_ div _) are
3237logically unified to Rings.divide in syntactic type class Rings.divide,
3238with infix syntax (_ div _). Infix syntax (_ / _) for field division is
3239added later as abbreviation in class Fields.inverse. INCOMPATIBILITY,
3240instantiations must refer to Rings.divide rather than the former
3241separate constants, hence infix syntax (_ / _) is usually not available
3242during instantiation.
3243
3244* New cancellation simprocs for boolean algebras to cancel complementary
3245terms for sup and inf. For example, "sup x (sup y (- x))" simplifies to
3246"top". INCOMPATIBILITY.
3247
3248* Class uniform_space introduces uniform spaces btw topological spaces
3249and metric spaces. Minor INCOMPATIBILITY: open_<type>_def needs to be
3250introduced in the form of an uniformity. Some constants are more general
3251now, it may be necessary to add type class constraints.
3252
3253  open_real_def \<leadsto> open_dist
3254  open_complex_def \<leadsto> open_dist
3255
3256* Library/Monad_Syntax: notation uses symbols \<bind> and \<then>. INCOMPATIBILITY.
3257
3258* Library/Multiset:
3259  - Renamed multiset inclusion operators:
3260      < ~> <#
3261      > ~> >#
3262      <= ~> <=#
3263      >= ~> >=#
3264      \<le> ~> \<le>#
3265      \<ge> ~> \<ge>#
3266    INCOMPATIBILITY.
3267  - Added multiset inclusion operator syntax:
3268      \<subset>#
3269      \<subseteq>#
3270      \<supset>#
3271      \<supseteq>#
3272  - "'a multiset" is no longer an instance of the "order",
3273    "ordered_ab_semigroup_add_imp_le", "ordered_cancel_comm_monoid_diff",
3274    "semilattice_inf", and "semilattice_sup" type classes. The theorems
3275    previously provided by these type classes (directly or indirectly)
3276    are now available through the "subset_mset" interpretation
3277    (e.g. add_mono ~> subset_mset.add_mono).
3278    INCOMPATIBILITY.
3279  - Renamed conversions:
3280      multiset_of ~> mset
3281      multiset_of_set ~> mset_set
3282      set_of ~> set_mset
3283    INCOMPATIBILITY
3284  - Renamed lemmas:
3285      mset_le_def ~> subseteq_mset_def
3286      mset_less_def ~> subset_mset_def
3287      less_eq_multiset.rep_eq ~> subseteq_mset_def
3288    INCOMPATIBILITY
3289  - Removed lemmas generated by lift_definition:
3290    less_eq_multiset.abs_eq, less_eq_multiset.rsp,
3291    less_eq_multiset.transfer, less_eq_multiset_def
3292    INCOMPATIBILITY
3293
3294* Library/Omega_Words_Fun: Infinite words modeled as functions nat \<Rightarrow> 'a.
3295
3296* Library/Bourbaki_Witt_Fixpoint: Added formalisation of the
3297Bourbaki-Witt fixpoint theorem for increasing functions in
3298chain-complete partial orders.
3299
3300* Library/Old_Recdef: discontinued obsolete 'defer_recdef' command.
3301Minor INCOMPATIBILITY, use 'function' instead.
3302
3303* Library/Periodic_Fun: a locale that provides convenient lemmas for
3304periodic functions.
3305
3306* Library/Formal_Power_Series: proper definition of division (with
3307remainder) for formal power series; instances for Euclidean Ring and
3308GCD.
3309
3310* HOL-Imperative_HOL: obsolete theory Legacy_Mrec has been removed.
3311
3312* HOL-Statespace: command 'statespace' uses mandatory qualifier for
3313import of parent, as for general 'locale' expressions. INCOMPATIBILITY,
3314remove '!' and add '?' as required.
3315
3316* HOL-Decision_Procs: The "approximation" method works with "powr"
3317(exponentiation on real numbers) again.
3318
3319* HOL-Multivariate_Analysis: theory Cauchy_Integral_Thm with Contour
3320integrals (= complex path integrals), Cauchy's integral theorem, winding
3321numbers and Cauchy's integral formula, Liouville theorem, Fundamental
3322Theorem of Algebra. Ported from HOL Light.
3323
3324* HOL-Multivariate_Analysis: topological concepts such as connected
3325components, homotopic paths and the inside or outside of a set.
3326
3327* HOL-Multivariate_Analysis: radius of convergence of power series and
3328various summability tests; Harmonic numbers and the Euler���Mascheroni
3329constant; the Generalised Binomial Theorem; the complex and real
3330Gamma/log-Gamma/Digamma/ Polygamma functions and their most important
3331properties.
3332
3333* HOL-Probability: The central limit theorem based on Levy's uniqueness
3334and continuity theorems, weak convergence, and characterisitc functions.
3335
3336* HOL-Data_Structures: new and growing session of standard data
3337structures.
3338
3339
3340*** ML ***
3341
3342* The following combinators for low-level profiling of the ML runtime
3343system are available:
3344
3345  profile_time          (*CPU time*)
3346  profile_time_thread   (*CPU time on this thread*)
3347  profile_allocations   (*overall heap allocations*)
3348
3349* Antiquotation @{undefined} or \<^undefined> inlines (raise Match).
3350
3351* Antiquotation @{method NAME} inlines the (checked) name of the given
3352Isar proof method.
3353
3354* Pretty printing of Poly/ML compiler output in Isabelle has been
3355improved: proper treatment of break offsets and blocks with consistent
3356breaks.
3357
3358* The auxiliary module Pure/display.ML has been eliminated. Its
3359elementary thm print operations are now in Pure/more_thm.ML and thus
3360called Thm.pretty_thm, Thm.string_of_thm etc. INCOMPATIBILITY.
3361
3362* Simproc programming interfaces have been simplified:
3363Simplifier.make_simproc and Simplifier.define_simproc supersede various
3364forms of Simplifier.mk_simproc, Simplifier.simproc_global etc. Note that
3365term patterns for the left-hand sides are specified with implicitly
3366fixed variables, like top-level theorem statements. INCOMPATIBILITY.
3367
3368* Instantiation rules have been re-organized as follows:
3369
3370  Thm.instantiate  (*low-level instantiation with named arguments*)
3371  Thm.instantiate' (*version with positional arguments*)
3372
3373  Drule.infer_instantiate  (*instantiation with type inference*)
3374  Drule.infer_instantiate'  (*version with positional arguments*)
3375
3376The LHS only requires variable specifications, instead of full terms.
3377Old cterm_instantiate is superseded by infer_instantiate.
3378INCOMPATIBILITY, need to re-adjust some ML names and types accordingly.
3379
3380* Old tactic shorthands atac, rtac, etac, dtac, ftac have been
3381discontinued. INCOMPATIBILITY, use regular assume_tac, resolve_tac etc.
3382instead (with proper context).
3383
3384* Thm.instantiate (and derivatives) no longer require the LHS of the
3385instantiation to be certified: plain variables are given directly.
3386
3387* Subgoal.SUBPROOF and Subgoal.FOCUS combinators use anonymous
3388quasi-bound variables (like the Simplifier), instead of accidentally
3389named local fixes. This has the potential to improve stability of proof
3390tools, but can also cause INCOMPATIBILITY for tools that don't observe
3391the proof context discipline.
3392
3393* Isar proof methods are based on a slightly more general type
3394context_tactic, which allows to change the proof context dynamically
3395(e.g. to update cases) and indicate explicit Seq.Error results. Former
3396METHOD_CASES is superseded by CONTEXT_METHOD; further combinators are
3397provided in src/Pure/Isar/method.ML for convenience. INCOMPATIBILITY.
3398
3399
3400*** System ***
3401
3402* Command-line tool "isabelle console" enables print mode "ASCII".
3403
3404* Command-line tool "isabelle update_then" expands old Isar command
3405conflations:
3406
3407    hence  ~>  then have
3408    thus   ~>  then show
3409
3410This syntax is more orthogonal and improves readability and
3411maintainability of proofs.
3412
3413* Global session timeout is multiplied by timeout_scale factor. This
3414allows to adjust large-scale tests (e.g. AFP) to overall hardware
3415performance.
3416
3417* Property values in etc/symbols may contain spaces, if written with the
3418replacement character "���" (Unicode point 0x2324). For example:
3419
3420    \<star>  code: 0x0022c6  group: operator  font: Deja���Vu���Sans���Mono
3421
3422* Java runtime environment for x86_64-windows allows to use larger heap
3423space.
3424
3425* Java runtime options are determined separately for 32bit vs. 64bit
3426platforms as follows.
3427
3428  - Isabelle desktop application: platform-specific files that are
3429    associated with the main app bundle
3430
3431  - isabelle jedit: settings
3432    JEDIT_JAVA_SYSTEM_OPTIONS
3433    JEDIT_JAVA_OPTIONS32 vs. JEDIT_JAVA_OPTIONS64
3434
3435  - isabelle build: settings
3436    ISABELLE_BUILD_JAVA_OPTIONS32 vs. ISABELLE_BUILD_JAVA_OPTIONS64
3437
3438* Bash shell function "jvmpath" has been renamed to "platform_path": it
3439is relevant both for Poly/ML and JVM processes.
3440
3441* Poly/ML default platform architecture may be changed from 32bit to
344264bit via system option ML_system_64. A system restart (and rebuild) is
3443required after change.
3444
3445* Poly/ML 5.6 runs natively on x86-windows and x86_64-windows, which
3446both allow larger heap space than former x86-cygwin.
3447
3448* Heap images are 10-15% smaller due to less wasteful persistent theory
3449content (using ML type theory_id instead of theory);
3450
3451
3452
3453New in Isabelle2015 (May 2015)
3454------------------------------
3455
3456*** General ***
3457
3458* Local theory specification commands may have a 'private' or
3459'qualified' modifier to restrict name space accesses to the local scope,
3460as provided by some "context begin ... end" block. For example:
3461
3462  context
3463  begin
3464
3465  private definition ...
3466  private lemma ...
3467
3468  qualified definition ...
3469  qualified lemma ...
3470
3471  lemma ...
3472  theorem ...
3473
3474  end
3475
3476* Command 'experiment' opens an anonymous locale context with private
3477naming policy.
3478
3479* Command 'notepad' requires proper nesting of begin/end and its proof
3480structure in the body: 'oops' is no longer supported here. Minor
3481INCOMPATIBILITY, use 'sorry' instead.
3482
3483* Command 'named_theorems' declares a dynamic fact within the context,
3484together with an attribute to maintain the content incrementally. This
3485supersedes functor Named_Thms in Isabelle/ML, but with a subtle change
3486of semantics due to external visual order vs. internal reverse order.
3487
3488* 'find_theorems': search patterns which are abstractions are
3489schematically expanded before search. Search results match the naive
3490expectation more closely, particularly wrt. abbreviations.
3491INCOMPATIBILITY.
3492
3493* Commands 'method_setup' and 'attribute_setup' now work within a local
3494theory context.
3495
3496* Outer syntax commands are managed authentically within the theory
3497context, without implicit global state. Potential for accidental
3498INCOMPATIBILITY, make sure that required theories are really imported.
3499
3500* Historical command-line terminator ";" is no longer accepted (and
3501already used differently in Isar). Minor INCOMPATIBILITY, use "isabelle
3502update_semicolons" to remove obsolete semicolons from old theory
3503sources.
3504
3505* Structural composition of proof methods (meth1; meth2) in Isar
3506corresponds to (tac1 THEN_ALL_NEW tac2) in ML.
3507
3508* The Eisbach proof method language allows to define new proof methods
3509by combining existing ones with their usual syntax. The "match" proof
3510method provides basic fact/term matching in addition to
3511premise/conclusion matching through Subgoal.focus, and binds fact names
3512from matches as well as term patterns within matches. The Isabelle
3513documentation provides an entry "eisbach" for the Eisbach User Manual.
3514Sources and various examples are in ~~/src/HOL/Eisbach/.
3515
3516
3517*** Prover IDE -- Isabelle/Scala/jEdit ***
3518
3519* Improved folding mode "isabelle" based on Isar syntax. Alternatively,
3520the "sidekick" mode may be used for document structure.
3521
3522* Extended bracket matching based on Isar language structure. System
3523option jedit_structure_limit determines maximum number of lines to scan
3524in the buffer.
3525
3526* Support for BibTeX files: context menu, context-sensitive token
3527marker, SideKick parser.
3528
3529* Document antiquotation @{cite} provides formal markup, which is
3530interpreted semi-formally based on .bib files that happen to be open in
3531the editor (hyperlinks, completion etc.).
3532
3533* Less waste of vertical space via negative line spacing (see Global
3534Options / Text Area).
3535
3536* Improved graphview panel with optional output of PNG or PDF, for
3537display of 'thy_deps', 'class_deps' etc.
3538
3539* The commands 'thy_deps' and 'class_deps' allow optional bounds to
3540restrict the visualized hierarchy.
3541
3542* Improved scheduling for asynchronous print commands (e.g. provers
3543managed by the Sledgehammer panel) wrt. ongoing document processing.
3544
3545
3546*** Document preparation ***
3547
3548* Document markup commands 'chapter', 'section', 'subsection',
3549'subsubsection', 'text', 'txt', 'text_raw' work uniformly in any
3550context, even before the initial 'theory' command. Obsolete proof
3551commands 'sect', 'subsect', 'subsubsect', 'txt_raw' have been
3552discontinued, use 'section', 'subsection', 'subsubsection', 'text_raw'
3553instead. The old 'header' command is still retained for some time, but
3554should be replaced by 'chapter', 'section' etc. (using "isabelle
3555update_header"). Minor INCOMPATIBILITY.
3556
3557* Official support for "tt" style variants, via \isatt{...} or
3558\begin{isabellett}...\end{isabellett}. The somewhat fragile \verb or
3559verbatim environment of LaTeX is no longer used. This allows @{ML} etc.
3560as argument to other macros (such as footnotes).
3561
3562* Document antiquotation @{verbatim} prints ASCII text literally in "tt"
3563style.
3564
3565* Discontinued obsolete option "document_graph": session_graph.pdf is
3566produced unconditionally for HTML browser_info and PDF-LaTeX document.
3567
3568* Diagnostic commands and document markup commands within a proof do not
3569affect the command tag for output. Thus commands like 'thm' are subject
3570to proof document structure, and no longer "stick out" accidentally.
3571Commands 'text' and 'txt' merely differ in the LaTeX style, not their
3572tags. Potential INCOMPATIBILITY in exotic situations.
3573
3574* System option "pretty_margin" is superseded by "thy_output_margin",
3575which is also accessible via document antiquotation option "margin".
3576Only the margin for document output may be changed, but not the global
3577pretty printing: that is 76 for plain console output, and adapted
3578dynamically in GUI front-ends. Implementations of document
3579antiquotations need to observe the margin explicitly according to
3580Thy_Output.string_of_margin. Minor INCOMPATIBILITY.
3581
3582* Specification of 'document_files' in the session ROOT file is
3583mandatory for document preparation. The legacy mode with implicit
3584copying of the document/ directory is no longer supported. Minor
3585INCOMPATIBILITY.
3586
3587
3588*** Pure ***
3589
3590* Proof methods with explicit instantiation ("rule_tac", "subgoal_tac"
3591etc.) allow an optional context of local variables ('for' declaration):
3592these variables become schematic in the instantiated theorem; this
3593behaviour is analogous to 'for' in attributes "where" and "of".
3594Configuration option rule_insts_schematic (default false) controls use
3595of schematic variables outside the context. Minor INCOMPATIBILITY,
3596declare rule_insts_schematic = true temporarily and update to use local
3597variable declarations or dummy patterns instead.
3598
3599* Explicit instantiation via attributes "where", "of", and proof methods
3600"rule_tac" with derivatives like "subgoal_tac" etc. admit dummy patterns
3601("_") that stand for anonymous local variables.
3602
3603* Generated schematic variables in standard format of exported facts are
3604incremented to avoid material in the proof context. Rare
3605INCOMPATIBILITY, explicit instantiation sometimes needs to refer to
3606different index.
3607
3608* Lexical separation of signed and unsigned numerals: categories "num"
3609and "float" are unsigned. INCOMPATIBILITY: subtle change in precedence
3610of numeral signs, particularly in expressions involving infix syntax
3611like "(- 1) ^ n".
3612
3613* Old inner token category "xnum" has been discontinued.  Potential
3614INCOMPATIBILITY for exotic syntax: may use mixfix grammar with "num"
3615token category instead.
3616
3617
3618*** HOL ***
3619
3620* New (co)datatype package:
3621  - The 'datatype_new' command has been renamed 'datatype'. The old
3622    command of that name is now called 'old_datatype' and is provided
3623    by "~~/src/HOL/Library/Old_Datatype.thy". See
3624    'isabelle doc datatypes' for information on porting.
3625    INCOMPATIBILITY.
3626  - Renamed theorems:
3627      disc_corec ~> corec_disc
3628      disc_corec_iff ~> corec_disc_iff
3629      disc_exclude ~> distinct_disc
3630      disc_exhaust ~> exhaust_disc
3631      disc_map_iff ~> map_disc_iff
3632      sel_corec ~> corec_sel
3633      sel_exhaust ~> exhaust_sel
3634      sel_map ~> map_sel
3635      sel_set ~> set_sel
3636      sel_split ~> split_sel
3637      sel_split_asm ~> split_sel_asm
3638      strong_coinduct ~> coinduct_strong
3639      weak_case_cong ~> case_cong_weak
3640    INCOMPATIBILITY.
3641  - The "no_code" option to "free_constructors", "datatype_new", and
3642    "codatatype" has been renamed "plugins del: code".
3643    INCOMPATIBILITY.
3644  - The rules "set_empty" have been removed. They are easy
3645    consequences of other set rules "by auto".
3646    INCOMPATIBILITY.
3647  - The rule "set_cases" is now registered with the "[cases set]"
3648    attribute. This can influence the behavior of the "cases" proof
3649    method when more than one case rule is applicable (e.g., an
3650    assumption is of the form "w : set ws" and the method "cases w"
3651    is invoked). The solution is to specify the case rule explicitly
3652    (e.g. "cases w rule: widget.exhaust").
3653    INCOMPATIBILITY.
3654  - Renamed theories:
3655      BNF_Comp ~> BNF_Composition
3656      BNF_FP_Base ~> BNF_Fixpoint_Base
3657      BNF_GFP ~> BNF_Greatest_Fixpoint
3658      BNF_LFP ~> BNF_Least_Fixpoint
3659      BNF_Constructions_on_Wellorders ~> BNF_Wellorder_Constructions
3660      Cardinals/Constructions_on_Wellorders ~> Cardinals/Wellorder_Constructions
3661    INCOMPATIBILITY.
3662  - Lifting and Transfer setup for basic HOL types sum and prod (also
3663    option) is now performed by the BNF package. Theories Lifting_Sum,
3664    Lifting_Product and Lifting_Option from Main became obsolete and
3665    were removed. Changed definitions of the relators rel_prod and
3666    rel_sum (using inductive).
3667    INCOMPATIBILITY: use rel_prod.simps and rel_sum.simps instead
3668    of rel_prod_def and rel_sum_def.
3669    Minor INCOMPATIBILITY: (rarely used by name) transfer theorem names
3670    changed (e.g. map_prod_transfer ~> prod.map_transfer).
3671  - Parametricity theorems for map functions, relators, set functions,
3672    constructors, case combinators, discriminators, selectors and
3673    (co)recursors are automatically proved and registered as transfer
3674    rules.
3675
3676* Old datatype package:
3677  - The old 'datatype' command has been renamed 'old_datatype', and
3678    'rep_datatype' has been renamed 'old_rep_datatype'. They are
3679    provided by "~~/src/HOL/Library/Old_Datatype.thy". See
3680    'isabelle doc datatypes' for information on porting.
3681    INCOMPATIBILITY.
3682  - Renamed theorems:
3683      weak_case_cong ~> case_cong_weak
3684    INCOMPATIBILITY.
3685  - Renamed theory:
3686      ~~/src/HOL/Datatype.thy ~> ~~/src/HOL/Library/Old_Datatype.thy
3687    INCOMPATIBILITY.
3688
3689* Nitpick:
3690  - Fixed soundness bug related to the strict and non-strict subset
3691    operations.
3692
3693* Sledgehammer:
3694  - CVC4 is now included with Isabelle instead of CVC3 and run by
3695    default.
3696  - Z3 is now always enabled by default, now that it is fully open
3697    source. The "z3_non_commercial" option is discontinued.
3698  - Minimization is now always enabled by default.
3699    Removed sub-command:
3700      min
3701  - Proof reconstruction, both one-liners and Isar, has been
3702    dramatically improved.
3703  - Improved support for CVC4 and veriT.
3704
3705* Old and new SMT modules:
3706  - The old 'smt' method has been renamed 'old_smt' and moved to
3707    'src/HOL/Library/Old_SMT.thy'. It is provided for compatibility,
3708    until applications have been ported to use the new 'smt' method. For
3709    the method to work, an older version of Z3 (e.g. Z3 3.2 or 4.0) must
3710    be installed, and the environment variable "OLD_Z3_SOLVER" must
3711    point to it.
3712    INCOMPATIBILITY.
3713  - The 'smt2' method has been renamed 'smt'.
3714    INCOMPATIBILITY.
3715  - New option 'smt_reconstruction_step_timeout' to limit the
3716    reconstruction time of Z3 proof steps in the new 'smt' method.
3717  - New option 'smt_statistics' to display statistics of the new 'smt'
3718    method, especially runtime statistics of Z3 proof reconstruction.
3719
3720* Lifting: command 'lift_definition' allows to execute lifted constants
3721that have as a return type a datatype containing a subtype. This
3722overcomes long-time limitations in the area of code generation and
3723lifting, and avoids tedious workarounds.
3724
3725* Command and antiquotation "value" provide different evaluation slots
3726(again), where the previous strategy (NBE after ML) serves as default.
3727Minor INCOMPATIBILITY.
3728
3729* Add NO_MATCH-simproc, allows to check for syntactic non-equality.
3730
3731* field_simps: Use NO_MATCH-simproc for distribution rules, to avoid
3732non-termination in case of distributing a division. With this change
3733field_simps is in some cases slightly less powerful, if it fails try to
3734add algebra_simps, or use divide_simps. Minor INCOMPATIBILITY.
3735
3736* Separate class no_zero_divisors has been given up in favour of fully
3737algebraic semiring_no_zero_divisors. INCOMPATIBILITY.
3738
3739* Class linordered_semidom really requires no zero divisors.
3740INCOMPATIBILITY.
3741
3742* Classes division_ring, field and linordered_field always demand
3743"inverse 0 = 0". Given up separate classes division_ring_inverse_zero,
3744field_inverse_zero and linordered_field_inverse_zero. INCOMPATIBILITY.
3745
3746* Classes cancel_ab_semigroup_add / cancel_monoid_add specify explicit
3747additive inverse operation. INCOMPATIBILITY.
3748
3749* Complex powers and square roots. The functions "ln" and "powr" are now
3750overloaded for types real and complex, and 0 powr y = 0 by definition.
3751INCOMPATIBILITY: type constraints may be necessary.
3752
3753* The functions "sin" and "cos" are now defined for any type of sort
3754"{real_normed_algebra_1,banach}" type, so in particular on "real" and
3755"complex" uniformly. Minor INCOMPATIBILITY: type constraints may be
3756needed.
3757
3758* New library of properties of the complex transcendental functions sin,
3759cos, tan, exp, Ln, Arctan, Arcsin, Arccos. Ported from HOL Light.
3760
3761* The factorial function, "fact", now has type "nat => 'a" (of a sort
3762that admits numeric types including nat, int, real and complex.
3763INCOMPATIBILITY: an expression such as "fact 3 = 6" may require a type
3764constraint, and the combination "real (fact k)" is likely to be
3765unsatisfactory. If a type conversion is still necessary, then use
3766"of_nat (fact k)" or "real_of_nat (fact k)".
3767
3768* Removed functions "natfloor" and "natceiling", use "nat o floor" and
3769"nat o ceiling" instead. A few of the lemmas have been retained and
3770adapted: in their names "natfloor"/"natceiling" has been replaced by
3771"nat_floor"/"nat_ceiling".
3772
3773* Qualified some duplicated fact names required for boostrapping the
3774type class hierarchy:
3775  ab_add_uminus_conv_diff ~> diff_conv_add_uminus
3776  field_inverse_zero ~> inverse_zero
3777  field_divide_inverse ~> divide_inverse
3778  field_inverse ~> left_inverse
3779Minor INCOMPATIBILITY.
3780
3781* Eliminated fact duplicates:
3782  mult_less_imp_less_right ~> mult_right_less_imp_less
3783  mult_less_imp_less_left ~> mult_left_less_imp_less
3784Minor INCOMPATIBILITY.
3785
3786* Fact consolidation: even_less_0_iff is subsumed by
3787double_add_less_zero_iff_single_add_less_zero (simp by default anyway).
3788
3789* Generalized and consolidated some theorems concerning divsibility:
3790  dvd_reduce ~> dvd_add_triv_right_iff
3791  dvd_plus_eq_right ~> dvd_add_right_iff
3792  dvd_plus_eq_left ~> dvd_add_left_iff
3793Minor INCOMPATIBILITY.
3794
3795* "even" and "odd" are mere abbreviations for "2 dvd _" and "~ 2 dvd _"
3796and part of theory Main.
3797  even_def ~> even_iff_mod_2_eq_zero
3798INCOMPATIBILITY.
3799
3800* Lemma name consolidation: divide_Numeral1 ~> divide_numeral_1. Minor
3801INCOMPATIBILITY.
3802
3803* Bootstrap of listsum as special case of abstract product over lists.
3804Fact rename:
3805    listsum_def ~> listsum.eq_foldr
3806INCOMPATIBILITY.
3807
3808* Product over lists via constant "listprod".
3809
3810* Theory List: renamed drop_Suc_conv_tl and nth_drop' to
3811Cons_nth_drop_Suc.
3812
3813* New infrastructure for compiling, running, evaluating and testing
3814generated code in target languages in HOL/Library/Code_Test. See
3815HOL/Codegenerator_Test/Code_Test* for examples.
3816
3817* Library/Multiset:
3818  - Introduced "replicate_mset" operation.
3819  - Introduced alternative characterizations of the multiset ordering in
3820    "Library/Multiset_Order".
3821  - Renamed multiset ordering:
3822      <# ~> #<#
3823      <=# ~> #<=#
3824      \<subset># ~> #\<subset>#
3825      \<subseteq># ~> #\<subseteq>#
3826    INCOMPATIBILITY.
3827  - Introduced abbreviations for ill-named multiset operations:
3828      <#, \<subset># abbreviate < (strict subset)
3829      <=#, \<le>#, \<subseteq># abbreviate <= (subset or equal)
3830    INCOMPATIBILITY.
3831  - Renamed
3832      in_multiset_of ~> in_multiset_in_set
3833      Multiset.fold ~> fold_mset
3834      Multiset.filter ~> filter_mset
3835    INCOMPATIBILITY.
3836  - Removed mcard, is equal to size.
3837  - Added attributes:
3838      image_mset.id [simp]
3839      image_mset_id [simp]
3840      elem_multiset_of_set [simp, intro]
3841      comp_fun_commute_plus_mset [simp]
3842      comp_fun_commute.fold_mset_insert [OF comp_fun_commute_plus_mset, simp]
3843      in_mset_fold_plus_iff [iff]
3844      set_of_Union_mset [simp]
3845      in_Union_mset_iff [iff]
3846    INCOMPATIBILITY.
3847
3848* Library/Sum_of_Squares: simplified and improved "sos" method. Always
3849use local CSDP executable, which is much faster than the NEOS server.
3850The "sos_cert" functionality is invoked as "sos" with additional
3851argument. Minor INCOMPATIBILITY.
3852
3853* HOL-Decision_Procs: New counterexample generator quickcheck
3854[approximation] for inequalities of transcendental functions. Uses
3855hardware floating point arithmetic to randomly discover potential
3856counterexamples. Counterexamples are certified with the "approximation"
3857method. See HOL/Decision_Procs/ex/Approximation_Quickcheck_Ex.thy for
3858examples.
3859
3860* HOL-Probability: Reworked measurability prover
3861  - applies destructor rules repeatedly
3862  - removed application splitting (replaced by destructor rule)
3863  - added congruence rules to rewrite measure spaces under the sets
3864    projection
3865
3866* New proof method "rewrite" (in theory ~~/src/HOL/Library/Rewrite) for
3867single-step rewriting with subterm selection based on patterns.
3868
3869
3870*** ML ***
3871
3872* Subtle change of name space policy: undeclared entries are now
3873considered inaccessible, instead of accessible via the fully-qualified
3874internal name. This mainly affects Name_Space.intern (and derivatives),
3875which may produce an unexpected Long_Name.hidden prefix. Note that
3876contemporary applications use the strict Name_Space.check (and
3877derivatives) instead, which is not affected by the change. Potential
3878INCOMPATIBILITY in rare applications of Name_Space.intern.
3879
3880* Subtle change of error semantics of Toplevel.proof_of: regular user
3881ERROR instead of internal Toplevel.UNDEF.
3882
3883* Basic combinators map, fold, fold_map, split_list, apply are available
3884as parameterized antiquotations, e.g. @{map 4} for lists of quadruples.
3885
3886* Renamed "pairself" to "apply2", in accordance to @{apply 2}.
3887INCOMPATIBILITY.
3888
3889* Former combinators NAMED_CRITICAL and CRITICAL for central critical
3890sections have been discontinued, in favour of the more elementary
3891Multithreading.synchronized and its high-level derivative
3892Synchronized.var (which is usually sufficient in applications). Subtle
3893INCOMPATIBILITY: synchronized access needs to be atomic and cannot be
3894nested.
3895
3896* Synchronized.value (ML) is actually synchronized (as in Scala): subtle
3897change of semantics with minimal potential for INCOMPATIBILITY.
3898
3899* The main operations to certify logical entities are Thm.ctyp_of and
3900Thm.cterm_of with a local context; old-style global theory variants are
3901available as Thm.global_ctyp_of and Thm.global_cterm_of.
3902INCOMPATIBILITY.
3903
3904* Elementary operations in module Thm are no longer pervasive.
3905INCOMPATIBILITY, need to use qualified Thm.prop_of, Thm.cterm_of,
3906Thm.term_of etc.
3907
3908* Proper context for various elementary tactics: assume_tac,
3909resolve_tac, eresolve_tac, dresolve_tac, forward_tac, match_tac,
3910compose_tac, Splitter.split_tac etc. INCOMPATIBILITY.
3911
3912* Tactical PARALLEL_ALLGOALS is the most common way to refer to
3913PARALLEL_GOALS.
3914
3915* Goal.prove_multi is superseded by the fully general Goal.prove_common,
3916which also allows to specify a fork priority.
3917
3918* Antiquotation @{command_spec "COMMAND"} is superseded by
3919@{command_keyword COMMAND} (usually without quotes and with PIDE
3920markup). Minor INCOMPATIBILITY.
3921
3922* Cartouches within ML sources are turned into values of type
3923Input.source (with formal position information).
3924
3925
3926*** System ***
3927
3928* The Isabelle tool "update_cartouches" changes theory files to use
3929cartouches instead of old-style {* verbatim *} or `alt_string` tokens.
3930
3931* The Isabelle tool "build" provides new options -X, -k, -x.
3932
3933* Discontinued old-fashioned "codegen" tool. Code generation can always
3934be externally triggered using an appropriate ROOT file plus a
3935corresponding theory. Parametrization is possible using environment
3936variables, or ML snippets in the most extreme cases. Minor
3937INCOMPATIBILITY.
3938
3939* JVM system property "isabelle.threads" determines size of Scala thread
3940pool, like Isabelle system option "threads" for ML.
3941
3942* JVM system property "isabelle.laf" determines the default Swing
3943look-and-feel, via internal class name or symbolic name as in the jEdit
3944menu Global Options / Appearance.
3945
3946* Support for Proof General and Isar TTY loop has been discontinued.
3947Minor INCOMPATIBILITY, use standard PIDE infrastructure instead.
3948
3949
3950
3951New in Isabelle2014 (August 2014)
3952---------------------------------
3953
3954*** General ***
3955
3956* Support for official Standard ML within the Isabelle context.
3957Command 'SML_file' reads and evaluates the given Standard ML file.
3958Toplevel bindings are stored within the theory context; the initial
3959environment is restricted to the Standard ML implementation of
3960Poly/ML, without the add-ons of Isabelle/ML.  Commands 'SML_import'
3961and 'SML_export' allow to exchange toplevel bindings between the two
3962separate environments.  See also ~~/src/Tools/SML/Examples.thy for
3963some examples.
3964
3965* Standard tactics and proof methods such as "clarsimp", "auto" and
3966"safe" now preserve equality hypotheses "x = expr" where x is a free
3967variable.  Locale assumptions and chained facts containing "x"
3968continue to be useful.  The new method "hypsubst_thin" and the
3969configuration option "hypsubst_thin" (within the attribute name space)
3970restore the previous behavior.  INCOMPATIBILITY, especially where
3971induction is done after these methods or when the names of free and
3972bound variables clash.  As first approximation, old proofs may be
3973repaired by "using [[hypsubst_thin = true]]" in the critical spot.
3974
3975* More static checking of proof methods, which allows the system to
3976form a closure over the concrete syntax.  Method arguments should be
3977processed in the original proof context as far as possible, before
3978operating on the goal state.  In any case, the standard discipline for
3979subgoal-addressing needs to be observed: no subgoals or a subgoal
3980number that is out of range produces an empty result sequence, not an
3981exception.  Potential INCOMPATIBILITY for non-conformant tactical
3982proof tools.
3983
3984* Lexical syntax (inner and outer) supports text cartouches with
3985arbitrary nesting, and without escapes of quotes etc.  The Prover IDE
3986supports input via ` (backquote).
3987
3988* The outer syntax categories "text" (for formal comments and document
3989markup commands) and "altstring" (for literal fact references) allow
3990cartouches as well, in addition to the traditional mix of quotations.
3991
3992* Syntax of document antiquotation @{rail} now uses \<newline> instead
3993of "\\", to avoid the optical illusion of escaped backslash within
3994string token.  General renovation of its syntax using text cartouches.
3995Minor INCOMPATIBILITY.
3996
3997* Discontinued legacy_isub_isup, which was a temporary workaround for
3998Isabelle/ML in Isabelle2013-1.  The prover process no longer accepts
3999old identifier syntax with \<^isub> or \<^isup>.  Potential
4000INCOMPATIBILITY.
4001
4002* Document antiquotation @{url} produces markup for the given URL,
4003which results in an active hyperlink within the text.
4004
4005* Document antiquotation @{file_unchecked} is like @{file}, but does
4006not check existence within the file-system.
4007
4008* Updated and extended manuals: codegen, datatypes, implementation,
4009isar-ref, jedit, system.
4010
4011
4012*** Prover IDE -- Isabelle/Scala/jEdit ***
4013
4014* Improved Document panel: simplified interaction where every single
4015mouse click (re)opens document via desktop environment or as jEdit
4016buffer.
4017
4018* Support for Navigator plugin (with toolbar buttons), with connection
4019to PIDE hyperlinks.
4020
4021* Auxiliary files ('ML_file' etc.) are managed by the Prover IDE.
4022Open text buffers take precedence over copies within the file-system.
4023
4024* Improved support for Isabelle/ML, with jEdit mode "isabelle-ml" for
4025auxiliary ML files.
4026
4027* Improved syntactic and semantic completion mechanism, with simple
4028templates, completion language context, name-space completion,
4029file-name completion, spell-checker completion.
4030
4031* Refined GUI popup for completion: more robust key/mouse event
4032handling and propagation to enclosing text area -- avoid loosing
4033keystrokes with slow / remote graphics displays.
4034
4035* Completion popup supports both ENTER and TAB (default) to select an
4036item, depending on Isabelle options.
4037
4038* Refined insertion of completion items wrt. jEdit text: multiple
4039selections, rectangular selections, rectangular selection as "tall
4040caret".
4041
4042* Integrated spell-checker for document text, comments etc. with
4043completion popup and context-menu.
4044
4045* More general "Query" panel supersedes "Find" panel, with GUI access
4046to commands 'find_theorems' and 'find_consts', as well as print
4047operations for the context.  Minor incompatibility in keyboard
4048shortcuts etc.: replace action isabelle-find by isabelle-query.
4049
4050* Search field for all output panels ("Output", "Query", "Info" etc.)
4051to highlight text via regular expression.
4052
4053* Option "jedit_print_mode" (see also "Plugin Options / Isabelle /
4054General") allows to specify additional print modes for the prover
4055process, without requiring old-fashioned command-line invocation of
4056"isabelle jedit -m MODE".
4057
4058* More support for remote files (e.g. http) using standard Java
4059networking operations instead of jEdit virtual file-systems.
4060
4061* Empty editors buffers that are no longer required (e.g.\ via theory
4062imports) are automatically removed from the document model.
4063
4064* Improved monitor panel.
4065
4066* Improved Console/Scala plugin: more uniform scala.Console output,
4067more robust treatment of threads and interrupts.
4068
4069* Improved management of dockable windows: clarified keyboard focus
4070and window placement wrt. main editor view; optional menu item to
4071"Detach" a copy where this makes sense.
4072
4073* New Simplifier Trace panel provides an interactive view of the
4074simplification process, enabled by the "simp_trace_new" attribute
4075within the context.
4076
4077
4078*** Pure ***
4079
4080* Low-level type-class commands 'classes', 'classrel', 'arities' have
4081been discontinued to avoid the danger of non-trivial axiomatization
4082that is not immediately visible.  INCOMPATIBILITY, use regular
4083'instance' command with proof.  The required OFCLASS(...) theorem
4084might be postulated via 'axiomatization' beforehand, or the proof
4085finished trivially if the underlying class definition is made vacuous
4086(without any assumptions).  See also Isabelle/ML operations
4087Axclass.class_axiomatization, Axclass.classrel_axiomatization,
4088Axclass.arity_axiomatization.
4089
4090* Basic constants of Pure use more conventional names and are always
4091qualified.  Rare INCOMPATIBILITY, but with potentially serious
4092consequences, notably for tools in Isabelle/ML.  The following
4093renaming needs to be applied:
4094
4095  ==             ~>  Pure.eq
4096  ==>            ~>  Pure.imp
4097  all            ~>  Pure.all
4098  TYPE           ~>  Pure.type
4099  dummy_pattern  ~>  Pure.dummy_pattern
4100
4101Systematic porting works by using the following theory setup on a
4102*previous* Isabelle version to introduce the new name accesses for the
4103old constants:
4104
4105setup {*
4106  fn thy => thy
4107    |> Sign.root_path
4108    |> Sign.const_alias (Binding.qualify true "Pure" @{binding eq}) "=="
4109    |> Sign.const_alias (Binding.qualify true "Pure" @{binding imp}) "==>"
4110    |> Sign.const_alias (Binding.qualify true "Pure" @{binding all}) "all"
4111    |> Sign.restore_naming thy
4112*}
4113
4114Thus ML antiquotations like @{const_name Pure.eq} may be used already.
4115Later the application is moved to the current Isabelle version, and
4116the auxiliary aliases are deleted.
4117
4118* Attributes "where" and "of" allow an optional context of local
4119variables ('for' declaration): these variables become schematic in the
4120instantiated theorem.
4121
4122* Obsolete attribute "standard" has been discontinued (legacy since
4123Isabelle2012).  Potential INCOMPATIBILITY, use explicit 'for' context
4124where instantiations with schematic variables are intended (for
4125declaration commands like 'lemmas' or attributes like "of").  The
4126following temporary definition may help to port old applications:
4127
4128  attribute_setup standard =
4129    "Scan.succeed (Thm.rule_attribute (K Drule.export_without_context))"
4130
4131* More thorough check of proof context for goal statements and
4132attributed fact expressions (concerning background theory, declared
4133hyps).  Potential INCOMPATIBILITY, tools need to observe standard
4134context discipline.  See also Assumption.add_assumes and the more
4135primitive Thm.assume_hyps.
4136
4137* Inner syntax token language allows regular quoted strings "..."
4138(only makes sense in practice, if outer syntax is delimited
4139differently, e.g. via cartouches).
4140
4141* Command 'print_term_bindings' supersedes 'print_binds' for clarity,
4142but the latter is retained some time as Proof General legacy.
4143
4144* Code generator preprocessor: explicit control of simp tracing on a
4145per-constant basis.  See attribute "code_preproc".
4146
4147
4148*** HOL ***
4149
4150* Code generator: enforce case of identifiers only for strict target
4151language requirements.  INCOMPATIBILITY.
4152
4153* Code generator: explicit proof contexts in many ML interfaces.
4154INCOMPATIBILITY.
4155
4156* Code generator: minimize exported identifiers by default.  Minor
4157INCOMPATIBILITY.
4158
4159* Code generation for SML and OCaml: dropped arcane "no_signatures"
4160option.  Minor INCOMPATIBILITY.
4161
4162* "declare [[code abort: ...]]" replaces "code_abort ...".
4163INCOMPATIBILITY.
4164
4165* "declare [[code drop: ...]]" drops all code equations associated
4166with the given constants.
4167
4168* Code generations are provided for make, fields, extend and truncate
4169operations on records.
4170
4171* Command and antiquotation "value" are now hardcoded against nbe and
4172ML.  Minor INCOMPATIBILITY.
4173
4174* Renamed command 'enriched_type' to 'functor'. INCOMPATIBILITY.
4175
4176* The symbol "\<newline>" may be used within char or string literals
4177to represent (Char Nibble0 NibbleA), i.e. ASCII newline.
4178
4179* Qualified String.implode and String.explode.  INCOMPATIBILITY.
4180
4181* Simplifier: Enhanced solver of preconditions of rewrite rules can
4182now deal with conjunctions.  For help with converting proofs, the old
4183behaviour of the simplifier can be restored like this: declare/using
4184[[simp_legacy_precond]].  This configuration option will disappear
4185again in the future.  INCOMPATIBILITY.
4186
4187* Simproc "finite_Collect" is no longer enabled by default, due to
4188spurious crashes and other surprises.  Potential INCOMPATIBILITY.
4189
4190* Moved new (co)datatype package and its dependencies from session
4191  "HOL-BNF" to "HOL".  The commands 'bnf', 'wrap_free_constructors',
4192  'datatype_new', 'codatatype', 'primcorec', 'primcorecursive' are now
4193  part of theory "Main".
4194
4195  Theory renamings:
4196    FunDef.thy ~> Fun_Def.thy (and Fun_Def_Base.thy)
4197    Library/Wfrec.thy ~> Wfrec.thy
4198    Library/Zorn.thy ~> Zorn.thy
4199    Cardinals/Order_Relation.thy ~> Order_Relation.thy
4200    Library/Order_Union.thy ~> Cardinals/Order_Union.thy
4201    Cardinals/Cardinal_Arithmetic_Base.thy ~> BNF_Cardinal_Arithmetic.thy
4202    Cardinals/Cardinal_Order_Relation_Base.thy ~> BNF_Cardinal_Order_Relation.thy
4203    Cardinals/Constructions_on_Wellorders_Base.thy ~> BNF_Constructions_on_Wellorders.thy
4204    Cardinals/Wellorder_Embedding_Base.thy ~> BNF_Wellorder_Embedding.thy
4205    Cardinals/Wellorder_Relation_Base.thy ~> BNF_Wellorder_Relation.thy
4206    BNF/Ctr_Sugar.thy ~> Ctr_Sugar.thy
4207    BNF/Basic_BNFs.thy ~> Basic_BNFs.thy
4208    BNF/BNF_Comp.thy ~> BNF_Comp.thy
4209    BNF/BNF_Def.thy ~> BNF_Def.thy
4210    BNF/BNF_FP_Base.thy ~> BNF_FP_Base.thy
4211    BNF/BNF_GFP.thy ~> BNF_GFP.thy
4212    BNF/BNF_LFP.thy ~> BNF_LFP.thy
4213    BNF/BNF_Util.thy ~> BNF_Util.thy
4214    BNF/Coinduction.thy ~> Coinduction.thy
4215    BNF/More_BNFs.thy ~> Library/More_BNFs.thy
4216    BNF/Countable_Type.thy ~> Library/Countable_Set_Type.thy
4217    BNF/Examples/* ~> BNF_Examples/*
4218
4219  New theories:
4220    Wellorder_Extension.thy (split from Zorn.thy)
4221    Library/Cardinal_Notations.thy
4222    Library/BNF_Axomatization.thy
4223    BNF_Examples/Misc_Primcorec.thy
4224    BNF_Examples/Stream_Processor.thy
4225
4226  Discontinued theories:
4227    BNF/BNF.thy
4228    BNF/Equiv_Relations_More.thy
4229
4230INCOMPATIBILITY.
4231
4232* New (co)datatype package:
4233  - Command 'primcorec' is fully implemented.
4234  - Command 'datatype_new' generates size functions ("size_xxx" and
4235    "size") as required by 'fun'.
4236  - BNFs are integrated with the Lifting tool and new-style
4237    (co)datatypes with Transfer.
4238  - Renamed commands:
4239      datatype_new_compat ~> datatype_compat
4240      primrec_new ~> primrec
4241      wrap_free_constructors ~> free_constructors
4242    INCOMPATIBILITY.
4243  - The generated constants "xxx_case" and "xxx_rec" have been renamed
4244    "case_xxx" and "rec_xxx" (e.g., "prod_case" ~> "case_prod").
4245    INCOMPATIBILITY.
4246  - The constant "xxx_(un)fold" and related theorems are no longer
4247    generated.  Use "xxx_(co)rec" or define "xxx_(un)fold" manually
4248    using "prim(co)rec".
4249    INCOMPATIBILITY.
4250  - No discriminators are generated for nullary constructors by
4251    default, eliminating the need for the odd "=:" syntax.
4252    INCOMPATIBILITY.
4253  - No discriminators or selectors are generated by default by
4254    "datatype_new", unless custom names are specified or the new
4255    "discs_sels" option is passed.
4256    INCOMPATIBILITY.
4257
4258* Old datatype package:
4259  - The generated theorems "xxx.cases" and "xxx.recs" have been
4260    renamed "xxx.case" and "xxx.rec" (e.g., "sum.cases" ->
4261    "sum.case").  INCOMPATIBILITY.
4262  - The generated constants "xxx_case", "xxx_rec", and "xxx_size" have
4263    been renamed "case_xxx", "rec_xxx", and "size_xxx" (e.g.,
4264    "prod_case" ~> "case_prod").  INCOMPATIBILITY.
4265
4266* The types "'a list" and "'a option", their set and map functions,
4267  their relators, and their selectors are now produced using the new
4268  BNF-based datatype package.
4269
4270  Renamed constants:
4271    Option.set ~> set_option
4272    Option.map ~> map_option
4273    option_rel ~> rel_option
4274
4275  Renamed theorems:
4276    set_def ~> set_rec[abs_def]
4277    map_def ~> map_rec[abs_def]
4278    Option.map_def ~> map_option_case[abs_def] (with "case_option" instead of "rec_option")
4279    option.recs ~> option.rec
4280    list_all2_def ~> list_all2_iff
4281    set.simps ~> set_simps (or the slightly different "list.set")
4282    map.simps ~> list.map
4283    hd.simps ~> list.sel(1)
4284    tl.simps ~> list.sel(2-3)
4285    the.simps ~> option.sel
4286
4287INCOMPATIBILITY.
4288
4289* The following map functions and relators have been renamed:
4290    sum_map ~> map_sum
4291    map_pair ~> map_prod
4292    prod_rel ~> rel_prod
4293    sum_rel ~> rel_sum
4294    fun_rel ~> rel_fun
4295    set_rel ~> rel_set
4296    filter_rel ~> rel_filter
4297    fset_rel ~> rel_fset (in "src/HOL/Library/FSet.thy")
4298    cset_rel ~> rel_cset (in "src/HOL/Library/Countable_Set_Type.thy")
4299    vset ~> rel_vset (in "src/HOL/Library/Quotient_Set.thy")
4300
4301INCOMPATIBILITY.
4302
4303* Lifting and Transfer:
4304  - a type variable as a raw type is supported
4305  - stronger reflexivity prover
4306  - rep_eq is always generated by lift_definition
4307  - setup for Lifting/Transfer is now automated for BNFs
4308    + holds for BNFs that do not contain a dead variable
4309    + relator_eq, relator_mono, relator_distr, relator_domain,
4310      relator_eq_onp, quot_map, transfer rules for bi_unique, bi_total,
4311      right_unique, right_total, left_unique, left_total are proved
4312      automatically
4313    + definition of a predicator is generated automatically
4314    + simplification rules for a predicator definition are proved
4315      automatically for datatypes
4316  - consolidation of the setup of Lifting/Transfer
4317    + property that a relator preservers reflexivity is not needed any
4318      more
4319      Minor INCOMPATIBILITY.
4320    + left_total and left_unique rules are now transfer rules
4321      (reflexivity_rule attribute not needed anymore)
4322      INCOMPATIBILITY.
4323    + Domainp does not have to be a separate assumption in
4324      relator_domain theorems (=> more natural statement)
4325      INCOMPATIBILITY.
4326  - registration of code equations is more robust
4327    Potential INCOMPATIBILITY.
4328  - respectfulness proof obligation is preprocessed to a more readable
4329    form
4330    Potential INCOMPATIBILITY.
4331  - eq_onp is always unfolded in respectfulness proof obligation
4332    Potential INCOMPATIBILITY.
4333  - unregister lifting setup for Code_Numeral.integer and
4334    Code_Numeral.natural
4335    Potential INCOMPATIBILITY.
4336  - Lifting.invariant -> eq_onp
4337    INCOMPATIBILITY.
4338
4339* New internal SAT solver "cdclite" that produces models and proof
4340traces.  This solver replaces the internal SAT solvers "enumerate" and
4341"dpll".  Applications that explicitly used one of these two SAT
4342solvers should use "cdclite" instead. In addition, "cdclite" is now
4343the default SAT solver for the "sat" and "satx" proof methods and
4344corresponding tactics; the old default can be restored using "declare
4345[[sat_solver = zchaff_with_proofs]]".  Minor INCOMPATIBILITY.
4346
4347* SMT module: A new version of the SMT module, temporarily called
4348"SMT2", uses SMT-LIB 2 and supports recent versions of Z3 (e.g.,
43494.3). The new proof method is called "smt2". CVC3 and CVC4 are also
4350supported as oracles. Yices is no longer supported, because no version
4351of the solver can handle both SMT-LIB 2 and quantifiers.
4352
4353* Activation of Z3 now works via "z3_non_commercial" system option
4354(without requiring restart), instead of former settings variable
4355"Z3_NON_COMMERCIAL".  The option can be edited in Isabelle/jEdit menu
4356Plugin Options / Isabelle / General.
4357
4358* Sledgehammer:
4359  - Z3 can now produce Isar proofs.
4360  - MaSh overhaul:
4361    . New SML-based learning algorithms eliminate the dependency on
4362      Python and increase performance and reliability.
4363    . MaSh and MeSh are now used by default together with the
4364      traditional MePo (Meng-Paulson) relevance filter. To disable
4365      MaSh, set the "MaSh" system option in Isabelle/jEdit Plugin
4366      Options / Isabelle / General to "none".
4367  - New option:
4368      smt_proofs
4369  - Renamed options:
4370      isar_compress ~> compress
4371      isar_try0 ~> try0
4372
4373INCOMPATIBILITY.
4374
4375* Removed solvers remote_cvc3 and remote_z3. Use cvc3 and z3 instead.
4376
4377* Nitpick:
4378  - Fixed soundness bug whereby mutually recursive datatypes could
4379    take infinite values.
4380  - Fixed soundness bug with low-level number functions such as
4381    "Abs_Integ" and "Rep_Integ".
4382  - Removed "std" option.
4383  - Renamed "show_datatypes" to "show_types" and "hide_datatypes" to
4384    "hide_types".
4385
4386* Metis: Removed legacy proof method 'metisFT'. Use 'metis
4387(full_types)' instead. INCOMPATIBILITY.
4388
4389* Try0: Added 'algebra' and 'meson' to the set of proof methods.
4390
4391* Adjustion of INF and SUP operations:
4392  - Elongated constants INFI and SUPR to INFIMUM and SUPREMUM.
4393  - Consolidated theorem names containing INFI and SUPR: have INF and
4394    SUP instead uniformly.
4395  - More aggressive normalization of expressions involving INF and Inf
4396    or SUP and Sup.
4397  - INF_image and SUP_image do not unfold composition.
4398  - Dropped facts INF_comp, SUP_comp.
4399  - Default congruence rules strong_INF_cong and strong_SUP_cong, with
4400    simplifier implication in premises.  Generalize and replace former
4401    INT_cong, SUP_cong
4402
4403INCOMPATIBILITY.
4404
4405* SUP and INF generalized to conditionally_complete_lattice.
4406
4407* Swapped orientation of facts image_comp and vimage_comp:
4408
4409  image_compose ~> image_comp [symmetric]
4410  image_comp ~> image_comp [symmetric]
4411  vimage_compose ~> vimage_comp [symmetric]
4412  vimage_comp ~> vimage_comp [symmetric]
4413
4414INCOMPATIBILITY.
4415
4416* Theory reorganization: split of Big_Operators.thy into
4417Groups_Big.thy and Lattices_Big.thy.
4418
4419* Consolidated some facts about big group operators:
4420
4421    setsum_0' ~> setsum.neutral
4422    setsum_0 ~> setsum.neutral_const
4423    setsum_addf ~> setsum.distrib
4424    setsum_cartesian_product ~> setsum.cartesian_product
4425    setsum_cases ~> setsum.If_cases
4426    setsum_commute ~> setsum.commute
4427    setsum_cong ~> setsum.cong
4428    setsum_delta ~> setsum.delta
4429    setsum_delta' ~> setsum.delta'
4430    setsum_diff1' ~> setsum.remove
4431    setsum_empty ~> setsum.empty
4432    setsum_infinite ~> setsum.infinite
4433    setsum_insert ~> setsum.insert
4434    setsum_inter_restrict'' ~> setsum.inter_filter
4435    setsum_mono_zero_cong_left ~> setsum.mono_neutral_cong_left
4436    setsum_mono_zero_cong_right ~> setsum.mono_neutral_cong_right
4437    setsum_mono_zero_left ~> setsum.mono_neutral_left
4438    setsum_mono_zero_right ~> setsum.mono_neutral_right
4439    setsum_reindex ~> setsum.reindex
4440    setsum_reindex_cong ~> setsum.reindex_cong
4441    setsum_reindex_nonzero ~> setsum.reindex_nontrivial
4442    setsum_restrict_set ~> setsum.inter_restrict
4443    setsum_Plus ~> setsum.Plus
4444    setsum_setsum_restrict ~> setsum.commute_restrict
4445    setsum_Sigma ~> setsum.Sigma
4446    setsum_subset_diff ~> setsum.subset_diff
4447    setsum_Un_disjoint ~> setsum.union_disjoint
4448    setsum_UN_disjoint ~> setsum.UNION_disjoint
4449    setsum_Un_Int ~> setsum.union_inter
4450    setsum_Union_disjoint ~> setsum.Union_disjoint
4451    setsum_UNION_zero ~> setsum.Union_comp
4452    setsum_Un_zero ~> setsum.union_inter_neutral
4453    strong_setprod_cong ~> setprod.strong_cong
4454    strong_setsum_cong ~> setsum.strong_cong
4455    setprod_1' ~> setprod.neutral
4456    setprod_1 ~> setprod.neutral_const
4457    setprod_cartesian_product ~> setprod.cartesian_product
4458    setprod_cong ~> setprod.cong
4459    setprod_delta ~> setprod.delta
4460    setprod_delta' ~> setprod.delta'
4461    setprod_empty ~> setprod.empty
4462    setprod_infinite ~> setprod.infinite
4463    setprod_insert ~> setprod.insert
4464    setprod_mono_one_cong_left ~> setprod.mono_neutral_cong_left
4465    setprod_mono_one_cong_right ~> setprod.mono_neutral_cong_right
4466    setprod_mono_one_left ~> setprod.mono_neutral_left
4467    setprod_mono_one_right ~> setprod.mono_neutral_right
4468    setprod_reindex ~> setprod.reindex
4469    setprod_reindex_cong ~> setprod.reindex_cong
4470    setprod_reindex_nonzero ~> setprod.reindex_nontrivial
4471    setprod_Sigma ~> setprod.Sigma
4472    setprod_subset_diff ~> setprod.subset_diff
4473    setprod_timesf ~> setprod.distrib
4474    setprod_Un2 ~> setprod.union_diff2
4475    setprod_Un_disjoint ~> setprod.union_disjoint
4476    setprod_UN_disjoint ~> setprod.UNION_disjoint
4477    setprod_Un_Int ~> setprod.union_inter
4478    setprod_Union_disjoint ~> setprod.Union_disjoint
4479    setprod_Un_one ~> setprod.union_inter_neutral
4480
4481  Dropped setsum_cong2 (simple variant of setsum.cong).
4482  Dropped setsum_inter_restrict' (simple variant of setsum.inter_restrict)
4483  Dropped setsum_reindex_id, setprod_reindex_id
4484    (simple variants of setsum.reindex [symmetric], setprod.reindex [symmetric]).
4485
4486INCOMPATIBILITY.
4487
4488* Abolished slightly odd global lattice interpretation for min/max.
4489
4490  Fact consolidations:
4491    min_max.inf_assoc ~> min.assoc
4492    min_max.inf_commute ~> min.commute
4493    min_max.inf_left_commute ~> min.left_commute
4494    min_max.inf_idem ~> min.idem
4495    min_max.inf_left_idem ~> min.left_idem
4496    min_max.inf_right_idem ~> min.right_idem
4497    min_max.sup_assoc ~> max.assoc
4498    min_max.sup_commute ~> max.commute
4499    min_max.sup_left_commute ~> max.left_commute
4500    min_max.sup_idem ~> max.idem
4501    min_max.sup_left_idem ~> max.left_idem
4502    min_max.sup_inf_distrib1 ~> max_min_distrib2
4503    min_max.sup_inf_distrib2 ~> max_min_distrib1
4504    min_max.inf_sup_distrib1 ~> min_max_distrib2
4505    min_max.inf_sup_distrib2 ~> min_max_distrib1
4506    min_max.distrib ~> min_max_distribs
4507    min_max.inf_absorb1 ~> min.absorb1
4508    min_max.inf_absorb2 ~> min.absorb2
4509    min_max.sup_absorb1 ~> max.absorb1
4510    min_max.sup_absorb2 ~> max.absorb2
4511    min_max.le_iff_inf ~> min.absorb_iff1
4512    min_max.le_iff_sup ~> max.absorb_iff2
4513    min_max.inf_le1 ~> min.cobounded1
4514    min_max.inf_le2 ~> min.cobounded2
4515    le_maxI1, min_max.sup_ge1 ~> max.cobounded1
4516    le_maxI2, min_max.sup_ge2 ~> max.cobounded2
4517    min_max.le_infI1 ~> min.coboundedI1
4518    min_max.le_infI2 ~> min.coboundedI2
4519    min_max.le_supI1 ~> max.coboundedI1
4520    min_max.le_supI2 ~> max.coboundedI2
4521    min_max.less_infI1 ~> min.strict_coboundedI1
4522    min_max.less_infI2 ~> min.strict_coboundedI2
4523    min_max.less_supI1 ~> max.strict_coboundedI1
4524    min_max.less_supI2 ~> max.strict_coboundedI2
4525    min_max.inf_mono ~> min.mono
4526    min_max.sup_mono ~> max.mono
4527    min_max.le_infI, min_max.inf_greatest ~> min.boundedI
4528    min_max.le_supI, min_max.sup_least ~> max.boundedI
4529    min_max.le_inf_iff ~> min.bounded_iff
4530    min_max.le_sup_iff ~> max.bounded_iff
4531
4532For min_max.inf_sup_aci, prefer (one of) min.commute, min.assoc,
4533min.left_commute, min.left_idem, max.commute, max.assoc,
4534max.left_commute, max.left_idem directly.
4535
4536For min_max.inf_sup_ord, prefer (one of) min.cobounded1,
4537min.cobounded2, max.cobounded1m max.cobounded2 directly.
4538
4539For min_ac or max_ac, prefer more general collection ac_simps.
4540
4541INCOMPATIBILITY.
4542
4543* Theorem disambiguation Inf_le_Sup (on finite sets) ~>
4544Inf_fin_le_Sup_fin.  INCOMPATIBILITY.
4545
4546* Qualified constant names Wellfounded.acc, Wellfounded.accp.
4547INCOMPATIBILITY.
4548
4549* Fact generalization and consolidation:
4550    neq_one_mod_two, mod_2_not_eq_zero_eq_one_int ~> not_mod_2_eq_0_eq_1
4551
4552INCOMPATIBILITY.
4553
4554* Purely algebraic definition of even.  Fact generalization and
4555  consolidation:
4556    nat_even_iff_2_dvd, int_even_iff_2_dvd ~> even_iff_2_dvd
4557    even_zero_(nat|int) ~> even_zero
4558
4559INCOMPATIBILITY.
4560
4561* Abolished neg_numeral.
4562  - Canonical representation for minus one is "- 1".
4563  - Canonical representation for other negative numbers is "- (numeral _)".
4564  - When devising rule sets for number calculation, consider the
4565    following canonical cases: 0, 1, numeral _, - 1, - numeral _.
4566  - HOLogic.dest_number also recognizes numerals in non-canonical forms
4567    like "numeral One", "- numeral One", "- 0" and even "- ... - _".
4568  - Syntax for negative numerals is mere input syntax.
4569
4570INCOMPATIBILITY.
4571
4572* Reduced name variants for rules on associativity and commutativity:
4573
4574    add_assoc ~> add.assoc
4575    add_commute ~> add.commute
4576    add_left_commute ~> add.left_commute
4577    mult_assoc ~> mult.assoc
4578    mult_commute ~> mult.commute
4579    mult_left_commute ~> mult.left_commute
4580    nat_add_assoc ~> add.assoc
4581    nat_add_commute ~> add.commute
4582    nat_add_left_commute ~> add.left_commute
4583    nat_mult_assoc ~> mult.assoc
4584    nat_mult_commute ~> mult.commute
4585    eq_assoc ~> iff_assoc
4586    eq_left_commute ~> iff_left_commute
4587
4588INCOMPATIBILITY.
4589
4590* Fact collections add_ac and mult_ac are considered old-fashioned.
4591Prefer ac_simps instead, or specify rules
4592(add|mult).(assoc|commute|left_commute) individually.
4593
4594* Elimination of fact duplicates:
4595    equals_zero_I ~> minus_unique
4596    diff_eq_0_iff_eq ~> right_minus_eq
4597    nat_infinite ~> infinite_UNIV_nat
4598    int_infinite ~> infinite_UNIV_int
4599
4600INCOMPATIBILITY.
4601
4602* Fact name consolidation:
4603    diff_def, diff_minus, ab_diff_minus ~> diff_conv_add_uminus
4604    minus_le_self_iff ~> neg_less_eq_nonneg
4605    le_minus_self_iff ~> less_eq_neg_nonpos
4606    neg_less_nonneg ~> neg_less_pos
4607    less_minus_self_iff ~> less_neg_neg [simp]
4608
4609INCOMPATIBILITY.
4610
4611* More simplification rules on unary and binary minus:
4612add_diff_cancel, add_diff_cancel_left, add_le_same_cancel1,
4613add_le_same_cancel2, add_less_same_cancel1, add_less_same_cancel2,
4614add_minus_cancel, diff_add_cancel, le_add_same_cancel1,
4615le_add_same_cancel2, less_add_same_cancel1, less_add_same_cancel2,
4616minus_add_cancel, uminus_add_conv_diff.  These correspondingly have
4617been taken away from fact collections algebra_simps and field_simps.
4618INCOMPATIBILITY.
4619
4620To restore proofs, the following patterns are helpful:
4621
4622a) Arbitrary failing proof not involving "diff_def":
4623Consider simplification with algebra_simps or field_simps.
4624
4625b) Lifting rules from addition to subtraction:
4626Try with "using <rule for addition> of [... "- _" ...]" by simp".
4627
4628c) Simplification with "diff_def": just drop "diff_def".
4629Consider simplification with algebra_simps or field_simps;
4630or the brute way with
4631"simp add: diff_conv_add_uminus del: add_uminus_conv_diff".
4632
4633* Introduce bdd_above and bdd_below in theory
4634Conditionally_Complete_Lattices, use them instead of explicitly
4635stating boundedness of sets.
4636
4637* ccpo.admissible quantifies only over non-empty chains to allow more
4638syntax-directed proof rules; the case of the empty chain shows up as
4639additional case in fixpoint induction proofs.  INCOMPATIBILITY.
4640
4641* Removed and renamed theorems in Series:
4642  summable_le         ~>  suminf_le
4643  suminf_le           ~>  suminf_le_const
4644  series_pos_le       ~>  setsum_le_suminf
4645  series_pos_less     ~>  setsum_less_suminf
4646  suminf_ge_zero      ~>  suminf_nonneg
4647  suminf_gt_zero      ~>  suminf_pos
4648  suminf_gt_zero_iff  ~>  suminf_pos_iff
4649  summable_sumr_LIMSEQ_suminf  ~>  summable_LIMSEQ
4650  suminf_0_le         ~>  suminf_nonneg [rotate]
4651  pos_summable        ~>  summableI_nonneg_bounded
4652  ratio_test          ~>  summable_ratio_test
4653
4654  removed series_zero, replaced by sums_finite
4655
4656  removed auxiliary lemmas:
4657
4658    sumr_offset, sumr_offset2, sumr_offset3, sumr_offset4, sumr_group,
4659    half, le_Suc_ex_iff, lemma_realpow_diff_sumr,
4660    real_setsum_nat_ivl_bounded, summable_le2, ratio_test_lemma2,
4661    sumr_minus_one_realpow_zerom, sumr_one_lb_realpow_zero,
4662    summable_convergent_sumr_iff, sumr_diff_mult_const
4663
4664INCOMPATIBILITY.
4665
4666* Replace (F)DERIV syntax by has_derivative:
4667  - "(f has_derivative f') (at x within s)" replaces "FDERIV f x : s : f'"
4668
4669  - "(f has_field_derivative f') (at x within s)" replaces "DERIV f x : s : f'"
4670
4671  - "f differentiable at x within s" replaces "_ differentiable _ in _" syntax
4672
4673  - removed constant isDiff
4674
4675  - "DERIV f x : f'" and "FDERIV f x : f'" syntax is only available as
4676    input syntax.
4677
4678  - "DERIV f x : s : f'" and "FDERIV f x : s : f'" syntax removed.
4679
4680  - Renamed FDERIV_... lemmas to has_derivative_...
4681
4682  - renamed deriv (the syntax constant used for "DERIV _ _ :> _") to DERIV
4683
4684  - removed DERIV_intros, has_derivative_eq_intros
4685
4686  - introduced derivative_intros and deriative_eq_intros which
4687    includes now rules for DERIV, has_derivative and
4688    has_vector_derivative.
4689
4690  - Other renamings:
4691    differentiable_def        ~>  real_differentiable_def
4692    differentiableE           ~>  real_differentiableE
4693    fderiv_def                ~>  has_derivative_at
4694    field_fderiv_def          ~>  field_has_derivative_at
4695    isDiff_der                ~>  differentiable_def
4696    deriv_fderiv              ~>  has_field_derivative_def
4697    deriv_def                 ~>  DERIV_def
4698
4699INCOMPATIBILITY.
4700
4701* Include more theorems in continuous_intros. Remove the
4702continuous_on_intros, isCont_intros collections, these facts are now
4703in continuous_intros.
4704
4705* Theorems about complex numbers are now stated only using Re and Im,
4706the Complex constructor is not used anymore. It is possible to use
4707primcorec to defined the behaviour of a complex-valued function.
4708
4709Removed theorems about the Complex constructor from the simpset, they
4710are available as the lemma collection legacy_Complex_simps. This
4711especially removes
4712
4713    i_complex_of_real: "ii * complex_of_real r = Complex 0 r".
4714
4715Instead the reverse direction is supported with
4716    Complex_eq: "Complex a b = a + \<i> * b"
4717
4718Moved csqrt from Fundamental_Algebra_Theorem to Complex.
4719
4720  Renamings:
4721    Re/Im                  ~>  complex.sel
4722    complex_Re/Im_zero     ~>  zero_complex.sel
4723    complex_Re/Im_add      ~>  plus_complex.sel
4724    complex_Re/Im_minus    ~>  uminus_complex.sel
4725    complex_Re/Im_diff     ~>  minus_complex.sel
4726    complex_Re/Im_one      ~>  one_complex.sel
4727    complex_Re/Im_mult     ~>  times_complex.sel
4728    complex_Re/Im_inverse  ~>  inverse_complex.sel
4729    complex_Re/Im_scaleR   ~>  scaleR_complex.sel
4730    complex_Re/Im_i        ~>  ii.sel
4731    complex_Re/Im_cnj      ~>  cnj.sel
4732    Re/Im_cis              ~>  cis.sel
4733
4734    complex_divide_def   ~>  divide_complex_def
4735    complex_norm_def     ~>  norm_complex_def
4736    cmod_def             ~>  norm_complex_de
4737
4738  Removed theorems:
4739    complex_zero_def
4740    complex_add_def
4741    complex_minus_def
4742    complex_diff_def
4743    complex_one_def
4744    complex_mult_def
4745    complex_inverse_def
4746    complex_scaleR_def
4747
4748INCOMPATIBILITY.
4749
4750* Theory Lubs moved HOL image to HOL-Library. It is replaced by
4751Conditionally_Complete_Lattices.  INCOMPATIBILITY.
4752
4753* HOL-Library: new theory src/HOL/Library/Tree.thy.
4754
4755* HOL-Library: removed theory src/HOL/Library/Kleene_Algebra.thy; it
4756is subsumed by session Kleene_Algebra in AFP.
4757
4758* HOL-Library / theory RBT: various constants and facts are hidden;
4759lifting setup is unregistered.  INCOMPATIBILITY.
4760
4761* HOL-Cardinals: new theory src/HOL/Cardinals/Ordinal_Arithmetic.thy.
4762
4763* HOL-Word: bit representations prefer type bool over type bit.
4764INCOMPATIBILITY.
4765
4766* HOL-Word:
4767  - Abandoned fact collection "word_arith_alts", which is a duplicate
4768    of "word_arith_wis".
4769  - Dropped first (duplicated) element in fact collections
4770    "sint_word_ariths", "word_arith_alts", "uint_word_ariths",
4771    "uint_word_arith_bintrs".
4772
4773* HOL-Number_Theory:
4774  - consolidated the proofs of the binomial theorem
4775  - the function fib is again of type nat => nat and not overloaded
4776  - no more references to Old_Number_Theory in the HOL libraries
4777    (except the AFP)
4778
4779INCOMPATIBILITY.
4780
4781* HOL-Multivariate_Analysis:
4782  - Type class ordered_real_vector for ordered vector spaces.
4783  - New theory Complex_Basic_Analysis defining complex derivatives,
4784    holomorphic functions, etc., ported from HOL Light's canal.ml.
4785  - Changed order of ordered_euclidean_space to be compatible with
4786    pointwise ordering on products. Therefore instance of
4787    conditionally_complete_lattice and ordered_real_vector.
4788    INCOMPATIBILITY: use box instead of greaterThanLessThan or
4789    explicit set-comprehensions with eucl_less for other (half-)open
4790    intervals.
4791  - removed dependencies on type class ordered_euclidean_space with
4792    introduction of "cbox" on euclidean_space
4793    - renamed theorems:
4794        interval ~> box
4795        mem_interval ~> mem_box
4796        interval_eq_empty ~> box_eq_empty
4797        interval_ne_empty ~> box_ne_empty
4798        interval_sing(1) ~> cbox_sing
4799        interval_sing(2) ~> box_sing
4800        subset_interval_imp ~> subset_box_imp
4801        subset_interval ~> subset_box
4802        open_interval ~> open_box
4803        closed_interval ~> closed_cbox
4804        interior_closed_interval ~> interior_cbox
4805        bounded_closed_interval ~> bounded_cbox
4806        compact_interval ~> compact_cbox
4807        bounded_subset_closed_interval_symmetric ~> bounded_subset_cbox_symmetric
4808        bounded_subset_closed_interval ~> bounded_subset_cbox
4809        mem_interval_componentwiseI ~> mem_box_componentwiseI
4810        convex_box ~> convex_prod
4811        rel_interior_real_interval ~> rel_interior_real_box
4812        convex_interval ~> convex_box
4813        convex_hull_eq_real_interval ~> convex_hull_eq_real_cbox
4814        frechet_derivative_within_closed_interval ~> frechet_derivative_within_cbox
4815        content_closed_interval' ~> content_cbox'
4816        elementary_subset_interval ~> elementary_subset_box
4817        diameter_closed_interval ~> diameter_cbox
4818        frontier_closed_interval ~> frontier_cbox
4819        frontier_open_interval ~> frontier_box
4820        bounded_subset_open_interval_symmetric ~> bounded_subset_box_symmetric
4821        closure_open_interval ~> closure_box
4822        open_closed_interval_convex ~> open_cbox_convex
4823        open_interval_midpoint ~> box_midpoint
4824        content_image_affinity_interval ~> content_image_affinity_cbox
4825        is_interval_interval ~> is_interval_cbox + is_interval_box + is_interval_closed_interval
4826        bounded_interval ~> bounded_closed_interval + bounded_boxes
4827
4828    - respective theorems for intervals over the reals:
4829        content_closed_interval + content_cbox
4830        has_integral + has_integral_real
4831        fine_division_exists + fine_division_exists_real
4832        has_integral_null + has_integral_null_real
4833        tagged_division_union_interval + tagged_division_union_interval_real
4834        has_integral_const + has_integral_const_real
4835        integral_const + integral_const_real
4836        has_integral_bound + has_integral_bound_real
4837        integrable_continuous + integrable_continuous_real
4838        integrable_subinterval + integrable_subinterval_real
4839        has_integral_reflect_lemma + has_integral_reflect_lemma_real
4840        integrable_reflect + integrable_reflect_real
4841        integral_reflect + integral_reflect_real
4842        image_affinity_interval + image_affinity_cbox
4843        image_smult_interval + image_smult_cbox
4844        integrable_const + integrable_const_ivl
4845        integrable_on_subinterval + integrable_on_subcbox
4846
4847  - renamed theorems:
4848    derivative_linear         ~>  has_derivative_bounded_linear
4849    derivative_is_linear      ~>  has_derivative_linear
4850    bounded_linear_imp_linear ~>  bounded_linear.linear
4851
4852* HOL-Probability:
4853  - Renamed positive_integral to nn_integral:
4854
4855    . Renamed all lemmas "*positive_integral*" to *nn_integral*"
4856      positive_integral_positive ~> nn_integral_nonneg
4857
4858    . Renamed abbreviation integral\<^sup>P to integral\<^sup>N.
4859
4860  - replaced the Lebesgue integral on real numbers by the more general
4861    Bochner integral for functions into a real-normed vector space.
4862
4863    integral_zero               ~>  integral_zero / integrable_zero
4864    integral_minus              ~>  integral_minus / integrable_minus
4865    integral_add                ~>  integral_add / integrable_add
4866    integral_diff               ~>  integral_diff / integrable_diff
4867    integral_setsum             ~>  integral_setsum / integrable_setsum
4868    integral_multc              ~>  integral_mult_left / integrable_mult_left
4869    integral_cmult              ~>  integral_mult_right / integrable_mult_right
4870    integral_triangle_inequality~>  integral_norm_bound
4871    integrable_nonneg           ~>  integrableI_nonneg
4872    integral_positive           ~>  integral_nonneg_AE
4873    integrable_abs_iff          ~>  integrable_abs_cancel
4874    positive_integral_lim_INF   ~>  nn_integral_liminf
4875    lebesgue_real_affine        ~>  lborel_real_affine
4876    borel_integral_has_integral ~>  has_integral_lebesgue_integral
4877    integral_indicator          ~>
4878         integral_real_indicator / integrable_real_indicator
4879    positive_integral_fst       ~>  nn_integral_fst'
4880    positive_integral_fst_measurable ~> nn_integral_fst
4881    positive_integral_snd_measurable ~> nn_integral_snd
4882
4883    integrable_fst_measurable   ~>
4884         integral_fst / integrable_fst / AE_integrable_fst
4885
4886    integrable_snd_measurable   ~>
4887         integral_snd / integrable_snd / AE_integrable_snd
4888
4889    integral_monotone_convergence  ~>
4890         integral_monotone_convergence / integrable_monotone_convergence
4891
4892    integral_monotone_convergence_at_top  ~>
4893         integral_monotone_convergence_at_top /
4894         integrable_monotone_convergence_at_top
4895
4896    has_integral_iff_positive_integral_lebesgue  ~>
4897         has_integral_iff_has_bochner_integral_lebesgue_nonneg
4898
4899    lebesgue_integral_has_integral  ~>
4900         has_integral_integrable_lebesgue_nonneg
4901
4902    positive_integral_lebesgue_has_integral  ~>
4903         integral_has_integral_lebesgue_nonneg /
4904         integrable_has_integral_lebesgue_nonneg
4905
4906    lebesgue_integral_real_affine  ~>
4907         nn_integral_real_affine
4908
4909    has_integral_iff_positive_integral_lborel  ~>
4910         integral_has_integral_nonneg / integrable_has_integral_nonneg
4911
4912    The following theorems where removed:
4913
4914    lebesgue_integral_nonneg
4915    lebesgue_integral_uminus
4916    lebesgue_integral_cmult
4917    lebesgue_integral_multc
4918    lebesgue_integral_cmult_nonneg
4919    integral_cmul_indicator
4920    integral_real
4921
4922  - Formalized properties about exponentially, Erlang, and normal
4923    distributed random variables.
4924
4925* HOL-Decision_Procs: Separate command 'approximate' for approximative
4926computation in src/HOL/Decision_Procs/Approximation.  Minor
4927INCOMPATIBILITY.
4928
4929
4930*** Scala ***
4931
4932* The signature and semantics of Document.Snapshot.cumulate_markup /
4933select_markup have been clarified.  Markup is now traversed in the
4934order of reports given by the prover: later markup is usually more
4935specific and may override results accumulated so far.  The elements
4936guard is mandatory and checked precisely.  Subtle INCOMPATIBILITY.
4937
4938* Substantial reworking of internal PIDE protocol communication
4939channels.  INCOMPATIBILITY.
4940
4941
4942*** ML ***
4943
4944* Subtle change of semantics of Thm.eq_thm: theory stamps are not
4945compared (according to Thm.thm_ord), but assumed to be covered by the
4946current background theory.  Thus equivalent data produced in different
4947branches of the theory graph usually coincides (e.g. relevant for
4948theory merge).  Note that the softer Thm.eq_thm_prop is often more
4949appropriate than Thm.eq_thm.
4950
4951* Proper context for basic Simplifier operations: rewrite_rule,
4952rewrite_goals_rule, rewrite_goals_tac etc. INCOMPATIBILITY, need to
4953pass runtime Proof.context (and ensure that the simplified entity
4954actually belongs to it).
4955
4956* Proper context discipline for read_instantiate and instantiate_tac:
4957variables that are meant to become schematic need to be given as
4958fixed, and are generalized by the explicit context of local variables.
4959This corresponds to Isar attributes "where" and "of" with 'for'
4960declaration.  INCOMPATIBILITY, also due to potential change of indices
4961of schematic variables.
4962
4963* Moved ML_Compiler.exn_trace and other operations on exceptions to
4964structure Runtime.  Minor INCOMPATIBILITY.
4965
4966* Discontinued old Toplevel.debug in favour of system option
4967"ML_exception_trace", which may be also declared within the context
4968via "declare [[ML_exception_trace = true]]".  Minor INCOMPATIBILITY.
4969
4970* Renamed configuration option "ML_trace" to "ML_source_trace". Minor
4971INCOMPATIBILITY.
4972
4973* Configuration option "ML_print_depth" controls the pretty-printing
4974depth of the ML compiler within the context.  The old print_depth in
4975ML is still available as default_print_depth, but rarely used.  Minor
4976INCOMPATIBILITY.
4977
4978* Toplevel function "use" refers to raw ML bootstrap environment,
4979without Isar context nor antiquotations.  Potential INCOMPATIBILITY.
4980Note that 'ML_file' is the canonical command to load ML files into the
4981formal context.
4982
4983* Simplified programming interface to define ML antiquotations, see
4984structure ML_Antiquotation.  Minor INCOMPATIBILITY.
4985
4986* ML antiquotation @{here} refers to its source position, which is
4987occasionally useful for experimentation and diagnostic purposes.
4988
4989* ML antiquotation @{path} produces a Path.T value, similarly to
4990Path.explode, but with compile-time check against the file-system and
4991some PIDE markup.  Note that unlike theory source, ML does not have a
4992well-defined master directory, so an absolute symbolic path
4993specification is usually required, e.g. "~~/src/HOL".
4994
4995* ML antiquotation @{print} inlines a function to print an arbitrary
4996ML value, which is occasionally useful for diagnostic or demonstration
4997purposes.
4998
4999
5000*** System ***
5001
5002* Proof General with its traditional helper scripts is now an optional
5003Isabelle component, e.g. see ProofGeneral-4.2-2 from the Isabelle
5004component repository http://isabelle.in.tum.de/components/.  Note that
5005the "system" manual provides general explanations about add-on
5006components, especially those that are not bundled with the release.
5007
5008* The raw Isabelle process executable has been renamed from
5009"isabelle-process" to "isabelle_process", which conforms to common
5010shell naming conventions, and allows to define a shell function within
5011the Isabelle environment to avoid dynamic path lookup.  Rare
5012incompatibility for old tools that do not use the ISABELLE_PROCESS
5013settings variable.
5014
5015* Former "isabelle tty" has been superseded by "isabelle console",
5016with implicit build like "isabelle jedit", and without the mostly
5017obsolete Isar TTY loop.
5018
5019* Simplified "isabelle display" tool.  Settings variables DVI_VIEWER
5020and PDF_VIEWER now refer to the actual programs, not shell
5021command-lines.  Discontinued option -c: invocation may be asynchronous
5022via desktop environment, without any special precautions.  Potential
5023INCOMPATIBILITY with ambitious private settings.
5024
5025* Removed obsolete "isabelle unsymbolize".  Note that the usual format
5026for email communication is the Unicode rendering of Isabelle symbols,
5027as produced by Isabelle/jEdit, for example.
5028
5029* Removed obsolete tool "wwwfind". Similar functionality may be
5030integrated into Isabelle/jEdit eventually.
5031
5032* Improved 'display_drafts' concerning desktop integration and
5033repeated invocation in PIDE front-end: re-use single file
5034$ISABELLE_HOME_USER/tmp/drafts.pdf and corresponding views.
5035
5036* Session ROOT specifications require explicit 'document_files' for
5037robust dependencies on LaTeX sources.  Only these explicitly given
5038files are copied to the document output directory, before document
5039processing is started.
5040
5041* Windows: support for regular TeX installation (e.g. MiKTeX) instead
5042of TeX Live from Cygwin.
5043
5044
5045
5046New in Isabelle2013-2 (December 2013)
5047-------------------------------------
5048
5049*** Prover IDE -- Isabelle/Scala/jEdit ***
5050
5051* More robust editing of running commands with internal forks,
5052e.g. non-terminating 'by' steps.
5053
5054* More relaxed Sledgehammer panel: avoid repeated application of query
5055after edits surrounding the command location.
5056
5057* More status information about commands that are interrupted
5058accidentally (via physical event or Poly/ML runtime system signal,
5059e.g. out-of-memory).
5060
5061
5062*** System ***
5063
5064* More robust termination of external processes managed by
5065Isabelle/ML: support cancellation of tasks within the range of
5066milliseconds, as required for PIDE document editing with automatically
5067tried tools (e.g. Sledgehammer).
5068
5069* Reactivated Isabelle/Scala kill command for external processes on
5070Mac OS X, which was accidentally broken in Isabelle2013-1 due to a
5071workaround for some Debian/Ubuntu Linux versions from 2013.
5072
5073
5074
5075New in Isabelle2013-1 (November 2013)
5076-------------------------------------
5077
5078*** General ***
5079
5080* Discontinued obsolete 'uses' within theory header.  Note that
5081commands like 'ML_file' work without separate declaration of file
5082dependencies.  Minor INCOMPATIBILITY.
5083
5084* Discontinued redundant 'use' command, which was superseded by
5085'ML_file' in Isabelle2013.  Minor INCOMPATIBILITY.
5086
5087* Simplified subscripts within identifiers, using plain \<^sub>
5088instead of the second copy \<^isub> and \<^isup>.  Superscripts are
5089only for literal tokens within notation; explicit mixfix annotations
5090for consts or fixed variables may be used as fall-back for unusual
5091names.  Obsolete \<twosuperior> has been expanded to \<^sup>2 in
5092Isabelle/HOL.  INCOMPATIBILITY, use "isabelle update_sub_sup" to
5093standardize symbols as a starting point for further manual cleanup.
5094The ML reference variable "legacy_isub_isup" may be set as temporary
5095workaround, to make the prover accept a subset of the old identifier
5096syntax.
5097
5098* Document antiquotations: term style "isub" has been renamed to
5099"sub".  Minor INCOMPATIBILITY.
5100
5101* Uniform management of "quick_and_dirty" as system option (see also
5102"isabelle options"), configuration option within the context (see also
5103Config.get in Isabelle/ML), and attribute in Isabelle/Isar.  Minor
5104INCOMPATIBILITY, need to use more official Isabelle means to access
5105quick_and_dirty, instead of historical poking into mutable reference.
5106
5107* Renamed command 'print_configs' to 'print_options'.  Minor
5108INCOMPATIBILITY.
5109
5110* Proper diagnostic command 'print_state'.  Old 'pr' (with its
5111implicit change of some global references) is retained for now as
5112control command, e.g. for ProofGeneral 3.7.x.
5113
5114* Discontinued 'print_drafts' command with its old-fashioned PS output
5115and Unix command-line print spooling.  Minor INCOMPATIBILITY: use
5116'display_drafts' instead and print via the regular document viewer.
5117
5118* Updated and extended "isar-ref" and "implementation" manual,
5119eliminated old "ref" manual.
5120
5121
5122*** Prover IDE -- Isabelle/Scala/jEdit ***
5123
5124* New manual "jedit" for Isabelle/jEdit, see isabelle doc or
5125Documentation panel.
5126
5127* Dockable window "Documentation" provides access to Isabelle
5128documentation.
5129
5130* Dockable window "Find" provides query operations for formal entities
5131(GUI front-end to 'find_theorems' command).
5132
5133* Dockable window "Sledgehammer" manages asynchronous / parallel
5134sledgehammer runs over existing document sources, independently of
5135normal editing and checking process.
5136
5137* Dockable window "Timing" provides an overview of relevant command
5138timing information, depending on option jedit_timing_threshold.  The
5139same timing information is shown in the extended tooltip of the
5140command keyword, when hovering the mouse over it while the CONTROL or
5141COMMAND modifier is pressed.
5142
5143* Improved dockable window "Theories": Continuous checking of proof
5144document (visible and required parts) may be controlled explicitly,
5145using check box or shortcut "C+e ENTER".  Individual theory nodes may
5146be marked explicitly as required and checked in full, using check box
5147or shortcut "C+e SPACE".
5148
5149* Improved completion mechanism, which is now managed by the
5150Isabelle/jEdit plugin instead of SideKick.  Refined table of Isabelle
5151symbol abbreviations (see $ISABELLE_HOME/etc/symbols).
5152
5153* Standard jEdit keyboard shortcut C+b complete-word is remapped to
5154isabelle.complete for explicit completion in Isabelle sources.
5155INCOMPATIBILITY wrt. jEdit defaults, may have to invent new shortcuts
5156to resolve conflict.
5157
5158* Improved support of various "minor modes" for Isabelle NEWS,
5159options, session ROOT etc., with completion and SideKick tree view.
5160
5161* Strictly monotonic document update, without premature cancellation of
5162running transactions that are still needed: avoid reset/restart of
5163such command executions while editing.
5164
5165* Support for asynchronous print functions, as overlay to existing
5166document content.
5167
5168* Support for automatic tools in HOL, which try to prove or disprove
5169toplevel theorem statements.
5170
5171* Action isabelle.reset-font-size resets main text area font size
5172according to Isabelle/Scala plugin option "jedit_font_reset_size" (see
5173also "Plugin Options / Isabelle / General").  It can be bound to some
5174keyboard shortcut by the user (e.g. C+0 and/or C+NUMPAD0).
5175
5176* File specifications in jEdit (e.g. file browser) may refer to
5177$ISABELLE_HOME and $ISABELLE_HOME_USER on all platforms.  Discontinued
5178obsolete $ISABELLE_HOME_WINDOWS variable.
5179
5180* Improved support for Linux look-and-feel "GTK+", see also "Utilities
5181/ Global Options / Appearance".
5182
5183* Improved support of native Mac OS X functionality via "MacOSX"
5184plugin, which is now enabled by default.
5185
5186
5187*** Pure ***
5188
5189* Commands 'interpretation' and 'sublocale' are now target-sensitive.
5190In particular, 'interpretation' allows for non-persistent
5191interpretation within "context ... begin ... end" blocks offering a
5192light-weight alternative to 'sublocale'.  See "isar-ref" manual for
5193details.
5194
5195* Improved locales diagnostic command 'print_dependencies'.
5196
5197* Discontinued obsolete 'axioms' command, which has been marked as
5198legacy since Isabelle2009-2.  INCOMPATIBILITY, use 'axiomatization'
5199instead, while observing its uniform scope for polymorphism.
5200
5201* Discontinued empty name bindings in 'axiomatization'.
5202INCOMPATIBILITY.
5203
5204* System option "proofs" has been discontinued.  Instead the global
5205state of Proofterm.proofs is persistently compiled into logic images
5206as required, notably HOL-Proofs.  Users no longer need to change
5207Proofterm.proofs dynamically.  Minor INCOMPATIBILITY.
5208
5209* Syntax translation functions (print_translation etc.) always depend
5210on Proof.context.  Discontinued former "(advanced)" option -- this is
5211now the default.  Minor INCOMPATIBILITY.
5212
5213* Former global reference trace_unify_fail is now available as
5214configuration option "unify_trace_failure" (global context only).
5215
5216* SELECT_GOAL now retains the syntactic context of the overall goal
5217state (schematic variables etc.).  Potential INCOMPATIBILITY in rare
5218situations.
5219
5220
5221*** HOL ***
5222
5223* Stronger precedence of syntax for big intersection and union on
5224sets, in accordance with corresponding lattice operations.
5225INCOMPATIBILITY.
5226
5227* Notation "{p:A. P}" now allows tuple patterns as well.
5228
5229* Nested case expressions are now translated in a separate check phase
5230rather than during parsing. The data for case combinators is separated
5231from the datatype package. The declaration attribute
5232"case_translation" can be used to register new case combinators:
5233
5234  declare [[case_translation case_combinator constructor1 ... constructorN]]
5235
5236* Code generator:
5237  - 'code_printing' unifies 'code_const' / 'code_type' / 'code_class' /
5238    'code_instance'.
5239  - 'code_identifier' declares name hints for arbitrary identifiers in
5240    generated code, subsuming 'code_modulename'.
5241
5242See the isar-ref manual for syntax diagrams, and the HOL theories for
5243examples.
5244
5245* Attibute 'code': 'code' now declares concrete and abstract code
5246equations uniformly.  Use explicit 'code equation' and 'code abstract'
5247to distinguish both when desired.
5248
5249* Discontinued theories Code_Integer and Efficient_Nat by a more
5250fine-grain stack of theories Code_Target_Int, Code_Binary_Nat,
5251Code_Target_Nat and Code_Target_Numeral.  See the tutorial on code
5252generation for details.  INCOMPATIBILITY.
5253
5254* Numeric types are mapped by default to target language numerals:
5255natural (replaces former code_numeral) and integer (replaces former
5256code_int).  Conversions are available as integer_of_natural /
5257natural_of_integer / integer_of_nat / nat_of_integer (in HOL) and
5258Code_Numeral.integer_of_natural / Code_Numeral.natural_of_integer (in
5259ML).  INCOMPATIBILITY.
5260
5261* Function package: For mutually recursive functions f and g, separate
5262cases rules f.cases and g.cases are generated instead of unusable
5263f_g.cases which exposed internal sum types. Potential INCOMPATIBILITY,
5264in the case that the unusable rule was used nevertheless.
5265
5266* Function package: For each function f, new rules f.elims are
5267generated, which eliminate equalities of the form "f x = t".
5268
5269* New command 'fun_cases' derives ad-hoc elimination rules for
5270function equations as simplified instances of f.elims, analogous to
5271inductive_cases.  See ~~/src/HOL/ex/Fundefs.thy for some examples.
5272
5273* Lifting:
5274  - parametrized correspondence relations are now supported:
5275    + parametricity theorems for the raw term can be specified in
5276      the command lift_definition, which allow us to generate stronger
5277      transfer rules
5278    + setup_lifting generates stronger transfer rules if parametric
5279      correspondence relation can be generated
5280    + various new properties of the relator must be specified to support
5281      parametricity
5282    + parametricity theorem for the Quotient relation can be specified
5283  - setup_lifting generates domain rules for the Transfer package
5284  - stronger reflexivity prover of respectfulness theorems for type
5285    copies
5286  - ===> and --> are now local. The symbols can be introduced
5287    by interpreting the locale lifting_syntax (typically in an
5288    anonymous context)
5289  - Lifting/Transfer relevant parts of Library/Quotient_* are now in
5290    Main. Potential INCOMPATIBILITY
5291  - new commands for restoring and deleting Lifting/Transfer context:
5292    lifting_forget, lifting_update
5293  - the command print_quotmaps was renamed to print_quot_maps.
5294    INCOMPATIBILITY
5295
5296* Transfer:
5297  - better support for domains in Transfer: replace Domainp T
5298    by the actual invariant in a transferred goal
5299  - transfer rules can have as assumptions other transfer rules
5300  - Experimental support for transferring from the raw level to the
5301    abstract level: Transfer.transferred attribute
5302  - Attribute version of the transfer method: untransferred attribute
5303
5304* Reification and reflection:
5305  - Reification is now directly available in HOL-Main in structure
5306    "Reification".
5307  - Reflection now handles multiple lists with variables also.
5308  - The whole reflection stack has been decomposed into conversions.
5309INCOMPATIBILITY.
5310
5311* Revised devices for recursive definitions over finite sets:
5312  - Only one fundamental fold combinator on finite set remains:
5313    Finite_Set.fold :: ('a => 'b => 'b) => 'b => 'a set => 'b
5314    This is now identity on infinite sets.
5315  - Locales ("mini packages") for fundamental definitions with
5316    Finite_Set.fold: folding, folding_idem.
5317  - Locales comm_monoid_set, semilattice_order_set and
5318    semilattice_neutr_order_set for big operators on sets.
5319    See theory Big_Operators for canonical examples.
5320    Note that foundational constants comm_monoid_set.F and
5321    semilattice_set.F correspond to former combinators fold_image
5322    and fold1 respectively.  These are now gone.  You may use
5323    those foundational constants as substitutes, but it is
5324    preferable to interpret the above locales accordingly.
5325  - Dropped class ab_semigroup_idem_mult (special case of lattice,
5326    no longer needed in connection with Finite_Set.fold etc.)
5327  - Fact renames:
5328      card.union_inter ~> card_Un_Int [symmetric]
5329      card.union_disjoint ~> card_Un_disjoint
5330INCOMPATIBILITY.
5331
5332* Locale hierarchy for abstract orderings and (semi)lattices.
5333
5334* Complete_Partial_Order.admissible is defined outside the type class
5335ccpo, but with mandatory prefix ccpo. Admissibility theorems lose the
5336class predicate assumption or sort constraint when possible.
5337INCOMPATIBILITY.
5338
5339* Introduce type class "conditionally_complete_lattice": Like a
5340complete lattice but does not assume the existence of the top and
5341bottom elements.  Allows to generalize some lemmas about reals and
5342extended reals.  Removed SupInf and replaced it by the instantiation
5343of conditionally_complete_lattice for real. Renamed lemmas about
5344conditionally-complete lattice from Sup_... to cSup_... and from
5345Inf_...  to cInf_... to avoid hidding of similar complete lattice
5346lemmas.
5347
5348* Introduce type class linear_continuum as combination of
5349conditionally-complete lattices and inner dense linorders which have
5350more than one element.  INCOMPATIBILITY.
5351
5352* Introduced type classes order_top and order_bot. The old classes top
5353and bot only contain the syntax without assumptions.  INCOMPATIBILITY:
5354Rename bot -> order_bot, top -> order_top
5355
5356* Introduce type classes "no_top" and "no_bot" for orderings without
5357top and bottom elements.
5358
5359* Split dense_linorder into inner_dense_order and no_top, no_bot.
5360
5361* Complex_Main: Unify and move various concepts from
5362HOL-Multivariate_Analysis to HOL-Complex_Main.
5363
5364 - Introduce type class (lin)order_topology and
5365   linear_continuum_topology.  Allows to generalize theorems about
5366   limits and order.  Instances are reals and extended reals.
5367
5368 - continuous and continuos_on from Multivariate_Analysis:
5369   "continuous" is the continuity of a function at a filter.  "isCont"
5370   is now an abbrevitation: "isCont x f == continuous (at _) f".
5371
5372   Generalized continuity lemmas from isCont to continuous on an
5373   arbitrary filter.
5374
5375 - compact from Multivariate_Analysis. Use Bolzano's lemma to prove
5376   compactness of closed intervals on reals. Continuous functions
5377   attain infimum and supremum on compact sets. The inverse of a
5378   continuous function is continuous, when the function is continuous
5379   on a compact set.
5380
5381 - connected from Multivariate_Analysis. Use it to prove the
5382   intermediate value theorem. Show connectedness of intervals on
5383   linear_continuum_topology).
5384
5385 - first_countable_topology from Multivariate_Analysis. Is used to
5386   show equivalence of properties on the neighbourhood filter of x and
5387   on all sequences converging to x.
5388
5389 - FDERIV: Definition of has_derivative moved to Deriv.thy. Moved
5390   theorems from Library/FDERIV.thy to Deriv.thy and base the
5391   definition of DERIV on FDERIV. Add variants of DERIV and FDERIV
5392   which are restricted to sets, i.e. to represent derivatives from
5393   left or right.
5394
5395 - Removed the within-filter. It is replaced by the principal filter:
5396
5397     F within X = inf F (principal X)
5398
5399 - Introduce "at x within U" as a single constant, "at x" is now an
5400   abbreviation for "at x within UNIV"
5401
5402 - Introduce named theorem collections tendsto_intros,
5403   continuous_intros, continuous_on_intros and FDERIV_intros. Theorems
5404   in tendsto_intros (or FDERIV_intros) are also available as
5405   tendsto_eq_intros (or FDERIV_eq_intros) where the right-hand side
5406   is replaced by a congruence rule. This allows to apply them as
5407   intro rules and then proving equivalence by the simplifier.
5408
5409 - Restructured theories in HOL-Complex_Main:
5410
5411   + Moved RealDef and RComplete into Real
5412
5413   + Introduced Topological_Spaces and moved theorems about
5414     topological spaces, filters, limits and continuity to it
5415
5416   + Renamed RealVector to Real_Vector_Spaces
5417
5418   + Split Lim, SEQ, Series into Topological_Spaces,
5419     Real_Vector_Spaces, and Limits
5420
5421   + Moved Ln and Log to Transcendental
5422
5423   + Moved theorems about continuity from Deriv to Topological_Spaces
5424
5425 - Remove various auxiliary lemmas.
5426
5427INCOMPATIBILITY.
5428
5429* Nitpick:
5430  - Added option "spy".
5431  - Reduce incidence of "too high arity" errors.
5432
5433* Sledgehammer:
5434  - Renamed option:
5435      isar_shrink ~> isar_compress
5436    INCOMPATIBILITY.
5437  - Added options "isar_try0", "spy".
5438  - Better support for "isar_proofs".
5439  - MaSh has been fined-tuned and now runs as a local server.
5440
5441* Improved support for ad hoc overloading of constants (see also
5442isar-ref manual and ~~/src/HOL/ex/Adhoc_Overloading_Examples.thy).
5443
5444* Library/Polynomial.thy:
5445  - Use lifting for primitive definitions.
5446  - Explicit conversions from and to lists of coefficients, used for
5447    generated code.
5448  - Replaced recursion operator poly_rec by fold_coeffs.
5449  - Prefer pre-existing gcd operation for gcd.
5450  - Fact renames:
5451    poly_eq_iff ~> poly_eq_poly_eq_iff
5452    poly_ext ~> poly_eqI
5453    expand_poly_eq ~> poly_eq_iff
5454IMCOMPATIBILITY.
5455
5456* New Library/Simps_Case_Conv.thy: Provides commands simps_of_case and
5457case_of_simps to convert function definitions between a list of
5458equations with patterns on the lhs and a single equation with case
5459expressions on the rhs. See also Ex/Simps_Case_Conv_Examples.thy.
5460
5461* New Library/FSet.thy: type of finite sets defined as a subtype of
5462sets defined by Lifting/Transfer.
5463
5464* Discontinued theory src/HOL/Library/Eval_Witness.  INCOMPATIBILITY.
5465
5466* Consolidation of library theories on product orders:
5467
5468    Product_Lattice ~> Product_Order -- pointwise order on products
5469    Product_ord ~> Product_Lexorder -- lexicographic order on products
5470
5471INCOMPATIBILITY.
5472
5473* Imperative-HOL: The MREC combinator is considered legacy and no
5474longer included by default. INCOMPATIBILITY, use partial_function
5475instead, or import theory Legacy_Mrec as a fallback.
5476
5477* HOL-Algebra: Discontinued theories ~~/src/HOL/Algebra/abstract and
5478~~/src/HOL/Algebra/poly.  Existing theories should be based on
5479~~/src/HOL/Library/Polynomial instead.  The latter provides
5480integration with HOL's type classes for rings.  INCOMPATIBILITY.
5481
5482* HOL-BNF:
5483  - Various improvements to BNF-based (co)datatype package, including
5484    new commands "primrec_new", "primcorec", and
5485    "datatype_new_compat", as well as documentation. See
5486    "datatypes.pdf" for details.
5487  - New "coinduction" method to avoid some boilerplate (compared to
5488    coinduct).
5489  - Renamed keywords:
5490    data ~> datatype_new
5491    codata ~> codatatype
5492    bnf_def ~> bnf
5493  - Renamed many generated theorems, including
5494    discs ~> disc
5495    map_comp' ~> map_comp
5496    map_id' ~> map_id
5497    sels ~> sel
5498    set_map' ~> set_map
5499    sets ~> set
5500IMCOMPATIBILITY.
5501
5502
5503*** ML ***
5504
5505* Spec_Check is a Quickcheck tool for Isabelle/ML.  The ML function
5506"check_property" allows to check specifications of the form "ALL x y
5507z. prop x y z".  See also ~~/src/Tools/Spec_Check/ with its
5508Examples.thy in particular.
5509
5510* Improved printing of exception trace in Poly/ML 5.5.1, with regular
5511tracing output in the command transaction context instead of physical
5512stdout.  See also Toplevel.debug, Toplevel.debugging and
5513ML_Compiler.exn_trace.
5514
5515* ML type "theory" is now immutable, without any special treatment of
5516drafts or linear updates (which could lead to "stale theory" errors in
5517the past).  Discontinued obsolete operations like Theory.copy,
5518Theory.checkpoint, and the auxiliary type theory_ref.  Minor
5519INCOMPATIBILITY.
5520
5521* More uniform naming of goal functions for skipped proofs:
5522
5523    Skip_Proof.prove  ~>  Goal.prove_sorry
5524    Skip_Proof.prove_global  ~>  Goal.prove_sorry_global
5525
5526Minor INCOMPATIBILITY.
5527
5528* Simplifier tactics and tools use proper Proof.context instead of
5529historic type simpset.  Old-style declarations like addsimps,
5530addsimprocs etc. operate directly on Proof.context.  Raw type simpset
5531retains its use as snapshot of the main Simplifier context, using
5532simpset_of and put_simpset on Proof.context.  INCOMPATIBILITY -- port
5533old tools by making them depend on (ctxt : Proof.context) instead of
5534(ss : simpset), then turn (simpset_of ctxt) into ctxt.
5535
5536* Modifiers for classical wrappers (e.g. addWrapper, delWrapper)
5537operate on Proof.context instead of claset, for uniformity with addIs,
5538addEs, addDs etc. Note that claset_of and put_claset allow to manage
5539clasets separately from the context.
5540
5541* Discontinued obsolete ML antiquotations @{claset} and @{simpset}.
5542INCOMPATIBILITY, use @{context} instead.
5543
5544* Antiquotation @{theory_context A} is similar to @{theory A}, but
5545presents the result as initial Proof.context.
5546
5547
5548*** System ***
5549
5550* Discontinued obsolete isabelle usedir, mkdir, make -- superseded by
5551"isabelle build" in Isabelle2013.  INCOMPATIBILITY.
5552
5553* Discontinued obsolete isabelle-process options -f and -u (former
5554administrative aliases of option -e).  Minor INCOMPATIBILITY.
5555
5556* Discontinued obsolete isabelle print tool, and PRINT_COMMAND
5557settings variable.
5558
5559* Discontinued ISABELLE_DOC_FORMAT settings variable and historic
5560document formats: dvi.gz, ps, ps.gz -- the default document format is
5561always pdf.
5562
5563* Isabelle settings variable ISABELLE_BUILD_JAVA_OPTIONS allows to
5564specify global resources of the JVM process run by isabelle build.
5565
5566* Toplevel executable $ISABELLE_HOME/bin/isabelle_scala_script allows
5567to run Isabelle/Scala source files as standalone programs.
5568
5569* Improved "isabelle keywords" tool (for old-style ProofGeneral
5570keyword tables): use Isabelle/Scala operations, which inspect outer
5571syntax without requiring to build sessions first.
5572
5573* Sessions may be organized via 'chapter' specifications in the ROOT
5574file, which determines a two-level hierarchy of browser info.  The old
5575tree-like organization via implicit sub-session relation (with its
5576tendency towards erratic fluctuation of URLs) has been discontinued.
5577The default chapter is called "Unsorted".  Potential INCOMPATIBILITY
5578for HTML presentation of theories.
5579
5580
5581
5582New in Isabelle2013 (February 2013)
5583-----------------------------------
5584
5585*** General ***
5586
5587* Theorem status about oracles and unfinished/failed future proofs is
5588no longer printed by default, since it is incompatible with
5589incremental / parallel checking of the persistent document model.  ML
5590function Thm.peek_status may be used to inspect a snapshot of the
5591ongoing evaluation process.  Note that in batch mode --- notably
5592isabelle build --- the system ensures that future proofs of all
5593accessible theorems in the theory context are finished (as before).
5594
5595* Configuration option show_markup controls direct inlining of markup
5596into the printed representation of formal entities --- notably type
5597and sort constraints.  This enables Prover IDE users to retrieve that
5598information via tooltips in the output window, for example.
5599
5600* Command 'ML_file' evaluates ML text from a file directly within the
5601theory, without any predeclaration via 'uses' in the theory header.
5602
5603* Old command 'use' command and corresponding keyword 'uses' in the
5604theory header are legacy features and will be discontinued soon.
5605Tools that load their additional source files may imitate the
5606'ML_file' implementation, such that the system can take care of
5607dependencies properly.
5608
5609* Discontinued obsolete method fastsimp / tactic fast_simp_tac, which
5610is called fastforce / fast_force_tac already since Isabelle2011-1.
5611
5612* Updated and extended "isar-ref" and "implementation" manual, reduced
5613remaining material in old "ref" manual.
5614
5615* Improved support for auxiliary contexts that indicate block structure
5616for specifications.  Nesting of "context fixes ... context assumes ..."
5617and "class ... context ...".
5618
5619* Attribute "consumes" allows a negative value as well, which is
5620interpreted relatively to the total number of premises of the rule in
5621the target context.  This form of declaration is stable when exported
5622from a nested 'context' with additional assumptions.  It is the
5623preferred form for definitional packages, notably cases/rules produced
5624in HOL/inductive and HOL/function.
5625
5626* More informative error messages for Isar proof commands involving
5627lazy enumerations (method applications etc.).
5628
5629* Refined 'help' command to retrieve outer syntax commands according
5630to name patterns (with clickable results).
5631
5632
5633*** Prover IDE -- Isabelle/Scala/jEdit ***
5634
5635* Parallel terminal proofs ('by') are enabled by default, likewise
5636proofs that are built into packages like 'datatype', 'function'.  This
5637allows to "run ahead" checking the theory specifications on the
5638surface, while the prover is still crunching on internal
5639justifications.  Unfinished / cancelled proofs are restarted as
5640required to complete full proof checking eventually.
5641
5642* Improved output panel with tooltips, hyperlinks etc. based on the
5643same Rich_Text_Area as regular Isabelle/jEdit buffers.  Activation of
5644tooltips leads to some window that supports the same recursively,
5645which can lead to stacks of tooltips as the semantic document content
5646is explored.  ESCAPE closes the whole stack, individual windows may be
5647closed separately, or detached to become independent jEdit dockables.
5648
5649* Improved support for commands that produce graph output: the text
5650message contains a clickable area to open a new instance of the graph
5651browser on demand.
5652
5653* More robust incremental parsing of outer syntax (partial comments,
5654malformed symbols).  Changing the balance of open/close quotes and
5655comment delimiters works more conveniently with unfinished situations
5656that frequently occur in user interaction.
5657
5658* More efficient painting and improved reactivity when editing large
5659files.  More scalable management of formal document content.
5660
5661* Smarter handling of tracing messages: prover process pauses after
5662certain number of messages per command transaction, with some user
5663dialog to stop or continue.  This avoids swamping the front-end with
5664potentially infinite message streams.
5665
5666* More plugin options and preferences, based on Isabelle/Scala.  The
5667jEdit plugin option panel provides access to some Isabelle/Scala
5668options, including tuning parameters for editor reactivity and color
5669schemes.
5670
5671* Dockable window "Symbols" provides some editing support for Isabelle
5672symbols.
5673
5674* Dockable window "Monitor" shows ML runtime statistics.  Note that
5675continuous display of the chart slows down the system.
5676
5677* Improved editing support for control styles: subscript, superscript,
5678bold, reset of style -- operating on single symbols or text
5679selections.  Cf. keyboard shortcuts C+e DOWN/UP/RIGHT/LEFT.
5680
5681* Actions isabelle.increase-font-size and isabelle.decrease-font-size
5682adjust the main text area font size, and its derivatives for output,
5683tooltips etc.  Cf. keyboard shortcuts C-PLUS and C-MINUS, which often
5684need to be adapted to local keyboard layouts.
5685
5686* More reactive completion popup by default: use \t (TAB) instead of
5687\n (NEWLINE) to minimize intrusion into regular flow of editing.  See
5688also "Plugin Options / SideKick / General / Code Completion Options".
5689
5690* Implicit check and build dialog of the specified logic session
5691image.  For example, HOL, HOLCF, HOL-Nominal can be produced on
5692demand, without bundling big platform-dependent heap images in the
5693Isabelle distribution.
5694
5695* Uniform Java 7 platform on Linux, Mac OS X, Windows: recent updates
5696from Oracle provide better multi-platform experience.  This version is
5697now bundled exclusively with Isabelle.
5698
5699
5700*** Pure ***
5701
5702* Code generation for Haskell: restrict unqualified imports from
5703Haskell Prelude to a small set of fundamental operations.
5704
5705* Command 'export_code': relative file names are interpreted
5706relatively to master directory of current theory rather than the
5707rather arbitrary current working directory.  INCOMPATIBILITY.
5708
5709* Discontinued obsolete attribute "COMP".  Potential INCOMPATIBILITY,
5710use regular rule composition via "OF" / "THEN", or explicit proof
5711structure instead.  Note that Isabelle/ML provides a variety of
5712operators like COMP, INCR_COMP, COMP_INCR, which need to be applied
5713with some care where this is really required.
5714
5715* Command 'typ' supports an additional variant with explicit sort
5716constraint, to infer and check the most general type conforming to a
5717given sort.  Example (in HOL):
5718
5719  typ "_ * _ * bool * unit" :: finite
5720
5721* Command 'locale_deps' visualizes all locales and their relations as
5722a Hasse diagram.
5723
5724
5725*** HOL ***
5726
5727* Sledgehammer:
5728
5729  - Added MaSh relevance filter based on machine-learning; see the
5730    Sledgehammer manual for details.
5731  - Polished Isar proofs generated with "isar_proofs" option.
5732  - Rationalized type encodings ("type_enc" option).
5733  - Renamed "kill_provers" subcommand to "kill_all".
5734  - Renamed options:
5735      isar_proof ~> isar_proofs
5736      isar_shrink_factor ~> isar_shrink
5737      max_relevant ~> max_facts
5738      relevance_thresholds ~> fact_thresholds
5739
5740* Quickcheck: added an optimisation for equality premises.  It is
5741switched on by default, and can be switched off by setting the
5742configuration quickcheck_optimise_equality to false.
5743
5744* Quotient: only one quotient can be defined by quotient_type
5745INCOMPATIBILITY.
5746
5747* Lifting:
5748  - generation of an abstraction function equation in lift_definition
5749  - quot_del attribute
5750  - renamed no_abs_code -> no_code (INCOMPATIBILITY.)
5751
5752* Simproc "finite_Collect" rewrites set comprehensions into pointfree
5753expressions.
5754
5755* Preprocessing of the code generator rewrites set comprehensions into
5756pointfree expressions.
5757
5758* The SMT solver Z3 has now by default a restricted set of directly
5759supported features. For the full set of features (div/mod, nonlinear
5760arithmetic, datatypes/records) with potential proof reconstruction
5761failures, enable the configuration option "z3_with_extensions".  Minor
5762INCOMPATIBILITY.
5763
5764* Simplified 'typedef' specifications: historical options for implicit
5765set definition and alternative name have been discontinued.  The
5766former behavior of "typedef (open) t = A" is now the default, but
5767written just "typedef t = A".  INCOMPATIBILITY, need to adapt theories
5768accordingly.
5769
5770* Removed constant "chars"; prefer "Enum.enum" on type "char"
5771directly.  INCOMPATIBILITY.
5772
5773* Moved operation product, sublists and n_lists from theory Enum to
5774List.  INCOMPATIBILITY.
5775
5776* Theorem UN_o generalized to SUP_comp.  INCOMPATIBILITY.
5777
5778* Class "comm_monoid_diff" formalises properties of bounded
5779subtraction, with natural numbers and multisets as typical instances.
5780
5781* Added combinator "Option.these" with type "'a option set => 'a set".
5782
5783* Theory "Transitive_Closure": renamed lemmas
5784
5785  reflcl_tranclp -> reflclp_tranclp
5786  rtranclp_reflcl -> rtranclp_reflclp
5787
5788INCOMPATIBILITY.
5789
5790* Theory "Rings": renamed lemmas (in class semiring)
5791
5792  left_distrib ~> distrib_right
5793  right_distrib ~> distrib_left
5794
5795INCOMPATIBILITY.
5796
5797* Generalized the definition of limits:
5798
5799  - Introduced the predicate filterlim (LIM x F. f x :> G) which
5800    expresses that when the input values x converge to F then the
5801    output f x converges to G.
5802
5803  - Added filters for convergence to positive (at_top) and negative
5804    infinity (at_bot).
5805
5806  - Moved infinity in the norm (at_infinity) from
5807    Multivariate_Analysis to Complex_Main.
5808
5809  - Removed real_tendsto_inf, it is superseded by "LIM x F. f x :>
5810    at_top".
5811
5812INCOMPATIBILITY.
5813
5814* Theory "Library/Option_ord" provides instantiation of option type to
5815lattice type classes.
5816
5817* Theory "Library/Multiset": renamed
5818
5819    constant fold_mset ~> Multiset.fold
5820    fact fold_mset_commute ~> fold_mset_comm
5821
5822INCOMPATIBILITY.
5823
5824* Renamed theory Library/List_Prefix to Library/Sublist, with related
5825changes as follows.
5826
5827  - Renamed constants (and related lemmas)
5828
5829      prefix ~> prefixeq
5830      strict_prefix ~> prefix
5831
5832  - Replaced constant "postfix" by "suffixeq" with swapped argument
5833    order (i.e., "postfix xs ys" is now "suffixeq ys xs") and dropped
5834    old infix syntax "xs >>= ys"; use "suffixeq ys xs" instead.
5835    Renamed lemmas accordingly.
5836
5837  - Added constant "list_hembeq" for homeomorphic embedding on
5838    lists. Added abbreviation "sublisteq" for special case
5839    "list_hembeq (op =)".
5840
5841  - Theory Library/Sublist no longer provides "order" and "bot" type
5842    class instances for the prefix order (merely corresponding locale
5843    interpretations). The type class instances are now in theory
5844    Library/Prefix_Order.
5845
5846  - The sublist relation of theory Library/Sublist_Order is now based
5847    on "Sublist.sublisteq".  Renamed lemmas accordingly:
5848
5849      le_list_append_le_same_iff ~> Sublist.sublisteq_append_le_same_iff
5850      le_list_append_mono ~> Sublist.list_hembeq_append_mono
5851      le_list_below_empty ~> Sublist.list_hembeq_Nil, Sublist.list_hembeq_Nil2
5852      le_list_Cons_EX ~> Sublist.list_hembeq_ConsD
5853      le_list_drop_Cons2 ~> Sublist.sublisteq_Cons2'
5854      le_list_drop_Cons_neq ~> Sublist.sublisteq_Cons2_neq
5855      le_list_drop_Cons ~> Sublist.sublisteq_Cons'
5856      le_list_drop_many ~> Sublist.sublisteq_drop_many
5857      le_list_filter_left ~> Sublist.sublisteq_filter_left
5858      le_list_rev_drop_many ~> Sublist.sublisteq_rev_drop_many
5859      le_list_rev_take_iff ~> Sublist.sublisteq_append
5860      le_list_same_length ~> Sublist.sublisteq_same_length
5861      le_list_take_many_iff ~> Sublist.sublisteq_append'
5862      less_eq_list.drop ~> less_eq_list_drop
5863      less_eq_list.induct ~> less_eq_list_induct
5864      not_le_list_length ~> Sublist.not_sublisteq_length
5865
5866INCOMPATIBILITY.
5867
5868* New theory Library/Countable_Set.
5869
5870* Theory Library/Debug and Library/Parallel provide debugging and
5871parallel execution for code generated towards Isabelle/ML.
5872
5873* Theory Library/FuncSet: Extended support for Pi and extensional and
5874introduce the extensional dependent function space "PiE". Replaced
5875extensional_funcset by an abbreviation, and renamed lemmas from
5876extensional_funcset to PiE as follows:
5877
5878  extensional_empty  ~>  PiE_empty
5879  extensional_funcset_empty_domain  ~>  PiE_empty_domain
5880  extensional_funcset_empty_range  ~>  PiE_empty_range
5881  extensional_funcset_arb  ~>  PiE_arb
5882  extensional_funcset_mem  ~>  PiE_mem
5883  extensional_funcset_extend_domainI  ~>  PiE_fun_upd
5884  extensional_funcset_restrict_domain  ~>  fun_upd_in_PiE
5885  extensional_funcset_extend_domain_eq  ~>  PiE_insert_eq
5886  card_extensional_funcset  ~>  card_PiE
5887  finite_extensional_funcset  ~>  finite_PiE
5888
5889INCOMPATIBILITY.
5890
5891* Theory Library/FinFun: theory of almost everywhere constant
5892functions (supersedes the AFP entry "Code Generation for Functions as
5893Data").
5894
5895* Theory Library/Phantom: generic phantom type to make a type
5896parameter appear in a constant's type.  This alternative to adding
5897TYPE('a) as another parameter avoids unnecessary closures in generated
5898code.
5899
5900* Theory Library/RBT_Impl: efficient construction of red-black trees
5901from sorted associative lists. Merging two trees with rbt_union may
5902return a structurally different tree than before.  Potential
5903INCOMPATIBILITY.
5904
5905* Theory Library/IArray: immutable arrays with code generation.
5906
5907* Theory Library/Finite_Lattice: theory of finite lattices.
5908
5909* HOL/Multivariate_Analysis: replaced
5910
5911  "basis :: 'a::euclidean_space => nat => real"
5912  "\<Chi>\<Chi> :: (nat => real) => 'a::euclidean_space"
5913
5914on euclidean spaces by using the inner product "_ \<bullet> _" with
5915vectors from the Basis set: "\<Chi>\<Chi> i. f i" is superseded by
5916"SUM i : Basis. f i * r i".
5917
5918  With this change the following constants are also changed or removed:
5919
5920    DIM('a) :: nat  ~>  card (Basis :: 'a set)   (is an abbreviation)
5921    a $$ i  ~>  inner a i  (where i : Basis)
5922    cart_base i  removed
5923    \<pi>, \<pi>'  removed
5924
5925  Theorems about these constants where removed.
5926
5927  Renamed lemmas:
5928
5929    component_le_norm  ~>  Basis_le_norm
5930    euclidean_eq  ~>  euclidean_eq_iff
5931    differential_zero_maxmin_component  ~>  differential_zero_maxmin_cart
5932    euclidean_simps  ~>  inner_simps
5933    independent_basis  ~>  independent_Basis
5934    span_basis  ~>  span_Basis
5935    in_span_basis  ~>  in_span_Basis
5936    norm_bound_component_le  ~>  norm_boound_Basis_le
5937    norm_bound_component_lt  ~>  norm_boound_Basis_lt
5938    component_le_infnorm  ~>  Basis_le_infnorm
5939
5940INCOMPATIBILITY.
5941
5942* HOL/Probability:
5943
5944  - Added simproc "measurable" to automatically prove measurability.
5945
5946  - Added induction rules for sigma sets with disjoint union
5947    (sigma_sets_induct_disjoint) and for Borel-measurable functions
5948    (borel_measurable_induct).
5949
5950  - Added the Daniell-Kolmogorov theorem (the existence the limit of a
5951    projective family).
5952
5953* HOL/Cardinals: Theories of ordinals and cardinals (supersedes the
5954AFP entry "Ordinals_and_Cardinals").
5955
5956* HOL/BNF: New (co)datatype package based on bounded natural functors
5957with support for mixed, nested recursion and interesting non-free
5958datatypes.
5959
5960* HOL/Finite_Set and Relation: added new set and relation operations
5961expressed by Finite_Set.fold.
5962
5963* New theory HOL/Library/RBT_Set: implementation of sets by red-black
5964trees for the code generator.
5965
5966* HOL/Library/RBT and HOL/Library/Mapping have been converted to
5967Lifting/Transfer.
5968possible INCOMPATIBILITY.
5969
5970* HOL/Set: renamed Set.project -> Set.filter
5971INCOMPATIBILITY.
5972
5973
5974*** Document preparation ***
5975
5976* Dropped legacy antiquotations "term_style" and "thm_style", since
5977styles may be given as arguments to "term" and "thm" already.
5978Discontinued legacy styles "prem1" .. "prem19".
5979
5980* Default LaTeX rendering for \<euro> is now based on eurosym package,
5981instead of slightly exotic babel/greek.
5982
5983* Document variant NAME may use different LaTeX entry point
5984document/root_NAME.tex if that file exists, instead of the common
5985document/root.tex.
5986
5987* Simplified custom document/build script, instead of old-style
5988document/IsaMakefile.  Minor INCOMPATIBILITY.
5989
5990
5991*** ML ***
5992
5993* The default limit for maximum number of worker threads is now 8,
5994instead of 4, in correspondence to capabilities of contemporary
5995hardware and Poly/ML runtime system.
5996
5997* Type Seq.results and related operations support embedded error
5998messages within lazy enumerations, and thus allow to provide
5999informative errors in the absence of any usable results.
6000
6001* Renamed Position.str_of to Position.here to emphasize that this is a
6002formal device to inline positions into message text, but not
6003necessarily printing visible text.
6004
6005
6006*** System ***
6007
6008* Advanced support for Isabelle sessions and build management, see
6009"system" manual for the chapter of that name, especially the "isabelle
6010build" tool and its examples.  The "isabelle mkroot" tool prepares
6011session root directories for use with "isabelle build", similar to
6012former "isabelle mkdir" for "isabelle usedir".  Note that this affects
6013document preparation as well.  INCOMPATIBILITY, isabelle usedir /
6014mkdir / make are rendered obsolete.
6015
6016* Discontinued obsolete Isabelle/build script, it is superseded by the
6017regular isabelle build tool.  For example:
6018
6019  isabelle build -s -b HOL
6020
6021* Discontinued obsolete "isabelle makeall".
6022
6023* Discontinued obsolete IsaMakefile and ROOT.ML files from the
6024Isabelle distribution, except for rudimentary src/HOL/IsaMakefile that
6025provides some traditional targets that invoke "isabelle build".  Note
6026that this is inefficient!  Applications of Isabelle/HOL involving
6027"isabelle make" should be upgraded to use "isabelle build" directly.
6028
6029* The "isabelle options" tool prints Isabelle system options, as
6030required for "isabelle build", for example.
6031
6032* The "isabelle logo" tool produces EPS and PDF format simultaneously.
6033Minor INCOMPATIBILITY in command-line options.
6034
6035* The "isabelle install" tool has now a simpler command-line.  Minor
6036INCOMPATIBILITY.
6037
6038* The "isabelle components" tool helps to resolve add-on components
6039that are not bundled, or referenced from a bare-bones repository
6040version of Isabelle.
6041
6042* Settings variable ISABELLE_PLATFORM_FAMILY refers to the general
6043platform family: "linux", "macos", "windows".
6044
6045* The ML system is configured as regular component, and no longer
6046picked up from some surrounding directory.  Potential INCOMPATIBILITY
6047for home-made settings.
6048
6049* Improved ML runtime statistics (heap, threads, future tasks etc.).
6050
6051* Discontinued support for Poly/ML 5.2.1, which was the last version
6052without exception positions and advanced ML compiler/toplevel
6053configuration.
6054
6055* Discontinued special treatment of Proof General -- no longer guess
6056PROOFGENERAL_HOME based on accidental file-system layout.  Minor
6057INCOMPATIBILITY: provide PROOFGENERAL_HOME and PROOFGENERAL_OPTIONS
6058settings manually, or use a Proof General version that has been
6059bundled as Isabelle component.
6060
6061
6062
6063New in Isabelle2012 (May 2012)
6064------------------------------
6065
6066*** General ***
6067
6068* Prover IDE (PIDE) improvements:
6069
6070  - more robust Sledgehammer integration (as before the sledgehammer
6071    command-line needs to be typed into the source buffer)
6072  - markup for bound variables
6073  - markup for types of term variables (displayed as tooltips)
6074  - support for user-defined Isar commands within the running session
6075  - improved support for Unicode outside original 16bit range
6076    e.g. glyph for \<A> (thanks to jEdit 4.5.1)
6077
6078* Forward declaration of outer syntax keywords within the theory
6079header -- minor INCOMPATIBILITY for user-defined commands.  Allow new
6080commands to be used in the same theory where defined.
6081
6082* Auxiliary contexts indicate block structure for specifications with
6083additional parameters and assumptions.  Such unnamed contexts may be
6084nested within other targets, like 'theory', 'locale', 'class',
6085'instantiation' etc.  Results from the local context are generalized
6086accordingly and applied to the enclosing target context.  Example:
6087
6088  context
6089    fixes x y z :: 'a
6090    assumes xy: "x = y" and yz: "y = z"
6091  begin
6092
6093  lemma my_trans: "x = z" using xy yz by simp
6094
6095  end
6096
6097  thm my_trans
6098
6099The most basic application is to factor-out context elements of
6100several fixes/assumes/shows theorem statements, e.g. see
6101~~/src/HOL/Isar_Examples/Group_Context.thy
6102
6103Any other local theory specification element works within the "context
6104... begin ... end" block as well.
6105
6106* Bundled declarations associate attributed fact expressions with a
6107given name in the context.  These may be later included in other
6108contexts.  This allows to manage context extensions casually, without
6109the logical dependencies of locales and locale interpretation.  See
6110commands 'bundle', 'include', 'including' etc. in the isar-ref manual.
6111
6112* Commands 'lemmas' and 'theorems' allow local variables using 'for'
6113declaration, and results are standardized before being stored.  Thus
6114old-style "standard" after instantiation or composition of facts
6115becomes obsolete.  Minor INCOMPATIBILITY, due to potential change of
6116indices of schematic variables.
6117
6118* Rule attributes in local theory declarations (e.g. locale or class)
6119are now statically evaluated: the resulting theorem is stored instead
6120of the original expression.  INCOMPATIBILITY in rare situations, where
6121the historic accident of dynamic re-evaluation in interpretations
6122etc. was exploited.
6123
6124* New tutorial "Programming and Proving in Isabelle/HOL"
6125("prog-prove").  It completely supersedes "A Tutorial Introduction to
6126Structured Isar Proofs" ("isar-overview"), which has been removed.  It
6127also supersedes "Isabelle/HOL, A Proof Assistant for Higher-Order
6128Logic" as the recommended beginners tutorial, but does not cover all
6129of the material of that old tutorial.
6130
6131* Updated and extended reference manuals: "isar-ref",
6132"implementation", "system"; reduced remaining material in old "ref"
6133manual.
6134
6135
6136*** Pure ***
6137
6138* Command 'definition' no longer exports the foundational "raw_def"
6139into the user context.  Minor INCOMPATIBILITY, may use the regular
6140"def" result with attribute "abs_def" to imitate the old version.
6141
6142* Attribute "abs_def" turns an equation of the form "f x y == t" into
6143"f == %x y. t", which ensures that "simp" or "unfold" steps always
6144expand it.  This also works for object-logic equality.  (Formerly
6145undocumented feature.)
6146
6147* Sort constraints are now propagated in simultaneous statements, just
6148like type constraints.  INCOMPATIBILITY in rare situations, where
6149distinct sorts used to be assigned accidentally.  For example:
6150
6151  lemma "P (x::'a::foo)" and "Q (y::'a::bar)"  -- "now illegal"
6152
6153  lemma "P (x::'a)" and "Q (y::'a::bar)"
6154    -- "now uniform 'a::bar instead of default sort for first occurrence (!)"
6155
6156* Rule composition via attribute "OF" (or ML functions OF/MRS) is more
6157tolerant against multiple unifiers, as long as the final result is
6158unique.  (As before, rules are composed in canonical right-to-left
6159order to accommodate newly introduced premises.)
6160
6161* Renamed some inner syntax categories:
6162
6163    num ~> num_token
6164    xnum ~> xnum_token
6165    xstr ~> str_token
6166
6167Minor INCOMPATIBILITY.  Note that in practice "num_const" or
6168"num_position" etc. are mainly used instead (which also include
6169position information via constraints).
6170
6171* Simplified configuration options for syntax ambiguity: see
6172"syntax_ambiguity_warning" and "syntax_ambiguity_limit" in isar-ref
6173manual.  Minor INCOMPATIBILITY.
6174
6175* Discontinued configuration option "syntax_positions": atomic terms
6176in parse trees are always annotated by position constraints.
6177
6178* Old code generator for SML and its commands 'code_module',
6179'code_library', 'consts_code', 'types_code' have been discontinued.
6180Use commands of the generic code generator instead.  INCOMPATIBILITY.
6181
6182* Redundant attribute "code_inline" has been discontinued. Use
6183"code_unfold" instead.  INCOMPATIBILITY.
6184
6185* Dropped attribute "code_unfold_post" in favor of the its dual
6186"code_abbrev", which yields a common pattern in definitions like
6187
6188  definition [code_abbrev]: "f = t"
6189
6190INCOMPATIBILITY.
6191
6192* Obsolete 'types' command has been discontinued.  Use 'type_synonym'
6193instead.  INCOMPATIBILITY.
6194
6195* Discontinued old "prems" fact, which used to refer to the accidental
6196collection of foundational premises in the context (already marked as
6197legacy since Isabelle2011).
6198
6199
6200*** HOL ***
6201
6202* Type 'a set is now a proper type constructor (just as before
6203Isabelle2008).  Definitions mem_def and Collect_def have disappeared.
6204Non-trivial INCOMPATIBILITY.  For developments keeping predicates and
6205sets separate, it is often sufficient to rephrase some set S that has
6206been accidentally used as predicates by "%x. x : S", and some
6207predicate P that has been accidentally used as set by "{x. P x}".
6208Corresponding proofs in a first step should be pruned from any
6209tinkering with former theorems mem_def and Collect_def as far as
6210possible.
6211
6212For developments which deliberately mix predicates and sets, a
6213planning step is necessary to determine what should become a predicate
6214and what a set.  It can be helpful to carry out that step in
6215Isabelle2011-1 before jumping right into the current release.
6216
6217* Code generation by default implements sets as container type rather
6218than predicates.  INCOMPATIBILITY.
6219
6220* New type synonym 'a rel = ('a * 'a) set
6221
6222* The representation of numerals has changed.  Datatype "num"
6223represents strictly positive binary numerals, along with functions
6224"numeral :: num => 'a" and "neg_numeral :: num => 'a" to represent
6225positive and negated numeric literals, respectively.  See also
6226definitions in ~~/src/HOL/Num.thy.  Potential INCOMPATIBILITY, some
6227user theories may require adaptations as follows:
6228
6229  - Theorems with number_ring or number_semiring constraints: These
6230    classes are gone; use comm_ring_1 or comm_semiring_1 instead.
6231
6232  - Theories defining numeric types: Remove number, number_semiring,
6233    and number_ring instances. Defer all theorems about numerals until
6234    after classes one and semigroup_add have been instantiated.
6235
6236  - Numeral-only simp rules: Replace each rule having a "number_of v"
6237    pattern with two copies, one for numeral and one for neg_numeral.
6238
6239  - Theorems about subclasses of semiring_1 or ring_1: These classes
6240    automatically support numerals now, so more simp rules and
6241    simprocs may now apply within the proof.
6242
6243  - Definitions and theorems using old constructors Pls/Min/Bit0/Bit1:
6244    Redefine using other integer operations.
6245
6246* Transfer: New package intended to generalize the existing
6247"descending" method and related theorem attributes from the Quotient
6248package.  (Not all functionality is implemented yet, but future
6249development will focus on Transfer as an eventual replacement for the
6250corresponding parts of the Quotient package.)
6251
6252  - transfer_rule attribute: Maintains a collection of transfer rules,
6253    which relate constants at two different types. Transfer rules may
6254    relate different type instances of the same polymorphic constant,
6255    or they may relate an operation on a raw type to a corresponding
6256    operation on an abstract type (quotient or subtype). For example:
6257
6258    ((A ===> B) ===> list_all2 A ===> list_all2 B) map map
6259    (cr_int ===> cr_int ===> cr_int) (%(x,y) (u,v). (x+u, y+v)) plus_int
6260
6261  - transfer method: Replaces a subgoal on abstract types with an
6262    equivalent subgoal on the corresponding raw types. Constants are
6263    replaced with corresponding ones according to the transfer rules.
6264    Goals are generalized over all free variables by default; this is
6265    necessary for variables whose types change, but can be overridden
6266    for specific variables with e.g. "transfer fixing: x y z".  The
6267    variant transfer' method allows replacing a subgoal with one that
6268    is logically stronger (rather than equivalent).
6269
6270  - relator_eq attribute: Collects identity laws for relators of
6271    various type constructors, e.g. "list_all2 (op =) = (op =)".  The
6272    transfer method uses these lemmas to infer transfer rules for
6273    non-polymorphic constants on the fly.
6274
6275  - transfer_prover method: Assists with proving a transfer rule for a
6276    new constant, provided the constant is defined in terms of other
6277    constants that already have transfer rules. It should be applied
6278    after unfolding the constant definitions.
6279
6280  - HOL/ex/Transfer_Int_Nat.thy: Example theory demonstrating transfer
6281    from type nat to type int.
6282
6283* Lifting: New package intended to generalize the quotient_definition
6284facility of the Quotient package; designed to work with Transfer.
6285
6286  - lift_definition command: Defines operations on an abstract type in
6287    terms of a corresponding operation on a representation
6288    type.  Example syntax:
6289
6290    lift_definition dlist_insert :: "'a => 'a dlist => 'a dlist"
6291      is List.insert
6292
6293    Users must discharge a respectfulness proof obligation when each
6294    constant is defined. (For a type copy, i.e. a typedef with UNIV,
6295    the proof is discharged automatically.) The obligation is
6296    presented in a user-friendly, readable form; a respectfulness
6297    theorem in the standard format and a transfer rule are generated
6298    by the package.
6299
6300  - Integration with code_abstype: For typedefs (e.g. subtypes
6301    corresponding to a datatype invariant, such as dlist),
6302    lift_definition generates a code certificate theorem and sets up
6303    code generation for each constant.
6304
6305  - setup_lifting command: Sets up the Lifting package to work with a
6306    user-defined type. The user must provide either a quotient theorem
6307    or a type_definition theorem.  The package configures transfer
6308    rules for equality and quantifiers on the type, and sets up the
6309    lift_definition command to work with the type.
6310
6311  - Usage examples: See Quotient_Examples/Lift_DList.thy,
6312    Quotient_Examples/Lift_RBT.thy, Quotient_Examples/Lift_FSet.thy,
6313    Word/Word.thy and Library/Float.thy.
6314
6315* Quotient package:
6316
6317  - The 'quotient_type' command now supports a 'morphisms' option with
6318    rep and abs functions, similar to typedef.
6319
6320  - 'quotient_type' sets up new types to work with the Lifting and
6321    Transfer packages, as with 'setup_lifting'.
6322
6323  - The 'quotient_definition' command now requires the user to prove a
6324    respectfulness property at the point where the constant is
6325    defined, similar to lift_definition; INCOMPATIBILITY.
6326
6327  - Renamed predicate 'Quotient' to 'Quotient3', and renamed theorems
6328    accordingly, INCOMPATIBILITY.
6329
6330* New diagnostic command 'find_unused_assms' to find potentially
6331superfluous assumptions in theorems using Quickcheck.
6332
6333* Quickcheck:
6334
6335  - Quickcheck returns variable assignments as counterexamples, which
6336    allows to reveal the underspecification of functions under test.
6337    For example, refuting "hd xs = x", it presents the variable
6338    assignment xs = [] and x = a1 as a counterexample, assuming that
6339    any property is false whenever "hd []" occurs in it.
6340
6341    These counterexample are marked as potentially spurious, as
6342    Quickcheck also returns "xs = []" as a counterexample to the
6343    obvious theorem "hd xs = hd xs".
6344
6345    After finding a potentially spurious counterexample, Quickcheck
6346    continues searching for genuine ones.
6347
6348    By default, Quickcheck shows potentially spurious and genuine
6349    counterexamples. The option "genuine_only" sets quickcheck to only
6350    show genuine counterexamples.
6351
6352  - The command 'quickcheck_generator' creates random and exhaustive
6353    value generators for a given type and operations.
6354
6355    It generates values by using the operations as if they were
6356    constructors of that type.
6357
6358  - Support for multisets.
6359
6360  - Added "use_subtype" options.
6361
6362  - Added "quickcheck_locale" configuration to specify how to process
6363    conjectures in a locale context.
6364
6365* Nitpick: Fixed infinite loop caused by the 'peephole_optim' option
6366and affecting 'rat' and 'real'.
6367
6368* Sledgehammer:
6369  - Integrated more tightly with SPASS, as described in the ITP 2012
6370    paper "More SPASS with Isabelle".
6371  - Made it try "smt" as a fallback if "metis" fails or times out.
6372  - Added support for the following provers: Alt-Ergo (via Why3 and
6373    TFF1), iProver, iProver-Eq.
6374  - Sped up the minimizer.
6375  - Added "lam_trans", "uncurry_aliases", and "minimize" options.
6376  - Renamed "slicing" ("no_slicing") option to "slice" ("dont_slice").
6377  - Renamed "sound" option to "strict".
6378
6379* Metis: Added possibility to specify lambda translations scheme as a
6380parenthesized argument (e.g., "by (metis (lifting) ...)").
6381
6382* SMT: Renamed "smt_fixed" option to "smt_read_only_certificates".
6383
6384* Command 'try0': Renamed from 'try_methods'. INCOMPATIBILITY.
6385
6386* New "case_product" attribute to generate a case rule doing multiple
6387case distinctions at the same time.  E.g.
6388
6389  list.exhaust [case_product nat.exhaust]
6390
6391produces a rule which can be used to perform case distinction on both
6392a list and a nat.
6393
6394* New "eventually_elim" method as a generalized variant of the
6395eventually_elim* rules.  Supports structured proofs.
6396
6397* Typedef with implicit set definition is considered legacy.  Use
6398"typedef (open)" form instead, which will eventually become the
6399default.
6400
6401* Record: code generation can be switched off manually with
6402
6403  declare [[record_coden = false]]  -- "default true"
6404
6405* Datatype: type parameters allow explicit sort constraints.
6406
6407* Concrete syntax for case expressions includes constraints for source
6408positions, and thus produces Prover IDE markup for its bindings.
6409INCOMPATIBILITY for old-style syntax translations that augment the
6410pattern notation; e.g. see src/HOL/HOLCF/One.thy for translations of
6411one_case.
6412
6413* Clarified attribute "mono_set": pure declaration without modifying
6414the result of the fact expression.
6415
6416* More default pred/set conversions on a couple of relation operations
6417and predicates.  Added powers of predicate relations.  Consolidation
6418of some relation theorems:
6419
6420  converse_def ~> converse_unfold
6421  rel_comp_def ~> relcomp_unfold
6422  symp_def ~> (modified, use symp_def and sym_def instead)
6423  transp_def ~> transp_trans
6424  Domain_def ~> Domain_unfold
6425  Range_def ~> Domain_converse [symmetric]
6426
6427Generalized theorems INF_INT_eq, INF_INT_eq2, SUP_UN_eq, SUP_UN_eq2.
6428
6429See theory "Relation" for examples for making use of pred/set
6430conversions by means of attributes "to_set" and "to_pred".
6431
6432INCOMPATIBILITY.
6433
6434* Renamed facts about the power operation on relations, i.e., relpow
6435to match the constant's name:
6436
6437  rel_pow_1 ~> relpow_1
6438  rel_pow_0_I ~> relpow_0_I
6439  rel_pow_Suc_I ~> relpow_Suc_I
6440  rel_pow_Suc_I2 ~> relpow_Suc_I2
6441  rel_pow_0_E ~> relpow_0_E
6442  rel_pow_Suc_E ~> relpow_Suc_E
6443  rel_pow_E ~> relpow_E
6444  rel_pow_Suc_D2 ~> relpow_Suc_D2
6445  rel_pow_Suc_E2 ~> relpow_Suc_E2
6446  rel_pow_Suc_D2' ~> relpow_Suc_D2'
6447  rel_pow_E2 ~> relpow_E2
6448  rel_pow_add ~> relpow_add
6449  rel_pow_commute ~> relpow
6450  rel_pow_empty ~> relpow_empty:
6451  rtrancl_imp_UN_rel_pow ~> rtrancl_imp_UN_relpow
6452  rel_pow_imp_rtrancl ~> relpow_imp_rtrancl
6453  rtrancl_is_UN_rel_pow ~> rtrancl_is_UN_relpow
6454  rtrancl_imp_rel_pow ~> rtrancl_imp_relpow
6455  rel_pow_fun_conv ~> relpow_fun_conv
6456  rel_pow_finite_bounded1 ~> relpow_finite_bounded1
6457  rel_pow_finite_bounded ~> relpow_finite_bounded
6458  rtrancl_finite_eq_rel_pow ~> rtrancl_finite_eq_relpow
6459  trancl_finite_eq_rel_pow ~> trancl_finite_eq_relpow
6460  single_valued_rel_pow ~> single_valued_relpow
6461
6462INCOMPATIBILITY.
6463
6464* Theory Relation: Consolidated constant name for relation composition
6465and corresponding theorem names:
6466
6467  - Renamed constant rel_comp to relcomp.
6468
6469  - Dropped abbreviation pred_comp. Use relcompp instead.
6470
6471  - Renamed theorems:
6472
6473    rel_compI ~> relcompI
6474    rel_compEpair ~> relcompEpair
6475    rel_compE ~> relcompE
6476    pred_comp_rel_comp_eq ~> relcompp_relcomp_eq
6477    rel_comp_empty1 ~> relcomp_empty1
6478    rel_comp_mono ~> relcomp_mono
6479    rel_comp_subset_Sigma ~> relcomp_subset_Sigma
6480    rel_comp_distrib ~> relcomp_distrib
6481    rel_comp_distrib2 ~> relcomp_distrib2
6482    rel_comp_UNION_distrib ~> relcomp_UNION_distrib
6483    rel_comp_UNION_distrib2 ~> relcomp_UNION_distrib2
6484    single_valued_rel_comp ~> single_valued_relcomp
6485    rel_comp_def ~> relcomp_unfold
6486    converse_rel_comp ~> converse_relcomp
6487    pred_compI ~> relcomppI
6488    pred_compE ~> relcomppE
6489    pred_comp_bot1 ~> relcompp_bot1
6490    pred_comp_bot2 ~> relcompp_bot2
6491    transp_pred_comp_less_eq ~> transp_relcompp_less_eq
6492    pred_comp_mono ~> relcompp_mono
6493    pred_comp_distrib ~> relcompp_distrib
6494    pred_comp_distrib2 ~> relcompp_distrib2
6495    converse_pred_comp ~> converse_relcompp
6496
6497    finite_rel_comp ~> finite_relcomp
6498
6499    set_rel_comp ~> set_relcomp
6500
6501INCOMPATIBILITY.
6502
6503* Theory Divides: Discontinued redundant theorems about div and mod.
6504INCOMPATIBILITY, use the corresponding generic theorems instead.
6505
6506  DIVISION_BY_ZERO ~> div_by_0, mod_by_0
6507  zdiv_self ~> div_self
6508  zmod_self ~> mod_self
6509  zdiv_zero ~> div_0
6510  zmod_zero ~> mod_0
6511  zdiv_zmod_equality ~> div_mod_equality2
6512  zdiv_zmod_equality2 ~> div_mod_equality
6513  zmod_zdiv_trivial ~> mod_div_trivial
6514  zdiv_zminus_zminus ~> div_minus_minus
6515  zmod_zminus_zminus ~> mod_minus_minus
6516  zdiv_zminus2 ~> div_minus_right
6517  zmod_zminus2 ~> mod_minus_right
6518  zdiv_minus1_right ~> div_minus1_right
6519  zmod_minus1_right ~> mod_minus1_right
6520  zdvd_mult_div_cancel ~> dvd_mult_div_cancel
6521  zmod_zmult1_eq ~> mod_mult_right_eq
6522  zpower_zmod ~> power_mod
6523  zdvd_zmod ~> dvd_mod
6524  zdvd_zmod_imp_zdvd ~> dvd_mod_imp_dvd
6525  mod_mult_distrib ~> mult_mod_left
6526  mod_mult_distrib2 ~> mult_mod_right
6527
6528* Removed redundant theorems nat_mult_2 and nat_mult_2_right; use
6529generic mult_2 and mult_2_right instead. INCOMPATIBILITY.
6530
6531* Finite_Set.fold now qualified.  INCOMPATIBILITY.
6532
6533* Consolidated theorem names concerning fold combinators:
6534
6535  inf_INFI_fold_inf ~> inf_INF_fold_inf
6536  sup_SUPR_fold_sup ~> sup_SUP_fold_sup
6537  INFI_fold_inf ~> INF_fold_inf
6538  SUPR_fold_sup ~> SUP_fold_sup
6539  union_set ~> union_set_fold
6540  minus_set ~> minus_set_fold
6541  INFI_set_fold ~> INF_set_fold
6542  SUPR_set_fold ~> SUP_set_fold
6543  INF_code ~> INF_set_foldr
6544  SUP_code ~> SUP_set_foldr
6545  foldr.simps ~> foldr.simps (in point-free formulation)
6546  foldr_fold_rev ~> foldr_conv_fold
6547  foldl_fold ~> foldl_conv_fold
6548  foldr_foldr ~> foldr_conv_foldl
6549  foldl_foldr ~> foldl_conv_foldr
6550  fold_set_remdups ~> fold_set_fold_remdups
6551  fold_set ~> fold_set_fold
6552  fold1_set ~> fold1_set_fold
6553
6554INCOMPATIBILITY.
6555
6556* Dropped rarely useful theorems concerning fold combinators:
6557foldl_apply, foldl_fun_comm, foldl_rev, fold_weak_invariant,
6558rev_foldl_cons, fold_set_remdups, fold_set, fold_set1,
6559concat_conv_foldl, foldl_weak_invariant, foldl_invariant,
6560foldr_invariant, foldl_absorb0, foldl_foldr1_lemma, foldl_foldr1,
6561listsum_conv_fold, listsum_foldl, sort_foldl_insort, foldl_assoc,
6562foldr_conv_foldl, start_le_sum, elem_le_sum, sum_eq_0_conv.
6563INCOMPATIBILITY.  For the common phrases "%xs. List.foldr plus xs 0"
6564and "List.foldl plus 0", prefer "List.listsum".  Otherwise it can be
6565useful to boil down "List.foldr" and "List.foldl" to "List.fold" by
6566unfolding "foldr_conv_fold" and "foldl_conv_fold".
6567
6568* Dropped lemmas minus_set_foldr, union_set_foldr, union_coset_foldr,
6569inter_coset_foldr, Inf_fin_set_foldr, Sup_fin_set_foldr,
6570Min_fin_set_foldr, Max_fin_set_foldr, Inf_set_foldr, Sup_set_foldr,
6571INF_set_foldr, SUP_set_foldr.  INCOMPATIBILITY.  Prefer corresponding
6572lemmas over fold rather than foldr, or make use of lemmas
6573fold_conv_foldr and fold_rev.
6574
6575* Congruence rules Option.map_cong and Option.bind_cong for recursion
6576through option types.
6577
6578* "Transitive_Closure.ntrancl": bounded transitive closure on
6579relations.
6580
6581* Constant "Set.not_member" now qualified.  INCOMPATIBILITY.
6582
6583* Theory Int: Discontinued many legacy theorems specific to type int.
6584INCOMPATIBILITY, use the corresponding generic theorems instead.
6585
6586  zminus_zminus ~> minus_minus
6587  zminus_0 ~> minus_zero
6588  zminus_zadd_distrib ~> minus_add_distrib
6589  zadd_commute ~> add_commute
6590  zadd_assoc ~> add_assoc
6591  zadd_left_commute ~> add_left_commute
6592  zadd_ac ~> add_ac
6593  zmult_ac ~> mult_ac
6594  zadd_0 ~> add_0_left
6595  zadd_0_right ~> add_0_right
6596  zadd_zminus_inverse2 ~> left_minus
6597  zmult_zminus ~> mult_minus_left
6598  zmult_commute ~> mult_commute
6599  zmult_assoc ~> mult_assoc
6600  zadd_zmult_distrib ~> left_distrib
6601  zadd_zmult_distrib2 ~> right_distrib
6602  zdiff_zmult_distrib ~> left_diff_distrib
6603  zdiff_zmult_distrib2 ~> right_diff_distrib
6604  zmult_1 ~> mult_1_left
6605  zmult_1_right ~> mult_1_right
6606  zle_refl ~> order_refl
6607  zle_trans ~> order_trans
6608  zle_antisym ~> order_antisym
6609  zle_linear ~> linorder_linear
6610  zless_linear ~> linorder_less_linear
6611  zadd_left_mono ~> add_left_mono
6612  zadd_strict_right_mono ~> add_strict_right_mono
6613  zadd_zless_mono ~> add_less_le_mono
6614  int_0_less_1 ~> zero_less_one
6615  int_0_neq_1 ~> zero_neq_one
6616  zless_le ~> less_le
6617  zpower_zadd_distrib ~> power_add
6618  zero_less_zpower_abs_iff ~> zero_less_power_abs_iff
6619  zero_le_zpower_abs ~> zero_le_power_abs
6620
6621* Theory Deriv: Renamed
6622
6623  DERIV_nonneg_imp_nonincreasing ~> DERIV_nonneg_imp_nondecreasing
6624
6625* Theory Library/Multiset: Improved code generation of multisets.
6626
6627* Theory HOL/Library/Set_Algebras: Addition and multiplication on sets
6628are expressed via type classes again. The special syntax
6629\<oplus>/\<otimes> has been replaced by plain +/*. Removed constant
6630setsum_set, which is now subsumed by Big_Operators.setsum.
6631INCOMPATIBILITY.
6632
6633* Theory HOL/Library/Diagonalize has been removed. INCOMPATIBILITY,
6634use theory HOL/Library/Nat_Bijection instead.
6635
6636* Theory HOL/Library/RBT_Impl: Backing implementation of red-black
6637trees is now inside a type class context.  Names of affected
6638operations and lemmas have been prefixed by rbt_.  INCOMPATIBILITY for
6639theories working directly with raw red-black trees, adapt the names as
6640follows:
6641
6642  Operations:
6643  bulkload -> rbt_bulkload
6644  del_from_left -> rbt_del_from_left
6645  del_from_right -> rbt_del_from_right
6646  del -> rbt_del
6647  delete -> rbt_delete
6648  ins -> rbt_ins
6649  insert -> rbt_insert
6650  insertw -> rbt_insert_with
6651  insert_with_key -> rbt_insert_with_key
6652  map_entry -> rbt_map_entry
6653  lookup -> rbt_lookup
6654  sorted -> rbt_sorted
6655  tree_greater -> rbt_greater
6656  tree_less -> rbt_less
6657  tree_less_symbol -> rbt_less_symbol
6658  union -> rbt_union
6659  union_with -> rbt_union_with
6660  union_with_key -> rbt_union_with_key
6661
6662  Lemmas:
6663  balance_left_sorted -> balance_left_rbt_sorted
6664  balance_left_tree_greater -> balance_left_rbt_greater
6665  balance_left_tree_less -> balance_left_rbt_less
6666  balance_right_sorted -> balance_right_rbt_sorted
6667  balance_right_tree_greater -> balance_right_rbt_greater
6668  balance_right_tree_less -> balance_right_rbt_less
6669  balance_sorted -> balance_rbt_sorted
6670  balance_tree_greater -> balance_rbt_greater
6671  balance_tree_less -> balance_rbt_less
6672  bulkload_is_rbt -> rbt_bulkload_is_rbt
6673  combine_sorted -> combine_rbt_sorted
6674  combine_tree_greater -> combine_rbt_greater
6675  combine_tree_less -> combine_rbt_less
6676  delete_in_tree -> rbt_delete_in_tree
6677  delete_is_rbt -> rbt_delete_is_rbt
6678  del_from_left_tree_greater -> rbt_del_from_left_rbt_greater
6679  del_from_left_tree_less -> rbt_del_from_left_rbt_less
6680  del_from_right_tree_greater -> rbt_del_from_right_rbt_greater
6681  del_from_right_tree_less -> rbt_del_from_right_rbt_less
6682  del_in_tree -> rbt_del_in_tree
6683  del_inv1_inv2 -> rbt_del_inv1_inv2
6684  del_sorted -> rbt_del_rbt_sorted
6685  del_tree_greater -> rbt_del_rbt_greater
6686  del_tree_less -> rbt_del_rbt_less
6687  dom_lookup_Branch -> dom_rbt_lookup_Branch
6688  entries_lookup -> entries_rbt_lookup
6689  finite_dom_lookup -> finite_dom_rbt_lookup
6690  insert_sorted -> rbt_insert_rbt_sorted
6691  insertw_is_rbt -> rbt_insertw_is_rbt
6692  insertwk_is_rbt -> rbt_insertwk_is_rbt
6693  insertwk_sorted -> rbt_insertwk_rbt_sorted
6694  insertw_sorted -> rbt_insertw_rbt_sorted
6695  ins_sorted -> ins_rbt_sorted
6696  ins_tree_greater -> ins_rbt_greater
6697  ins_tree_less -> ins_rbt_less
6698  is_rbt_sorted -> is_rbt_rbt_sorted
6699  lookup_balance -> rbt_lookup_balance
6700  lookup_bulkload -> rbt_lookup_rbt_bulkload
6701  lookup_delete -> rbt_lookup_rbt_delete
6702  lookup_Empty -> rbt_lookup_Empty
6703  lookup_from_in_tree -> rbt_lookup_from_in_tree
6704  lookup_in_tree -> rbt_lookup_in_tree
6705  lookup_ins -> rbt_lookup_ins
6706  lookup_insert -> rbt_lookup_rbt_insert
6707  lookup_insertw -> rbt_lookup_rbt_insertw
6708  lookup_insertwk -> rbt_lookup_rbt_insertwk
6709  lookup_keys -> rbt_lookup_keys
6710  lookup_map -> rbt_lookup_map
6711  lookup_map_entry -> rbt_lookup_rbt_map_entry
6712  lookup_tree_greater -> rbt_lookup_rbt_greater
6713  lookup_tree_less -> rbt_lookup_rbt_less
6714  lookup_union -> rbt_lookup_rbt_union
6715  map_entry_color_of -> rbt_map_entry_color_of
6716  map_entry_inv1 -> rbt_map_entry_inv1
6717  map_entry_inv2 -> rbt_map_entry_inv2
6718  map_entry_is_rbt -> rbt_map_entry_is_rbt
6719  map_entry_sorted -> rbt_map_entry_rbt_sorted
6720  map_entry_tree_greater -> rbt_map_entry_rbt_greater
6721  map_entry_tree_less -> rbt_map_entry_rbt_less
6722  map_tree_greater -> map_rbt_greater
6723  map_tree_less -> map_rbt_less
6724  map_sorted -> map_rbt_sorted
6725  paint_sorted -> paint_rbt_sorted
6726  paint_lookup -> paint_rbt_lookup
6727  paint_tree_greater -> paint_rbt_greater
6728  paint_tree_less -> paint_rbt_less
6729  sorted_entries -> rbt_sorted_entries
6730  tree_greater_eq_trans -> rbt_greater_eq_trans
6731  tree_greater_nit -> rbt_greater_nit
6732  tree_greater_prop -> rbt_greater_prop
6733  tree_greater_simps -> rbt_greater_simps
6734  tree_greater_trans -> rbt_greater_trans
6735  tree_less_eq_trans -> rbt_less_eq_trans
6736  tree_less_nit -> rbt_less_nit
6737  tree_less_prop -> rbt_less_prop
6738  tree_less_simps -> rbt_less_simps
6739  tree_less_trans -> rbt_less_trans
6740  tree_ord_props -> rbt_ord_props
6741  union_Branch -> rbt_union_Branch
6742  union_is_rbt -> rbt_union_is_rbt
6743  unionw_is_rbt -> rbt_unionw_is_rbt
6744  unionwk_is_rbt -> rbt_unionwk_is_rbt
6745  unionwk_sorted -> rbt_unionwk_rbt_sorted
6746
6747* Theory HOL/Library/Float: Floating point numbers are now defined as
6748a subset of the real numbers.  All operations are defined using the
6749lifing-framework and proofs use the transfer method.  INCOMPATIBILITY.
6750
6751  Changed Operations:
6752  float_abs -> abs
6753  float_nprt -> nprt
6754  float_pprt -> pprt
6755  pow2 -> use powr
6756  round_down -> float_round_down
6757  round_up -> float_round_up
6758  scale -> exponent
6759
6760  Removed Operations:
6761  ceiling_fl, lb_mult, lb_mod, ub_mult, ub_mod
6762
6763  Renamed Lemmas:
6764  abs_float_def -> Float.compute_float_abs
6765  bitlen_ge0 -> bitlen_nonneg
6766  bitlen.simps -> Float.compute_bitlen
6767  float_components -> Float_mantissa_exponent
6768  float_divl.simps -> Float.compute_float_divl
6769  float_divr.simps -> Float.compute_float_divr
6770  float_eq_odd -> mult_powr_eq_mult_powr_iff
6771  float_power -> real_of_float_power
6772  lapprox_posrat_def -> Float.compute_lapprox_posrat
6773  lapprox_rat.simps -> Float.compute_lapprox_rat
6774  le_float_def' -> Float.compute_float_le
6775  le_float_def -> less_eq_float.rep_eq
6776  less_float_def' -> Float.compute_float_less
6777  less_float_def -> less_float.rep_eq
6778  normfloat_def -> Float.compute_normfloat
6779  normfloat_imp_odd_or_zero -> mantissa_not_dvd and mantissa_noteq_0
6780  normfloat -> normfloat_def
6781  normfloat_unique -> use normfloat_def
6782  number_of_float_Float -> Float.compute_float_numeral, Float.compute_float_neg_numeral
6783  one_float_def -> Float.compute_float_one
6784  plus_float_def -> Float.compute_float_plus
6785  rapprox_posrat_def -> Float.compute_rapprox_posrat
6786  rapprox_rat.simps -> Float.compute_rapprox_rat
6787  real_of_float_0 -> zero_float.rep_eq
6788  real_of_float_1 -> one_float.rep_eq
6789  real_of_float_abs -> abs_float.rep_eq
6790  real_of_float_add -> plus_float.rep_eq
6791  real_of_float_minus -> uminus_float.rep_eq
6792  real_of_float_mult -> times_float.rep_eq
6793  real_of_float_simp -> Float.rep_eq
6794  real_of_float_sub -> minus_float.rep_eq
6795  round_down.simps -> Float.compute_float_round_down
6796  round_up.simps -> Float.compute_float_round_up
6797  times_float_def -> Float.compute_float_times
6798  uminus_float_def -> Float.compute_float_uminus
6799  zero_float_def -> Float.compute_float_zero
6800
6801  Lemmas not necessary anymore, use the transfer method:
6802  bitlen_B0, bitlen_B1, bitlen_ge1, bitlen_Min, bitlen_Pls, float_divl,
6803  float_divr, float_le_simp, float_less1_mantissa_bound,
6804  float_less_simp, float_less_zero, float_le_zero,
6805  float_pos_less1_e_neg, float_pos_m_pos, float_split, float_split2,
6806  floor_pos_exp, lapprox_posrat, lapprox_posrat_bottom, lapprox_rat,
6807  lapprox_rat_bottom, normalized_float, rapprox_posrat,
6808  rapprox_posrat_le1, rapprox_rat, real_of_float_ge0_exp,
6809  real_of_float_neg_exp, real_of_float_nge0_exp, round_down floor_fl,
6810  round_up, zero_le_float, zero_less_float
6811
6812* New theory HOL/Library/DAList provides an abstract type for
6813association lists with distinct keys.
6814
6815* Session HOL/IMP: Added new theory of abstract interpretation of
6816annotated commands.
6817
6818* Session HOL-Import: Re-implementation from scratch is faster,
6819simpler, and more scalable.  Requires a proof bundle, which is
6820available as an external component.  Discontinued old (and mostly
6821dead) Importer for HOL4 and HOL Light.  INCOMPATIBILITY.
6822
6823* Session HOL-Word: Discontinued many redundant theorems specific to
6824type 'a word. INCOMPATIBILITY, use the corresponding generic theorems
6825instead.
6826
6827  word_sub_alt ~> word_sub_wi
6828  word_add_alt ~> word_add_def
6829  word_mult_alt ~> word_mult_def
6830  word_minus_alt ~> word_minus_def
6831  word_0_alt ~> word_0_wi
6832  word_1_alt ~> word_1_wi
6833  word_add_0 ~> add_0_left
6834  word_add_0_right ~> add_0_right
6835  word_mult_1 ~> mult_1_left
6836  word_mult_1_right ~> mult_1_right
6837  word_add_commute ~> add_commute
6838  word_add_assoc ~> add_assoc
6839  word_add_left_commute ~> add_left_commute
6840  word_mult_commute ~> mult_commute
6841  word_mult_assoc ~> mult_assoc
6842  word_mult_left_commute ~> mult_left_commute
6843  word_left_distrib ~> left_distrib
6844  word_right_distrib ~> right_distrib
6845  word_left_minus ~> left_minus
6846  word_diff_0_right ~> diff_0_right
6847  word_diff_self ~> diff_self
6848  word_sub_def ~> diff_minus
6849  word_diff_minus ~> diff_minus
6850  word_add_ac ~> add_ac
6851  word_mult_ac ~> mult_ac
6852  word_plus_ac0 ~> add_0_left add_0_right add_ac
6853  word_times_ac1 ~> mult_1_left mult_1_right mult_ac
6854  word_order_trans ~> order_trans
6855  word_order_refl ~> order_refl
6856  word_order_antisym ~> order_antisym
6857  word_order_linear ~> linorder_linear
6858  lenw1_zero_neq_one ~> zero_neq_one
6859  word_number_of_eq ~> number_of_eq
6860  word_of_int_add_hom ~> wi_hom_add
6861  word_of_int_sub_hom ~> wi_hom_sub
6862  word_of_int_mult_hom ~> wi_hom_mult
6863  word_of_int_minus_hom ~> wi_hom_neg
6864  word_of_int_succ_hom ~> wi_hom_succ
6865  word_of_int_pred_hom ~> wi_hom_pred
6866  word_of_int_0_hom ~> word_0_wi
6867  word_of_int_1_hom ~> word_1_wi
6868
6869* Session HOL-Word: New proof method "word_bitwise" for splitting
6870machine word equalities and inequalities into logical circuits,
6871defined in HOL/Word/WordBitwise.thy.  Supports addition, subtraction,
6872multiplication, shifting by constants, bitwise operators and numeric
6873constants.  Requires fixed-length word types, not 'a word.  Solves
6874many standard word identities outright and converts more into first
6875order problems amenable to blast or similar.  See also examples in
6876HOL/Word/Examples/WordExamples.thy.
6877
6878* Session HOL-Probability: Introduced the type "'a measure" to
6879represent measures, this replaces the records 'a algebra and 'a
6880measure_space.  The locales based on subset_class now have two
6881locale-parameters the space \<Omega> and the set of measurable sets M.
6882The product of probability spaces uses now the same constant as the
6883finite product of sigma-finite measure spaces "PiM :: ('i => 'a)
6884measure".  Most constants are defined now outside of locales and gain
6885an additional parameter, like null_sets, almost_eventually or \<mu>'.
6886Measure space constructions for distributions and densities now got
6887their own constants distr and density.  Instead of using locales to
6888describe measure spaces with a finite space, the measure count_space
6889and point_measure is introduced.  INCOMPATIBILITY.
6890
6891  Renamed constants:
6892  measure -> emeasure
6893  finite_measure.\<mu>' -> measure
6894  product_algebra_generator -> prod_algebra
6895  product_prob_space.emb -> prod_emb
6896  product_prob_space.infprod_algebra -> PiM
6897
6898  Removed locales:
6899  completeable_measure_space
6900  finite_measure_space
6901  finite_prob_space
6902  finite_product_finite_prob_space
6903  finite_product_sigma_algebra
6904  finite_sigma_algebra
6905  measure_space
6906  pair_finite_prob_space
6907  pair_finite_sigma_algebra
6908  pair_finite_space
6909  pair_sigma_algebra
6910  product_sigma_algebra
6911
6912  Removed constants:
6913  conditional_space
6914  distribution -> use distr measure, or distributed predicate
6915  image_space
6916  joint_distribution -> use distr measure, or distributed predicate
6917  pair_measure_generator
6918  product_prob_space.infprod_algebra -> use PiM
6919  subvimage
6920
6921  Replacement theorems:
6922  finite_additivity_sufficient -> ring_of_sets.countably_additiveI_finite
6923  finite_measure.empty_measure -> measure_empty
6924  finite_measure.finite_continuity_from_above -> finite_measure.finite_Lim_measure_decseq
6925  finite_measure.finite_continuity_from_below -> finite_measure.finite_Lim_measure_incseq
6926  finite_measure.finite_measure_countably_subadditive -> finite_measure.finite_measure_subadditive_countably
6927  finite_measure.finite_measure_eq -> finite_measure.emeasure_eq_measure
6928  finite_measure.finite_measure -> finite_measure.emeasure_finite
6929  finite_measure.finite_measure_finite_singleton -> finite_measure.finite_measure_eq_setsum_singleton
6930  finite_measure.positive_measure' -> measure_nonneg
6931  finite_measure.real_measure -> finite_measure.emeasure_real
6932  finite_product_prob_space.finite_measure_times -> finite_product_prob_space.finite_measure_PiM_emb
6933  finite_product_sigma_algebra.in_P -> sets_PiM_I_finite
6934  finite_product_sigma_algebra.P_empty -> space_PiM_empty, sets_PiM_empty
6935  information_space.conditional_entropy_eq -> information_space.conditional_entropy_simple_distributed
6936  information_space.conditional_entropy_positive -> information_space.conditional_entropy_nonneg_simple
6937  information_space.conditional_mutual_information_eq_mutual_information -> information_space.conditional_mutual_information_eq_mutual_information_simple
6938  information_space.conditional_mutual_information_generic_positive -> information_space.conditional_mutual_information_nonneg_simple
6939  information_space.conditional_mutual_information_positive -> information_space.conditional_mutual_information_nonneg_simple
6940  information_space.entropy_commute -> information_space.entropy_commute_simple
6941  information_space.entropy_eq -> information_space.entropy_simple_distributed
6942  information_space.entropy_generic_eq -> information_space.entropy_simple_distributed
6943  information_space.entropy_positive -> information_space.entropy_nonneg_simple
6944  information_space.entropy_uniform_max -> information_space.entropy_uniform
6945  information_space.KL_eq_0_imp -> information_space.KL_eq_0_iff_eq
6946  information_space.KL_eq_0 -> information_space.KL_same_eq_0
6947  information_space.KL_ge_0 -> information_space.KL_nonneg
6948  information_space.mutual_information_eq -> information_space.mutual_information_simple_distributed
6949  information_space.mutual_information_positive -> information_space.mutual_information_nonneg_simple
6950  Int_stable_cuboids -> Int_stable_atLeastAtMost
6951  Int_stable_product_algebra_generator -> positive_integral
6952  measure_preserving -> equality "distr M N f = N" "f : measurable M N"
6953  measure_space.additive -> emeasure_additive
6954  measure_space.AE_iff_null_set -> AE_iff_null
6955  measure_space.almost_everywhere_def -> eventually_ae_filter
6956  measure_space.almost_everywhere_vimage -> AE_distrD
6957  measure_space.continuity_from_above -> INF_emeasure_decseq
6958  measure_space.continuity_from_above_Lim -> Lim_emeasure_decseq
6959  measure_space.continuity_from_below_Lim -> Lim_emeasure_incseq
6960  measure_space.continuity_from_below -> SUP_emeasure_incseq
6961  measure_space_density -> emeasure_density
6962  measure_space.density_is_absolutely_continuous -> absolutely_continuousI_density
6963  measure_space.integrable_vimage -> integrable_distr
6964  measure_space.integral_translated_density -> integral_density
6965  measure_space.integral_vimage -> integral_distr
6966  measure_space.measure_additive -> plus_emeasure
6967  measure_space.measure_compl -> emeasure_compl
6968  measure_space.measure_countable_increasing -> emeasure_countable_increasing
6969  measure_space.measure_countably_subadditive -> emeasure_subadditive_countably
6970  measure_space.measure_decseq -> decseq_emeasure
6971  measure_space.measure_Diff -> emeasure_Diff
6972  measure_space.measure_Diff_null_set -> emeasure_Diff_null_set
6973  measure_space.measure_eq_0 -> emeasure_eq_0
6974  measure_space.measure_finitely_subadditive -> emeasure_subadditive_finite
6975  measure_space.measure_finite_singleton -> emeasure_eq_setsum_singleton
6976  measure_space.measure_incseq -> incseq_emeasure
6977  measure_space.measure_insert -> emeasure_insert
6978  measure_space.measure_mono -> emeasure_mono
6979  measure_space.measure_not_negative -> emeasure_not_MInf
6980  measure_space.measure_preserving_Int_stable -> measure_eqI_generator_eq
6981  measure_space.measure_setsum -> setsum_emeasure
6982  measure_space.measure_setsum_split -> setsum_emeasure_cover
6983  measure_space.measure_space_vimage -> emeasure_distr
6984  measure_space.measure_subadditive_finite -> emeasure_subadditive_finite
6985  measure_space.measure_subadditive -> subadditive
6986  measure_space.measure_top -> emeasure_space
6987  measure_space.measure_UN_eq_0 -> emeasure_UN_eq_0
6988  measure_space.measure_Un_null_set -> emeasure_Un_null_set
6989  measure_space.positive_integral_translated_density -> positive_integral_density
6990  measure_space.positive_integral_vimage -> positive_integral_distr
6991  measure_space.real_continuity_from_above -> Lim_measure_decseq
6992  measure_space.real_continuity_from_below -> Lim_measure_incseq
6993  measure_space.real_measure_countably_subadditive -> measure_subadditive_countably
6994  measure_space.real_measure_Diff -> measure_Diff
6995  measure_space.real_measure_finite_Union -> measure_finite_Union
6996  measure_space.real_measure_setsum_singleton -> measure_eq_setsum_singleton
6997  measure_space.real_measure_subadditive -> measure_subadditive
6998  measure_space.real_measure_Union -> measure_Union
6999  measure_space.real_measure_UNION -> measure_UNION
7000  measure_space.simple_function_vimage -> simple_function_comp
7001  measure_space.simple_integral_vimage -> simple_integral_distr
7002  measure_space.simple_integral_vimage -> simple_integral_distr
7003  measure_unique_Int_stable -> measure_eqI_generator_eq
7004  measure_unique_Int_stable_vimage -> measure_eqI_generator_eq
7005  pair_sigma_algebra.measurable_cut_fst -> sets_Pair1
7006  pair_sigma_algebra.measurable_cut_snd -> sets_Pair2
7007  pair_sigma_algebra.measurable_pair_image_fst -> measurable_Pair1
7008  pair_sigma_algebra.measurable_pair_image_snd -> measurable_Pair2
7009  pair_sigma_algebra.measurable_product_swap -> measurable_pair_swap_iff
7010  pair_sigma_algebra.pair_sigma_algebra_measurable -> measurable_pair_swap
7011  pair_sigma_algebra.pair_sigma_algebra_swap_measurable -> measurable_pair_swap'
7012  pair_sigma_algebra.sets_swap -> sets_pair_swap
7013  pair_sigma_finite.measure_cut_measurable_fst -> pair_sigma_finite.measurable_emeasure_Pair1
7014  pair_sigma_finite.measure_cut_measurable_snd -> pair_sigma_finite.measurable_emeasure_Pair2
7015  pair_sigma_finite.measure_preserving_swap -> pair_sigma_finite.distr_pair_swap
7016  pair_sigma_finite.pair_measure_alt2 -> pair_sigma_finite.emeasure_pair_measure_alt2
7017  pair_sigma_finite.pair_measure_alt -> pair_sigma_finite.emeasure_pair_measure_alt
7018  pair_sigma_finite.pair_measure_times -> pair_sigma_finite.emeasure_pair_measure_Times
7019  prob_space.indep_distribution_eq_measure -> prob_space.indep_vars_iff_distr_eq_PiM
7020  prob_space.indep_var_distributionD -> prob_space.indep_var_distribution_eq
7021  prob_space.measure_space_1 -> prob_space.emeasure_space_1
7022  prob_space.prob_space_vimage -> prob_space_distr
7023  prob_space.random_variable_restrict -> measurable_restrict
7024  prob_space_unique_Int_stable -> measure_eqI_prob_space
7025  product_algebraE -> prod_algebraE_all
7026  product_algebra_generator_der -> prod_algebra_eq_finite
7027  product_algebra_generator_into_space -> prod_algebra_sets_into_space
7028  product_algebraI -> sets_PiM_I_finite
7029  product_measure_exists -> product_sigma_finite.sigma_finite
7030  product_prob_space.finite_index_eq_finite_product -> product_prob_space.sets_PiM_generator
7031  product_prob_space.finite_measure_infprod_emb_Pi -> product_prob_space.measure_PiM_emb
7032  product_prob_space.infprod_spec -> product_prob_space.emeasure_PiM_emb_not_empty
7033  product_prob_space.measurable_component -> measurable_component_singleton
7034  product_prob_space.measurable_emb -> measurable_prod_emb
7035  product_prob_space.measurable_into_infprod_algebra -> measurable_PiM_single
7036  product_prob_space.measurable_singleton_infprod -> measurable_component_singleton
7037  product_prob_space.measure_emb -> emeasure_prod_emb
7038  product_prob_space.measure_preserving_restrict -> product_prob_space.distr_restrict
7039  product_sigma_algebra.product_algebra_into_space -> space_closed
7040  product_sigma_finite.measure_fold -> product_sigma_finite.distr_merge
7041  product_sigma_finite.measure_preserving_component_singelton -> product_sigma_finite.distr_singleton
7042  product_sigma_finite.measure_preserving_merge -> product_sigma_finite.distr_merge
7043  sequence_space.measure_infprod -> sequence_space.measure_PiM_countable
7044  sets_product_algebra -> sets_PiM
7045  sigma_algebra.measurable_sigma -> measurable_measure_of
7046  sigma_finite_measure.disjoint_sigma_finite -> sigma_finite_disjoint
7047  sigma_finite_measure.RN_deriv_vimage -> sigma_finite_measure.RN_deriv_distr
7048  sigma_product_algebra_sigma_eq -> sigma_prod_algebra_sigma_eq
7049  space_product_algebra -> space_PiM
7050
7051* Session HOL-TPTP: support to parse and import TPTP problems (all
7052languages) into Isabelle/HOL.
7053
7054
7055*** FOL ***
7056
7057* New "case_product" attribute (see HOL).
7058
7059
7060*** ZF ***
7061
7062* Greater support for structured proofs involving induction or case
7063analysis.
7064
7065* Much greater use of mathematical symbols.
7066
7067* Removal of many ML theorem bindings.  INCOMPATIBILITY.
7068
7069
7070*** ML ***
7071
7072* Antiquotation @{keyword "name"} produces a parser for outer syntax
7073from a minor keyword introduced via theory header declaration.
7074
7075* Antiquotation @{command_spec "name"} produces the
7076Outer_Syntax.command_spec from a major keyword introduced via theory
7077header declaration; it can be passed to Outer_Syntax.command etc.
7078
7079* Local_Theory.define no longer hard-wires default theorem name
7080"foo_def", but retains the binding as given.  If that is Binding.empty
7081/ Attrib.empty_binding, the result is not registered as user-level
7082fact.  The Local_Theory.define_internal variant allows to specify a
7083non-empty name (used for the foundation in the background theory),
7084while omitting the fact binding in the user-context.  Potential
7085INCOMPATIBILITY for derived definitional packages: need to specify
7086naming policy for primitive definitions more explicitly.
7087
7088* Renamed Thm.capply to Thm.apply, and Thm.cabs to Thm.lambda in
7089conformance with similar operations in structure Term and Logic.
7090
7091* Antiquotation @{attributes [...]} embeds attribute source
7092representation into the ML text, which is particularly useful with
7093declarations like Local_Theory.note.
7094
7095* Structure Proof_Context follows standard naming scheme.  Old
7096ProofContext has been discontinued.  INCOMPATIBILITY.
7097
7098* Refined Local_Theory.declaration {syntax, pervasive}, with subtle
7099change of semantics: update is applied to auxiliary local theory
7100context as well.
7101
7102* Modernized some old-style infix operations:
7103
7104  addeqcongs    ~> Simplifier.add_eqcong
7105  deleqcongs    ~> Simplifier.del_eqcong
7106  addcongs      ~> Simplifier.add_cong
7107  delcongs      ~> Simplifier.del_cong
7108  setmksimps    ~> Simplifier.set_mksimps
7109  setmkcong     ~> Simplifier.set_mkcong
7110  setmksym      ~> Simplifier.set_mksym
7111  setmkeqTrue   ~> Simplifier.set_mkeqTrue
7112  settermless   ~> Simplifier.set_termless
7113  setsubgoaler  ~> Simplifier.set_subgoaler
7114  addsplits     ~> Splitter.add_split
7115  delsplits     ~> Splitter.del_split
7116
7117
7118*** System ***
7119
7120* USER_HOME settings variable points to cross-platform user home
7121directory, which coincides with HOME on POSIX systems only.  Likewise,
7122the Isabelle path specification "~" now expands to $USER_HOME, instead
7123of former $HOME.  A different default for USER_HOME may be set
7124explicitly in shell environment, before Isabelle settings are
7125evaluated.  Minor INCOMPATIBILITY: need to adapt Isabelle path where
7126the generic user home was intended.
7127
7128* ISABELLE_HOME_WINDOWS refers to ISABELLE_HOME in windows file name
7129notation, which is useful for the jEdit file browser, for example.
7130
7131* ISABELLE_JDK_HOME settings variable points to JDK with javac and jar
7132(not just JRE).
7133
7134
7135
7136New in Isabelle2011-1 (October 2011)
7137------------------------------------
7138
7139*** General ***
7140
7141* Improved Isabelle/jEdit Prover IDE (PIDE), which can be invoked as
7142"isabelle jedit" or "ISABELLE_HOME/Isabelle" on the command line.
7143
7144  - Management of multiple theory files directly from the editor
7145    buffer store -- bypassing the file-system (no requirement to save
7146    files for checking).
7147
7148  - Markup of formal entities within the text buffer, with semantic
7149    highlighting, tooltips and hyperlinks to jump to defining source
7150    positions.
7151
7152  - Improved text rendering, with sub/superscripts in the source
7153    buffer (including support for copy/paste wrt. output panel, HTML
7154    theory output and other non-Isabelle text boxes).
7155
7156  - Refined scheduling of proof checking and printing of results,
7157    based on interactive editor view.  (Note: jEdit folding and
7158    narrowing allows to restrict buffer perspectives explicitly.)
7159
7160  - Reduced CPU performance requirements, usable on machines with few
7161    cores.
7162
7163  - Reduced memory requirements due to pruning of unused document
7164    versions (garbage collection).
7165
7166See also ~~/src/Tools/jEdit/README.html for further information,
7167including some remaining limitations.
7168
7169* Theory loader: source files are exclusively located via the master
7170directory of each theory node (where the .thy file itself resides).
7171The global load path (such as src/HOL/Library) has been discontinued.
7172Note that the path element ~~ may be used to reference theories in the
7173Isabelle home folder -- for instance, "~~/src/HOL/Library/FuncSet".
7174INCOMPATIBILITY.
7175
7176* Theory loader: source files are identified by content via SHA1
7177digests.  Discontinued former path/modtime identification and optional
7178ISABELLE_FILE_IDENT plugin scripts.
7179
7180* Parallelization of nested Isar proofs is subject to
7181Goal.parallel_proofs_threshold (default 100).  See also isabelle
7182usedir option -Q.
7183
7184* Name space: former unsynchronized references are now proper
7185configuration options, with more conventional names:
7186
7187  long_names   ~> names_long
7188  short_names  ~> names_short
7189  unique_names ~> names_unique
7190
7191Minor INCOMPATIBILITY, need to declare options in context like this:
7192
7193  declare [[names_unique = false]]
7194
7195* Literal facts `prop` may contain dummy patterns, e.g. `_ = _`.  Note
7196that the result needs to be unique, which means fact specifications
7197may have to be refined after enriching a proof context.
7198
7199* Attribute "case_names" has been refined: the assumptions in each case
7200can be named now by following the case name with [name1 name2 ...].
7201
7202* Isabelle/Isar reference manual has been updated and extended:
7203  - "Synopsis" provides a catalog of main Isar language concepts.
7204  - Formal references in syntax diagrams, via @{rail} antiquotation.
7205  - Updated material from classic "ref" manual, notably about
7206    "Classical Reasoner".
7207
7208
7209*** HOL ***
7210
7211* Class bot and top require underlying partial order rather than
7212preorder: uniqueness of bot and top is guaranteed.  INCOMPATIBILITY.
7213
7214* Class complete_lattice: generalized a couple of lemmas from sets;
7215generalized theorems INF_cong and SUP_cong.  New type classes for
7216complete boolean algebras and complete linear orders.  Lemmas
7217Inf_less_iff, less_Sup_iff, INF_less_iff, less_SUP_iff now reside in
7218class complete_linorder.
7219
7220Changed proposition of lemmas Inf_bool_def, Sup_bool_def, Inf_fun_def,
7221Sup_fun_def, Inf_apply, Sup_apply.
7222
7223Removed redundant lemmas (the right hand side gives hints how to
7224replace them for (metis ...), or (simp only: ...) proofs):
7225
7226  Inf_singleton ~> Inf_insert [where A="{}", unfolded Inf_empty inf_top_right]
7227  Sup_singleton ~> Sup_insert [where A="{}", unfolded Sup_empty sup_bot_right]
7228  Inf_binary ~> Inf_insert, Inf_empty, and inf_top_right
7229  Sup_binary ~> Sup_insert, Sup_empty, and sup_bot_right
7230  Int_eq_Inter ~> Inf_insert, Inf_empty, and inf_top_right
7231  Un_eq_Union ~> Sup_insert, Sup_empty, and sup_bot_right
7232  Inter_def ~> INF_def, image_def
7233  Union_def ~> SUP_def, image_def
7234  INT_eq ~> INF_def, and image_def
7235  UN_eq ~> SUP_def, and image_def
7236  INF_subset ~> INF_superset_mono [OF _ order_refl]
7237
7238More consistent and comprehensive names:
7239
7240  INTER_eq_Inter_image ~> INF_def
7241  UNION_eq_Union_image ~> SUP_def
7242  INFI_def ~> INF_def
7243  SUPR_def ~> SUP_def
7244  INF_leI ~> INF_lower
7245  INF_leI2 ~> INF_lower2
7246  le_INFI ~> INF_greatest
7247  le_SUPI ~> SUP_upper
7248  le_SUPI2 ~> SUP_upper2
7249  SUP_leI ~> SUP_least
7250  INFI_bool_eq ~> INF_bool_eq
7251  SUPR_bool_eq ~> SUP_bool_eq
7252  INFI_apply ~> INF_apply
7253  SUPR_apply ~> SUP_apply
7254  INTER_def ~> INTER_eq
7255  UNION_def ~> UNION_eq
7256
7257INCOMPATIBILITY.
7258
7259* Renamed theory Complete_Lattice to Complete_Lattices.
7260INCOMPATIBILITY.
7261
7262* Theory Complete_Lattices: lemmas Inf_eq_top_iff, INF_eq_top_iff,
7263INF_image, Inf_insert, INF_top, Inf_top_conv, INF_top_conv, SUP_bot,
7264Sup_bot_conv, SUP_bot_conv, Sup_eq_top_iff, SUP_eq_top_iff, SUP_image,
7265Sup_insert are now declared as [simp].  INCOMPATIBILITY.
7266
7267* Theory Lattice: lemmas compl_inf_bot, compl_le_comp_iff,
7268compl_sup_top, inf_idem, inf_left_idem, inf_sup_absorb, sup_idem,
7269sup_inf_absob, sup_left_idem are now declared as [simp].  Minor
7270INCOMPATIBILITY.
7271
7272* Added syntactic classes "inf" and "sup" for the respective
7273constants.  INCOMPATIBILITY: Changes in the argument order of the
7274(mostly internal) locale predicates for some derived classes.
7275
7276* Theorem collections ball_simps and bex_simps do not contain theorems
7277referring to UNION any longer; these have been moved to collection
7278UN_ball_bex_simps.  INCOMPATIBILITY.
7279
7280* Theory Archimedean_Field: floor now is defined as parameter of a
7281separate type class floor_ceiling.
7282
7283* Theory Finite_Set: more coherent development of fold_set locales:
7284
7285    locale fun_left_comm ~> locale comp_fun_commute
7286    locale fun_left_comm_idem ~> locale comp_fun_idem
7287
7288Both use point-free characterization; interpretation proofs may need
7289adjustment.  INCOMPATIBILITY.
7290
7291* Theory Limits: Type "'a net" has been renamed to "'a filter", in
7292accordance with standard mathematical terminology. INCOMPATIBILITY.
7293
7294* Theory Complex_Main: The locale interpretations for the
7295bounded_linear and bounded_bilinear locales have been removed, in
7296order to reduce the number of duplicate lemmas. Users must use the
7297original names for distributivity theorems, potential INCOMPATIBILITY.
7298
7299  divide.add ~> add_divide_distrib
7300  divide.diff ~> diff_divide_distrib
7301  divide.setsum ~> setsum_divide_distrib
7302  mult.add_right ~> right_distrib
7303  mult.diff_right ~> right_diff_distrib
7304  mult_right.setsum ~> setsum_right_distrib
7305  mult_left.diff ~> left_diff_distrib
7306
7307* Theory Complex_Main: Several redundant theorems have been removed or
7308replaced by more general versions. INCOMPATIBILITY.
7309
7310  real_diff_def ~> minus_real_def
7311  real_divide_def ~> divide_real_def
7312  real_less_def ~> less_le
7313  real_abs_def ~> abs_real_def
7314  real_sgn_def ~> sgn_real_def
7315  real_mult_commute ~> mult_commute
7316  real_mult_assoc ~> mult_assoc
7317  real_mult_1 ~> mult_1_left
7318  real_add_mult_distrib ~> left_distrib
7319  real_zero_not_eq_one ~> zero_neq_one
7320  real_mult_inverse_left ~> left_inverse
7321  INVERSE_ZERO ~> inverse_zero
7322  real_le_refl ~> order_refl
7323  real_le_antisym ~> order_antisym
7324  real_le_trans ~> order_trans
7325  real_le_linear ~> linear
7326  real_le_eq_diff ~> le_iff_diff_le_0
7327  real_add_left_mono ~> add_left_mono
7328  real_mult_order ~> mult_pos_pos
7329  real_mult_less_mono2 ~> mult_strict_left_mono
7330  real_of_int_real_of_nat ~> real_of_int_of_nat_eq
7331  real_0_le_divide_iff ~> zero_le_divide_iff
7332  realpow_two_disj ~> power2_eq_iff
7333  real_squared_diff_one_factored ~> square_diff_one_factored
7334  realpow_two_diff ~> square_diff_square_factored
7335  reals_complete2 ~> complete_real
7336  real_sum_squared_expand ~> power2_sum
7337  exp_ln_eq ~> ln_unique
7338  expi_add ~> exp_add
7339  expi_zero ~> exp_zero
7340  lemma_DERIV_subst ~> DERIV_cong
7341  LIMSEQ_Zfun_iff ~> tendsto_Zfun_iff
7342  LIMSEQ_const ~> tendsto_const
7343  LIMSEQ_norm ~> tendsto_norm
7344  LIMSEQ_add ~> tendsto_add
7345  LIMSEQ_minus ~> tendsto_minus
7346  LIMSEQ_minus_cancel ~> tendsto_minus_cancel
7347  LIMSEQ_diff ~> tendsto_diff
7348  bounded_linear.LIMSEQ ~> bounded_linear.tendsto
7349  bounded_bilinear.LIMSEQ ~> bounded_bilinear.tendsto
7350  LIMSEQ_mult ~> tendsto_mult
7351  LIMSEQ_inverse ~> tendsto_inverse
7352  LIMSEQ_divide ~> tendsto_divide
7353  LIMSEQ_pow ~> tendsto_power
7354  LIMSEQ_setsum ~> tendsto_setsum
7355  LIMSEQ_setprod ~> tendsto_setprod
7356  LIMSEQ_norm_zero ~> tendsto_norm_zero_iff
7357  LIMSEQ_rabs_zero ~> tendsto_rabs_zero_iff
7358  LIMSEQ_imp_rabs ~> tendsto_rabs
7359  LIMSEQ_add_minus ~> tendsto_add [OF _ tendsto_minus]
7360  LIMSEQ_add_const ~> tendsto_add [OF _ tendsto_const]
7361  LIMSEQ_diff_const ~> tendsto_diff [OF _ tendsto_const]
7362  LIMSEQ_Complex ~> tendsto_Complex
7363  LIM_ident ~> tendsto_ident_at
7364  LIM_const ~> tendsto_const
7365  LIM_add ~> tendsto_add
7366  LIM_add_zero ~> tendsto_add_zero
7367  LIM_minus ~> tendsto_minus
7368  LIM_diff ~> tendsto_diff
7369  LIM_norm ~> tendsto_norm
7370  LIM_norm_zero ~> tendsto_norm_zero
7371  LIM_norm_zero_cancel ~> tendsto_norm_zero_cancel
7372  LIM_norm_zero_iff ~> tendsto_norm_zero_iff
7373  LIM_rabs ~> tendsto_rabs
7374  LIM_rabs_zero ~> tendsto_rabs_zero
7375  LIM_rabs_zero_cancel ~> tendsto_rabs_zero_cancel
7376  LIM_rabs_zero_iff ~> tendsto_rabs_zero_iff
7377  LIM_compose ~> tendsto_compose
7378  LIM_mult ~> tendsto_mult
7379  LIM_scaleR ~> tendsto_scaleR
7380  LIM_of_real ~> tendsto_of_real
7381  LIM_power ~> tendsto_power
7382  LIM_inverse ~> tendsto_inverse
7383  LIM_sgn ~> tendsto_sgn
7384  isCont_LIM_compose ~> isCont_tendsto_compose
7385  bounded_linear.LIM ~> bounded_linear.tendsto
7386  bounded_linear.LIM_zero ~> bounded_linear.tendsto_zero
7387  bounded_bilinear.LIM ~> bounded_bilinear.tendsto
7388  bounded_bilinear.LIM_prod_zero ~> bounded_bilinear.tendsto_zero
7389  bounded_bilinear.LIM_left_zero ~> bounded_bilinear.tendsto_left_zero
7390  bounded_bilinear.LIM_right_zero ~> bounded_bilinear.tendsto_right_zero
7391  LIM_inverse_fun ~> tendsto_inverse [OF tendsto_ident_at]
7392
7393* Theory Complex_Main: The definition of infinite series was
7394generalized.  Now it is defined on the type class {topological_space,
7395comm_monoid_add}.  Hence it is useable also for extended real numbers.
7396
7397* Theory Complex_Main: The complex exponential function "expi" is now
7398a type-constrained abbreviation for "exp :: complex => complex"; thus
7399several polymorphic lemmas about "exp" are now applicable to "expi".
7400
7401* Code generation:
7402
7403  - Theory Library/Code_Char_ord provides native ordering of
7404    characters in the target language.
7405
7406  - Commands code_module and code_library are legacy, use export_code
7407    instead.
7408
7409  - Method "evaluation" is legacy, use method "eval" instead.
7410
7411  - Legacy evaluator "SML" is deactivated by default.  May be
7412    reactivated by the following theory command:
7413
7414      setup {* Value.add_evaluator ("SML", Codegen.eval_term) *}
7415
7416* Declare ext [intro] by default.  Rare INCOMPATIBILITY.
7417
7418* New proof method "induction" that gives induction hypotheses the
7419name "IH", thus distinguishing them from further hypotheses that come
7420from rule induction.  The latter are still called "hyps".  Method
7421"induction" is a thin wrapper around "induct" and follows the same
7422syntax.
7423
7424* Method "fastsimp" has been renamed to "fastforce", but "fastsimp" is
7425still available as a legacy feature for some time.
7426
7427* Nitpick:
7428  - Added "need" and "total_consts" options.
7429  - Reintroduced "show_skolems" option by popular demand.
7430  - Renamed attribute: nitpick_def ~> nitpick_unfold.
7431    INCOMPATIBILITY.
7432
7433* Sledgehammer:
7434  - Use quasi-sound (and efficient) translations by default.
7435  - Added support for the following provers: E-ToFoF, LEO-II,
7436    Satallax, SNARK, Waldmeister, and Z3 with TPTP syntax.
7437  - Automatically preplay and minimize proofs before showing them if
7438    this can be done within reasonable time.
7439  - sledgehammer available_provers ~> sledgehammer supported_provers.
7440    INCOMPATIBILITY.
7441  - Added "preplay_timeout", "slicing", "type_enc", "sound",
7442    "max_mono_iters", and "max_new_mono_instances" options.
7443  - Removed "explicit_apply" and "full_types" options as well as "Full
7444    Types" Proof General menu item. INCOMPATIBILITY.
7445
7446* Metis:
7447  - Removed "metisF" -- use "metis" instead. INCOMPATIBILITY.
7448  - Obsoleted "metisFT" -- use "metis (full_types)" instead.
7449    INCOMPATIBILITY.
7450
7451* Command 'try':
7452  - Renamed 'try_methods' and added "simp:", "intro:", "dest:", and
7453    "elim:" options. INCOMPATIBILITY.
7454  - Introduced 'try' that not only runs 'try_methods' but also
7455    'solve_direct', 'sledgehammer', 'quickcheck', and 'nitpick'.
7456
7457* Quickcheck:
7458  - Added "eval" option to evaluate terms for the found counterexample
7459    (currently only supported by the default (exhaustive) tester).
7460  - Added post-processing of terms to obtain readable counterexamples
7461    (currently only supported by the default (exhaustive) tester).
7462  - New counterexample generator quickcheck[narrowing] enables
7463    narrowing-based testing.  Requires the Glasgow Haskell compiler
7464    with its installation location defined in the Isabelle settings
7465    environment as ISABELLE_GHC.
7466  - Removed quickcheck tester "SML" based on the SML code generator
7467    (formly in HOL/Library).
7468
7469* Function package: discontinued option "tailrec".  INCOMPATIBILITY,
7470use 'partial_function' instead.
7471
7472* Theory Library/Extended_Reals replaces now the positive extended
7473reals found in probability theory. This file is extended by
7474Multivariate_Analysis/Extended_Real_Limits.
7475
7476* Theory Library/Old_Recdef: old 'recdef' package has been moved here,
7477from where it must be imported explicitly if it is really required.
7478INCOMPATIBILITY.
7479
7480* Theory Library/Wfrec: well-founded recursion combinator "wfrec" has
7481been moved here.  INCOMPATIBILITY.
7482
7483* Theory Library/Saturated provides type of numbers with saturated
7484arithmetic.
7485
7486* Theory Library/Product_Lattice defines a pointwise ordering for the
7487product type 'a * 'b, and provides instance proofs for various order
7488and lattice type classes.
7489
7490* Theory Library/Countable now provides the "countable_datatype" proof
7491method for proving "countable" class instances for datatypes.
7492
7493* Theory Library/Cset_Monad allows do notation for computable sets
7494(cset) via the generic monad ad-hoc overloading facility.
7495
7496* Library: Theories of common data structures are split into theories
7497for implementation, an invariant-ensuring type, and connection to an
7498abstract type. INCOMPATIBILITY.
7499
7500  - RBT is split into RBT and RBT_Mapping.
7501  - AssocList is split and renamed into AList and AList_Mapping.
7502  - DList is split into DList_Impl, DList, and DList_Cset.
7503  - Cset is split into Cset and List_Cset.
7504
7505* Theory Library/Nat_Infinity has been renamed to
7506Library/Extended_Nat, with name changes of the following types and
7507constants:
7508
7509  type inat   ~> type enat
7510  Fin         ~> enat
7511  Infty       ~> infinity (overloaded)
7512  iSuc        ~> eSuc
7513  the_Fin     ~> the_enat
7514
7515Every theorem name containing "inat", "Fin", "Infty", or "iSuc" has
7516been renamed accordingly. INCOMPATIBILITY.
7517
7518* Session Multivariate_Analysis: The euclidean_space type class now
7519fixes a constant "Basis :: 'a set" consisting of the standard
7520orthonormal basis for the type. Users now have the option of
7521quantifying over this set instead of using the "basis" function, e.g.
7522"ALL x:Basis. P x" vs "ALL i<DIM('a). P (basis i)".
7523
7524* Session Multivariate_Analysis: Type "('a, 'b) cart" has been renamed
7525to "('a, 'b) vec" (the syntax "'a ^ 'b" remains unaffected). Constants
7526"Cart_nth" and "Cart_lambda" have been respectively renamed to
7527"vec_nth" and "vec_lambda"; theorems mentioning those names have
7528changed to match. Definition theorems for overloaded constants now use
7529the standard "foo_vec_def" naming scheme. A few other theorems have
7530been renamed as follows (INCOMPATIBILITY):
7531
7532  Cart_eq          ~> vec_eq_iff
7533  dist_nth_le_cart ~> dist_vec_nth_le
7534  tendsto_vector   ~> vec_tendstoI
7535  Cauchy_vector    ~> vec_CauchyI
7536
7537* Session Multivariate_Analysis: Several duplicate theorems have been
7538removed, and other theorems have been renamed or replaced with more
7539general versions. INCOMPATIBILITY.
7540
7541  finite_choice ~> finite_set_choice
7542  eventually_conjI ~> eventually_conj
7543  eventually_and ~> eventually_conj_iff
7544  eventually_false ~> eventually_False
7545  setsum_norm ~> norm_setsum
7546  Lim_sequentially ~> LIMSEQ_def
7547  Lim_ident_at ~> LIM_ident
7548  Lim_const ~> tendsto_const
7549  Lim_cmul ~> tendsto_scaleR [OF tendsto_const]
7550  Lim_neg ~> tendsto_minus
7551  Lim_add ~> tendsto_add
7552  Lim_sub ~> tendsto_diff
7553  Lim_mul ~> tendsto_scaleR
7554  Lim_vmul ~> tendsto_scaleR [OF _ tendsto_const]
7555  Lim_null_norm ~> tendsto_norm_zero_iff [symmetric]
7556  Lim_linear ~> bounded_linear.tendsto
7557  Lim_component ~> tendsto_euclidean_component
7558  Lim_component_cart ~> tendsto_vec_nth
7559  Lim_inner ~> tendsto_inner [OF tendsto_const]
7560  dot_lsum ~> inner_setsum_left
7561  dot_rsum ~> inner_setsum_right
7562  continuous_cmul ~> continuous_scaleR [OF continuous_const]
7563  continuous_neg ~> continuous_minus
7564  continuous_sub ~> continuous_diff
7565  continuous_vmul ~> continuous_scaleR [OF _ continuous_const]
7566  continuous_mul ~> continuous_scaleR
7567  continuous_inv ~> continuous_inverse
7568  continuous_at_within_inv ~> continuous_at_within_inverse
7569  continuous_at_inv ~> continuous_at_inverse
7570  continuous_at_norm ~> continuous_norm [OF continuous_at_id]
7571  continuous_at_infnorm ~> continuous_infnorm [OF continuous_at_id]
7572  continuous_at_component ~> continuous_component [OF continuous_at_id]
7573  continuous_on_neg ~> continuous_on_minus
7574  continuous_on_sub ~> continuous_on_diff
7575  continuous_on_cmul ~> continuous_on_scaleR [OF continuous_on_const]
7576  continuous_on_vmul ~> continuous_on_scaleR [OF _ continuous_on_const]
7577  continuous_on_mul ~> continuous_on_scaleR
7578  continuous_on_mul_real ~> continuous_on_mult
7579  continuous_on_inner ~> continuous_on_inner [OF continuous_on_const]
7580  continuous_on_norm ~> continuous_on_norm [OF continuous_on_id]
7581  continuous_on_inverse ~> continuous_on_inv
7582  uniformly_continuous_on_neg ~> uniformly_continuous_on_minus
7583  uniformly_continuous_on_sub ~> uniformly_continuous_on_diff
7584  subset_interior ~> interior_mono
7585  subset_closure ~> closure_mono
7586  closure_univ ~> closure_UNIV
7587  real_arch_lt ~> reals_Archimedean2
7588  real_arch ~> reals_Archimedean3
7589  real_abs_norm ~> abs_norm_cancel
7590  real_abs_sub_norm ~> norm_triangle_ineq3
7591  norm_cauchy_schwarz_abs ~> Cauchy_Schwarz_ineq2
7592
7593* Session HOL-Probability:
7594  - Caratheodory's extension lemma is now proved for ring_of_sets.
7595  - Infinite products of probability measures are now available.
7596  - Sigma closure is independent, if the generator is independent
7597  - Use extended reals instead of positive extended
7598    reals. INCOMPATIBILITY.
7599
7600* Session HOLCF: Discontinued legacy theorem names, INCOMPATIBILITY.
7601
7602  expand_fun_below ~> fun_below_iff
7603  below_fun_ext ~> fun_belowI
7604  expand_cfun_eq ~> cfun_eq_iff
7605  ext_cfun ~> cfun_eqI
7606  expand_cfun_below ~> cfun_below_iff
7607  below_cfun_ext ~> cfun_belowI
7608  monofun_fun_fun ~> fun_belowD
7609  monofun_fun_arg ~> monofunE
7610  monofun_lub_fun ~> adm_monofun [THEN admD]
7611  cont_lub_fun ~> adm_cont [THEN admD]
7612  cont2cont_Rep_CFun ~> cont2cont_APP
7613  cont_Rep_CFun_app ~> cont_APP_app
7614  cont_Rep_CFun_app_app ~> cont_APP_app_app
7615  cont_cfun_fun ~> cont_Rep_cfun1 [THEN contE]
7616  cont_cfun_arg ~> cont_Rep_cfun2 [THEN contE]
7617  contlub_cfun ~> lub_APP [symmetric]
7618  contlub_LAM ~> lub_LAM [symmetric]
7619  thelubI ~> lub_eqI
7620  UU_I ~> bottomI
7621  lift_distinct1 ~> lift.distinct(1)
7622  lift_distinct2 ~> lift.distinct(2)
7623  Def_not_UU ~> lift.distinct(2)
7624  Def_inject ~> lift.inject
7625  below_UU_iff ~> below_bottom_iff
7626  eq_UU_iff ~> eq_bottom_iff
7627
7628
7629*** Document preparation ***
7630
7631* Antiquotation @{rail} layouts railroad syntax diagrams, see also
7632isar-ref manual, both for description and actual application of the
7633same.
7634
7635* Antiquotation @{value} evaluates the given term and presents its
7636result.
7637
7638* Antiquotations: term style "isub" provides ad-hoc conversion of
7639variables x1, y23 into subscripted form x\<^isub>1,
7640y\<^isub>2\<^isub>3.
7641
7642* Predefined LaTeX macros for Isabelle symbols \<bind> and \<then>
7643(e.g. see ~~/src/HOL/Library/Monad_Syntax.thy).
7644
7645* Localized \isabellestyle switch can be used within blocks or groups
7646like this:
7647
7648  \isabellestyle{it}  %preferred default
7649  {\isabellestylett @{text "typewriter stuff"}}
7650
7651* Discontinued special treatment of hard tabulators.  Implicit
7652tab-width is now defined as 1.  Potential INCOMPATIBILITY for visual
7653layouts.
7654
7655
7656*** ML ***
7657
7658* The inner syntax of sort/type/term/prop supports inlined YXML
7659representations within quoted string tokens.  By encoding logical
7660entities via Term_XML (in ML or Scala) concrete syntax can be
7661bypassed, which is particularly useful for producing bits of text
7662under external program control.
7663
7664* Antiquotations for ML and document preparation are managed as theory
7665data, which requires explicit setup.
7666
7667* Isabelle_Process.is_active allows tools to check if the official
7668process wrapper is running (Isabelle/Scala/jEdit) or the old TTY loop
7669(better known as Proof General).
7670
7671* Structure Proof_Context follows standard naming scheme.  Old
7672ProofContext is still available for some time as legacy alias.
7673
7674* Structure Timing provides various operations for timing; supersedes
7675former start_timing/end_timing etc.
7676
7677* Path.print is the official way to show file-system paths to users
7678(including quotes etc.).
7679
7680* Inner syntax: identifiers in parse trees of generic categories
7681"logic", "aprop", "idt" etc. carry position information (disguised as
7682type constraints).  Occasional INCOMPATIBILITY with non-compliant
7683translations that choke on unexpected type constraints.  Positions can
7684be stripped in ML translations via Syntax.strip_positions /
7685Syntax.strip_positions_ast, or via the syntax constant
7686"_strip_positions" within parse trees.  As last resort, positions can
7687be disabled via the configuration option Syntax.positions, which is
7688called "syntax_positions" in Isar attribute syntax.
7689
7690* Discontinued special status of various ML structures that contribute
7691to structure Syntax (Ast, Lexicon, Mixfix, Parser, Printer etc.): less
7692pervasive content, no inclusion in structure Syntax.  INCOMPATIBILITY,
7693refer directly to Ast.Constant, Lexicon.is_identifier,
7694Syntax_Trans.mk_binder_tr etc.
7695
7696* Typed print translation: discontinued show_sorts argument, which is
7697already available via context of "advanced" translation.
7698
7699* Refined PARALLEL_GOALS tactical: degrades gracefully for schematic
7700goal states; body tactic needs to address all subgoals uniformly.
7701
7702* Slightly more special eq_list/eq_set, with shortcut involving
7703pointer equality (assumes that eq relation is reflexive).
7704
7705* Classical tactics use proper Proof.context instead of historic types
7706claset/clasimpset.  Old-style declarations like addIs, addEs, addDs
7707operate directly on Proof.context.  Raw type claset retains its use as
7708snapshot of the classical context, which can be recovered via
7709(put_claset HOL_cs) etc.  Type clasimpset has been discontinued.
7710INCOMPATIBILITY, classical tactics and derived proof methods require
7711proper Proof.context.
7712
7713
7714*** System ***
7715
7716* Discontinued support for Poly/ML 5.2, which was the last version
7717without proper multithreading and TimeLimit implementation.
7718
7719* Discontinued old lib/scripts/polyml-platform, which has been
7720obsolete since Isabelle2009-2.
7721
7722* Various optional external tools are referenced more robustly and
7723uniformly by explicit Isabelle settings as follows:
7724
7725  ISABELLE_CSDP   (formerly CSDP_EXE)
7726  ISABELLE_GHC    (formerly EXEC_GHC or GHC_PATH)
7727  ISABELLE_OCAML  (formerly EXEC_OCAML)
7728  ISABELLE_SWIPL  (formerly EXEC_SWIPL)
7729  ISABELLE_YAP    (formerly EXEC_YAP)
7730
7731Note that automated detection from the file-system or search path has
7732been discontinued.  INCOMPATIBILITY.
7733
7734* Scala layer provides JVM method invocation service for static
7735methods of type (String)String, see Invoke_Scala.method in ML.  For
7736example:
7737
7738  Invoke_Scala.method "java.lang.System.getProperty" "java.home"
7739
7740Together with YXML.string_of_body/parse_body and XML.Encode/Decode
7741this allows to pass structured values between ML and Scala.
7742
7743* The IsabelleText fonts includes some further glyphs to support the
7744Prover IDE.  Potential INCOMPATIBILITY: users who happen to have
7745installed a local copy (which is normally *not* required) need to
7746delete or update it from ~~/lib/fonts/.
7747
7748
7749
7750New in Isabelle2011 (January 2011)
7751----------------------------------
7752
7753*** General ***
7754
7755* Experimental Prover IDE based on Isabelle/Scala and jEdit (see
7756src/Tools/jEdit).  This also serves as IDE for Isabelle/ML, with
7757useful tooltips and hyperlinks produced from its static analysis.  The
7758bundled component provides an executable Isabelle tool that can be run
7759like this:
7760
7761  Isabelle2011/bin/isabelle jedit
7762
7763* Significantly improved Isabelle/Isar implementation manual.
7764
7765* System settings: ISABELLE_HOME_USER now includes ISABELLE_IDENTIFIER
7766(and thus refers to something like $HOME/.isabelle/Isabelle2011),
7767while the default heap location within that directory lacks that extra
7768suffix.  This isolates multiple Isabelle installations from each
7769other, avoiding problems with old settings in new versions.
7770INCOMPATIBILITY, need to copy/upgrade old user settings manually.
7771
7772* Source files are always encoded as UTF-8, instead of old-fashioned
7773ISO-Latin-1.  INCOMPATIBILITY.  Isabelle LaTeX documents might require
7774the following package declarations:
7775
7776  \usepackage[utf8]{inputenc}
7777  \usepackage{textcomp}
7778
7779* Explicit treatment of UTF-8 sequences as Isabelle symbols, such that
7780a Unicode character is treated as a single symbol, not a sequence of
7781non-ASCII bytes as before.  Since Isabelle/ML string literals may
7782contain symbols without further backslash escapes, Unicode can now be
7783used here as well.  Recall that Symbol.explode in ML provides a
7784consistent view on symbols, while raw explode (or String.explode)
7785merely give a byte-oriented representation.
7786
7787* Theory loader: source files are primarily located via the master
7788directory of each theory node (where the .thy file itself resides).
7789The global load path is still partially available as legacy feature.
7790Minor INCOMPATIBILITY due to subtle change in file lookup: use
7791explicit paths, relatively to the theory.
7792
7793* Special treatment of ML file names has been discontinued.
7794Historically, optional extensions .ML or .sml were added on demand --
7795at the cost of clarity of file dependencies.  Recall that Isabelle/ML
7796files exclusively use the .ML extension.  Minor INCOMPATIBILITY.
7797
7798* Various options that affect pretty printing etc. are now properly
7799handled within the context via configuration options, instead of
7800unsynchronized references or print modes.  There are both ML Config.T
7801entities and Isar declaration attributes to access these.
7802
7803  ML (Config.T)                 Isar (attribute)
7804
7805  eta_contract                  eta_contract
7806  show_brackets                 show_brackets
7807  show_sorts                    show_sorts
7808  show_types                    show_types
7809  show_question_marks           show_question_marks
7810  show_consts                   show_consts
7811  show_abbrevs                  show_abbrevs
7812
7813  Syntax.ast_trace              syntax_ast_trace
7814  Syntax.ast_stat               syntax_ast_stat
7815  Syntax.ambiguity_level        syntax_ambiguity_level
7816
7817  Goal_Display.goals_limit      goals_limit
7818  Goal_Display.show_main_goal   show_main_goal
7819
7820  Method.rule_trace             rule_trace
7821
7822  Thy_Output.display            thy_output_display
7823  Thy_Output.quotes             thy_output_quotes
7824  Thy_Output.indent             thy_output_indent
7825  Thy_Output.source             thy_output_source
7826  Thy_Output.break              thy_output_break
7827
7828Note that corresponding "..._default" references in ML may only be
7829changed globally at the ROOT session setup, but *not* within a theory.
7830The option "show_abbrevs" supersedes the former print mode
7831"no_abbrevs" with inverted meaning.
7832
7833* More systematic naming of some configuration options.
7834INCOMPATIBILITY.
7835
7836  trace_simp  ~>  simp_trace
7837  debug_simp  ~>  simp_debug
7838
7839* Support for real valued configuration options, using simplistic
7840floating-point notation that coincides with the inner syntax for
7841float_token.
7842
7843* Support for real valued preferences (with approximative PGIP type):
7844front-ends need to accept "pgint" values in float notation.
7845INCOMPATIBILITY.
7846
7847* The IsabelleText font now includes Cyrillic, Hebrew, Arabic from
7848DejaVu Sans.
7849
7850* Discontinued support for Poly/ML 5.0 and 5.1 versions.
7851
7852
7853*** Pure ***
7854
7855* Command 'type_synonym' (with single argument) replaces somewhat
7856outdated 'types', which is still available as legacy feature for some
7857time.
7858
7859* Command 'nonterminal' (with 'and' separated list of arguments)
7860replaces somewhat outdated 'nonterminals'.  INCOMPATIBILITY.
7861
7862* Command 'notepad' replaces former 'example_proof' for
7863experimentation in Isar without any result.  INCOMPATIBILITY.
7864
7865* Locale interpretation commands 'interpret' and 'sublocale' accept
7866lists of equations to map definitions in a locale to appropriate
7867entities in the context of the interpretation.  The 'interpretation'
7868command already provided this functionality.
7869
7870* Diagnostic command 'print_dependencies' prints the locale instances
7871that would be activated if the specified expression was interpreted in
7872the current context.  Variant "print_dependencies!" assumes a context
7873without interpretations.
7874
7875* Diagnostic command 'print_interps' prints interpretations in proofs
7876in addition to interpretations in theories.
7877
7878* Discontinued obsolete 'global' and 'local' commands to manipulate
7879the theory name space.  Rare INCOMPATIBILITY.  The ML functions
7880Sign.root_path and Sign.local_path may be applied directly where this
7881feature is still required for historical reasons.
7882
7883* Discontinued obsolete 'constdefs' command.  INCOMPATIBILITY, use
7884'definition' instead.
7885
7886* The "prems" fact, which refers to the accidental collection of
7887foundational premises in the context, is now explicitly marked as
7888legacy feature and will be discontinued soon.  Consider using "assms"
7889of the head statement or reference facts by explicit names.
7890
7891* Document antiquotations @{class} and @{type} print classes and type
7892constructors.
7893
7894* Document antiquotation @{file} checks file/directory entries within
7895the local file system.
7896
7897
7898*** HOL ***
7899
7900* Coercive subtyping: functions can be declared as coercions and type
7901inference will add them as necessary upon input of a term.  Theory
7902Complex_Main declares real :: nat => real and real :: int => real as
7903coercions. A coercion function f is declared like this:
7904
7905  declare [[coercion f]]
7906
7907To lift coercions through type constructors (e.g. from nat => real to
7908nat list => real list), map functions can be declared, e.g.
7909
7910  declare [[coercion_map map]]
7911
7912Currently coercion inference is activated only in theories including
7913real numbers, i.e. descendants of Complex_Main.  This is controlled by
7914the configuration option "coercion_enabled", e.g. it can be enabled in
7915other theories like this:
7916
7917  declare [[coercion_enabled]]
7918
7919* Command 'partial_function' provides basic support for recursive
7920function definitions over complete partial orders.  Concrete instances
7921are provided for i) the option type, ii) tail recursion on arbitrary
7922types, and iii) the heap monad of Imperative_HOL.  See
7923src/HOL/ex/Fundefs.thy and src/HOL/Imperative_HOL/ex/Linked_Lists.thy
7924for examples.
7925
7926* Function package: f.psimps rules are no longer implicitly declared
7927as [simp].  INCOMPATIBILITY.
7928
7929* Datatype package: theorems generated for executable equality (class
7930"eq") carry proper names and are treated as default code equations.
7931
7932* Inductive package: now offers command 'inductive_simps' to
7933automatically derive instantiated and simplified equations for
7934inductive predicates, similar to 'inductive_cases'.
7935
7936* Command 'enriched_type' allows to register properties of the
7937functorial structure of types.
7938
7939* Improved infrastructure for term evaluation using code generator
7940techniques, in particular static evaluation conversions.
7941
7942* Code generator: Scala (2.8 or higher) has been added to the target
7943languages.
7944
7945* Code generator: globbing constant expressions "*" and "Theory.*"
7946have been replaced by the more idiomatic "_" and "Theory._".
7947INCOMPATIBILITY.
7948
7949* Code generator: export_code without explicit file declaration prints
7950to standard output.  INCOMPATIBILITY.
7951
7952* Code generator: do not print function definitions for case
7953combinators any longer.
7954
7955* Code generator: simplification with rules determined with
7956src/Tools/Code/code_simp.ML and method "code_simp".
7957
7958* Code generator for records: more idiomatic representation of record
7959types.  Warning: records are not covered by ancient SML code
7960generation any longer.  INCOMPATIBILITY.  In cases of need, a suitable
7961rep_datatype declaration helps to succeed then:
7962
7963  record 'a foo = ...
7964  ...
7965  rep_datatype foo_ext ...
7966
7967* Records: logical foundation type for records does not carry a
7968'_type' suffix any longer (obsolete due to authentic syntax).
7969INCOMPATIBILITY.
7970
7971* Quickcheck now by default uses exhaustive testing instead of random
7972testing.  Random testing can be invoked by "quickcheck [random]",
7973exhaustive testing by "quickcheck [exhaustive]".
7974
7975* Quickcheck instantiates polymorphic types with small finite
7976datatypes by default. This enables a simple execution mechanism to
7977handle quantifiers and function equality over the finite datatypes.
7978
7979* Quickcheck random generator has been renamed from "code" to
7980"random".  INCOMPATIBILITY.
7981
7982* Quickcheck now has a configurable time limit which is set to 30
7983seconds by default. This can be changed by adding [timeout = n] to the
7984quickcheck command. The time limit for Auto Quickcheck is still set
7985independently.
7986
7987* Quickcheck in locales considers interpretations of that locale for
7988counter example search.
7989
7990* Sledgehammer:
7991  - Added "smt" and "remote_smt" provers based on the "smt" proof
7992    method. See the Sledgehammer manual for details ("isabelle doc
7993    sledgehammer").
7994  - Renamed commands:
7995    sledgehammer atp_info ~> sledgehammer running_provers
7996    sledgehammer atp_kill ~> sledgehammer kill_provers
7997    sledgehammer available_atps ~> sledgehammer available_provers
7998    INCOMPATIBILITY.
7999  - Renamed options:
8000    sledgehammer [atps = ...] ~> sledgehammer [provers = ...]
8001    sledgehammer [atp = ...] ~> sledgehammer [prover = ...]
8002    sledgehammer [timeout = 77 s] ~> sledgehammer [timeout = 77]
8003    (and "ms" and "min" are no longer supported)
8004    INCOMPATIBILITY.
8005
8006* Nitpick:
8007  - Renamed options:
8008    nitpick [timeout = 77 s] ~> nitpick [timeout = 77]
8009    nitpick [tac_timeout = 777 ms] ~> nitpick [tac_timeout = 0.777]
8010    INCOMPATIBILITY.
8011  - Added support for partial quotient types.
8012  - Added local versions of the "Nitpick.register_xxx" functions.
8013  - Added "whack" option.
8014  - Allow registration of quotient types as codatatypes.
8015  - Improved "merge_type_vars" option to merge more types.
8016  - Removed unsound "fast_descrs" option.
8017  - Added custom symmetry breaking for datatypes, making it possible to reach
8018    higher cardinalities.
8019  - Prevent the expansion of too large definitions.
8020
8021* Proof methods "metis" and "meson" now have configuration options
8022"meson_trace", "metis_trace", and "metis_verbose" that can be enabled
8023to diagnose these tools. E.g.
8024
8025    using [[metis_trace = true]]
8026
8027* Auto Solve: Renamed "Auto Solve Direct".  The tool is now available
8028manually as command 'solve_direct'.
8029
8030* The default SMT solver Z3 must be enabled explicitly (due to
8031licensing issues) by setting the environment variable
8032Z3_NON_COMMERCIAL in etc/settings of the component, for example.  For
8033commercial applications, the SMT solver CVC3 is provided as fall-back;
8034changing the SMT solver is done via the configuration option
8035"smt_solver".
8036
8037* Remote SMT solvers need to be referred to by the "remote_" prefix,
8038i.e. "remote_cvc3" and "remote_z3".
8039
8040* Added basic SMT support for datatypes, records, and typedefs using
8041the oracle mode (no proofs).  Direct support of pairs has been dropped
8042in exchange (pass theorems fst_conv snd_conv pair_collapse to the SMT
8043support for a similar behavior).  Minor INCOMPATIBILITY.
8044
8045* Changed SMT configuration options:
8046  - Renamed:
8047    z3_proofs ~> smt_oracle (with inverted meaning)
8048    z3_trace_assms ~> smt_trace_used_facts
8049    INCOMPATIBILITY.
8050  - Added:
8051    smt_verbose
8052    smt_random_seed
8053    smt_datatypes
8054    smt_infer_triggers
8055    smt_monomorph_limit
8056    cvc3_options
8057    remote_cvc3_options
8058    remote_z3_options
8059    yices_options
8060
8061* Boogie output files (.b2i files) need to be declared in the theory
8062header.
8063
8064* Simplification procedure "list_to_set_comprehension" rewrites list
8065comprehensions applied to List.set to set comprehensions.  Occasional
8066INCOMPATIBILITY, may be deactivated like this:
8067
8068  declare [[simproc del: list_to_set_comprehension]]
8069
8070* Removed old version of primrec package.  INCOMPATIBILITY.
8071
8072* Removed simplifier congruence rule of "prod_case", as has for long
8073been the case with "split".  INCOMPATIBILITY.
8074
8075* String.literal is a type, but not a datatype.  INCOMPATIBILITY.
8076
8077* Removed [split_format ... and ... and ...] version of
8078[split_format].  Potential INCOMPATIBILITY.
8079
8080* Predicate "sorted" now defined inductively, with nice induction
8081rules.  INCOMPATIBILITY: former sorted.simps now named sorted_simps.
8082
8083* Constant "contents" renamed to "the_elem", to free the generic name
8084contents for other uses.  INCOMPATIBILITY.
8085
8086* Renamed class eq and constant eq (for code generation) to class
8087equal and constant equal, plus renaming of related facts and various
8088tuning.  INCOMPATIBILITY.
8089
8090* Dropped type classes mult_mono and mult_mono1.  INCOMPATIBILITY.
8091
8092* Removed output syntax "'a ~=> 'b" for "'a => 'b option".
8093INCOMPATIBILITY.
8094
8095* Renamed theory Fset to Cset, type Fset.fset to Cset.set, in order to
8096avoid confusion with finite sets.  INCOMPATIBILITY.
8097
8098* Abandoned locales equiv, congruent and congruent2 for equivalence
8099relations.  INCOMPATIBILITY: use equivI rather than equiv_intro (same
8100for congruent(2)).
8101
8102* Some previously unqualified names have been qualified:
8103
8104  types
8105    bool ~> HOL.bool
8106    nat ~> Nat.nat
8107
8108  constants
8109    Trueprop ~> HOL.Trueprop
8110    True ~> HOL.True
8111    False ~> HOL.False
8112    op & ~> HOL.conj
8113    op | ~> HOL.disj
8114    op --> ~> HOL.implies
8115    op = ~> HOL.eq
8116    Not ~> HOL.Not
8117    The ~> HOL.The
8118    All ~> HOL.All
8119    Ex ~> HOL.Ex
8120    Ex1 ~> HOL.Ex1
8121    Let ~> HOL.Let
8122    If ~> HOL.If
8123    Ball ~> Set.Ball
8124    Bex ~> Set.Bex
8125    Suc ~> Nat.Suc
8126    Pair ~> Product_Type.Pair
8127    fst ~> Product_Type.fst
8128    snd ~> Product_Type.snd
8129    curry ~> Product_Type.curry
8130    op : ~> Set.member
8131    Collect ~> Set.Collect
8132
8133INCOMPATIBILITY.
8134
8135* More canonical naming convention for some fundamental definitions:
8136
8137    bot_bool_eq ~> bot_bool_def
8138    top_bool_eq ~> top_bool_def
8139    inf_bool_eq ~> inf_bool_def
8140    sup_bool_eq ~> sup_bool_def
8141    bot_fun_eq  ~> bot_fun_def
8142    top_fun_eq  ~> top_fun_def
8143    inf_fun_eq  ~> inf_fun_def
8144    sup_fun_eq  ~> sup_fun_def
8145
8146INCOMPATIBILITY.
8147
8148* More stylized fact names:
8149
8150  expand_fun_eq ~> fun_eq_iff
8151  expand_set_eq ~> set_eq_iff
8152  set_ext       ~> set_eqI
8153  nat_number    ~> eval_nat_numeral
8154
8155INCOMPATIBILITY.
8156
8157* Refactoring of code-generation specific operations in theory List:
8158
8159  constants
8160    null ~> List.null
8161
8162  facts
8163    mem_iff ~> member_def
8164    null_empty ~> null_def
8165
8166INCOMPATIBILITY.  Note that these were not supposed to be used
8167regularly unless for striking reasons; their main purpose was code
8168generation.
8169
8170Various operations from the Haskell prelude are used for generating
8171Haskell code.
8172
8173* Term "bij f" is now an abbreviation of "bij_betw f UNIV UNIV".  Term
8174"surj f" is now an abbreviation of "range f = UNIV".  The theorems
8175bij_def and surj_def are unchanged.  INCOMPATIBILITY.
8176
8177* Abolished some non-alphabetic type names: "prod" and "sum" replace
8178"*" and "+" respectively.  INCOMPATIBILITY.
8179
8180* Name "Plus" of disjoint sum operator "<+>" is now hidden.  Write
8181"Sum_Type.Plus" instead.
8182
8183* Constant "split" has been merged with constant "prod_case"; names of
8184ML functions, facts etc. involving split have been retained so far,
8185though.  INCOMPATIBILITY.
8186
8187* Dropped old infix syntax "_ mem _" for List.member; use "_ : set _"
8188instead.  INCOMPATIBILITY.
8189
8190* Removed lemma "Option.is_none_none" which duplicates "is_none_def".
8191INCOMPATIBILITY.
8192
8193* Former theory Library/Enum is now part of the HOL-Main image.
8194INCOMPATIBILITY: all constants of the Enum theory now have to be
8195referred to by its qualified name.
8196
8197  enum    ~>  Enum.enum
8198  nlists  ~>  Enum.nlists
8199  product ~>  Enum.product
8200
8201* Theory Library/Monad_Syntax provides do-syntax for monad types.
8202Syntax in Library/State_Monad has been changed to avoid ambiguities.
8203INCOMPATIBILITY.
8204
8205* Theory Library/SetsAndFunctions has been split into
8206Library/Function_Algebras and Library/Set_Algebras; canonical names
8207for instance definitions for functions; various improvements.
8208INCOMPATIBILITY.
8209
8210* Theory Library/Multiset provides stable quicksort implementation of
8211sort_key.
8212
8213* Theory Library/Multiset: renamed empty_idemp ~> empty_neutral.
8214INCOMPATIBILITY.
8215
8216* Session Multivariate_Analysis: introduced a type class for euclidean
8217space.  Most theorems are now stated in terms of euclidean spaces
8218instead of finite cartesian products.
8219
8220  types
8221    real ^ 'n ~>  'a::real_vector
8222              ~>  'a::euclidean_space
8223              ~>  'a::ordered_euclidean_space
8224        (depends on your needs)
8225
8226  constants
8227     _ $ _        ~> _ $$ _
8228     \<chi> x. _  ~> \<chi>\<chi> x. _
8229     CARD('n)     ~> DIM('a)
8230
8231Also note that the indices are now natural numbers and not from some
8232finite type. Finite cartesian products of euclidean spaces, products
8233of euclidean spaces the real and complex numbers are instantiated to
8234be euclidean_spaces.  INCOMPATIBILITY.
8235
8236* Session Probability: introduced pextreal as positive extended real
8237numbers.  Use pextreal as value for measures.  Introduce the
8238Radon-Nikodym derivative, product spaces and Fubini's theorem for
8239arbitrary sigma finite measures.  Introduces Lebesgue measure based on
8240the integral in Multivariate Analysis.  INCOMPATIBILITY.
8241
8242* Session Imperative_HOL: revamped, corrected dozens of inadequacies.
8243INCOMPATIBILITY.
8244
8245* Session SPARK (with image HOL-SPARK) provides commands to load and
8246prove verification conditions generated by the SPARK Ada program
8247verifier.  See also src/HOL/SPARK and src/HOL/SPARK/Examples.
8248
8249
8250*** HOL-Algebra ***
8251
8252* Theorems for additive ring operations (locale abelian_monoid and
8253descendants) are generated by interpretation from their multiplicative
8254counterparts.  Names (in particular theorem names) have the mandatory
8255qualifier 'add'.  Previous theorem names are redeclared for
8256compatibility.
8257
8258* Structure "int_ring" is now an abbreviation (previously a
8259definition).  This fits more natural with advanced interpretations.
8260
8261
8262*** HOLCF ***
8263
8264* The domain package now runs in definitional mode by default: The
8265former command 'new_domain' is now called 'domain'.  To use the domain
8266package in its original axiomatic mode, use 'domain (unsafe)'.
8267INCOMPATIBILITY.
8268
8269* The new class "domain" is now the default sort.  Class "predomain"
8270is an unpointed version of "domain". Theories can be updated by
8271replacing sort annotations as shown below.  INCOMPATIBILITY.
8272
8273  'a::type ~> 'a::countable
8274  'a::cpo  ~> 'a::predomain
8275  'a::pcpo ~> 'a::domain
8276
8277* The old type class "rep" has been superseded by class "domain".
8278Accordingly, users of the definitional package must remove any
8279"default_sort rep" declarations.  INCOMPATIBILITY.
8280
8281* The domain package (definitional mode) now supports unpointed
8282predomain argument types, as long as they are marked 'lazy'. (Strict
8283arguments must be in class "domain".) For example, the following
8284domain definition now works:
8285
8286  domain natlist = nil | cons (lazy "nat discr") (lazy "natlist")
8287
8288* Theory HOLCF/Library/HOL_Cpo provides cpo and predomain class
8289instances for types from main HOL: bool, nat, int, char, 'a + 'b,
8290'a option, and 'a list.  Additionally, it configures fixrec and the
8291domain package to work with these types.  For example:
8292
8293  fixrec isInl :: "('a + 'b) u -> tr"
8294    where "isInl$(up$(Inl x)) = TT" | "isInl$(up$(Inr y)) = FF"
8295
8296  domain V = VFun (lazy "V -> V") | VCon (lazy "nat") (lazy "V list")
8297
8298* The "(permissive)" option of fixrec has been replaced with a
8299per-equation "(unchecked)" option. See
8300src/HOL/HOLCF/Tutorial/Fixrec_ex.thy for examples. INCOMPATIBILITY.
8301
8302* The "bifinite" class no longer fixes a constant "approx"; the class
8303now just asserts that such a function exists.  INCOMPATIBILITY.
8304
8305* Former type "alg_defl" has been renamed to "defl".  HOLCF no longer
8306defines an embedding of type 'a defl into udom by default; instances
8307of "bifinite" and "domain" classes are available in
8308src/HOL/HOLCF/Library/Defl_Bifinite.thy.
8309
8310* The syntax "REP('a)" has been replaced with "DEFL('a)".
8311
8312* The predicate "directed" has been removed.  INCOMPATIBILITY.
8313
8314* The type class "finite_po" has been removed.  INCOMPATIBILITY.
8315
8316* The function "cprod_map" has been renamed to "prod_map".
8317INCOMPATIBILITY.
8318
8319* The monadic bind operator on each powerdomain has new binder syntax
8320similar to sets, e.g. "\<Union>\<sharp>x\<in>xs. t" represents
8321"upper_bind\<cdot>xs\<cdot>(\<Lambda> x. t)".
8322
8323* The infix syntax for binary union on each powerdomain has changed
8324from e.g. "+\<sharp>" to "\<union>\<sharp>", for consistency with set
8325syntax.  INCOMPATIBILITY.
8326
8327* The constant "UU" has been renamed to "bottom".  The syntax "UU" is
8328still supported as an input translation.
8329
8330* Renamed some theorems (the original names are also still available).
8331
8332  expand_fun_below   ~> fun_below_iff
8333  below_fun_ext      ~> fun_belowI
8334  expand_cfun_eq     ~> cfun_eq_iff
8335  ext_cfun           ~> cfun_eqI
8336  expand_cfun_below  ~> cfun_below_iff
8337  below_cfun_ext     ~> cfun_belowI
8338  cont2cont_Rep_CFun ~> cont2cont_APP
8339
8340* The Abs and Rep functions for various types have changed names.
8341Related theorem names have also changed to match. INCOMPATIBILITY.
8342
8343  Rep_CFun  ~> Rep_cfun
8344  Abs_CFun  ~> Abs_cfun
8345  Rep_Sprod ~> Rep_sprod
8346  Abs_Sprod ~> Abs_sprod
8347  Rep_Ssum  ~> Rep_ssum
8348  Abs_Ssum  ~> Abs_ssum
8349
8350* Lemmas with names of the form *_defined_iff or *_strict_iff have
8351been renamed to *_bottom_iff.  INCOMPATIBILITY.
8352
8353* Various changes to bisimulation/coinduction with domain package:
8354
8355  - Definitions of "bisim" constants no longer mention definedness.
8356  - With mutual recursion, "bisim" predicate is now curried.
8357  - With mutual recursion, each type gets a separate coind theorem.
8358  - Variable names in bisim_def and coinduct rules have changed.
8359
8360INCOMPATIBILITY.
8361
8362* Case combinators generated by the domain package for type "foo" are
8363now named "foo_case" instead of "foo_when".  INCOMPATIBILITY.
8364
8365* Several theorems have been renamed to more accurately reflect the
8366names of constants and types involved.  INCOMPATIBILITY.
8367
8368  thelub_const    ~> lub_const
8369  lub_const       ~> is_lub_const
8370  thelubI         ~> lub_eqI
8371  is_lub_lub      ~> is_lubD2
8372  lubI            ~> is_lub_lub
8373  unique_lub      ~> is_lub_unique
8374  is_ub_lub       ~> is_lub_rangeD1
8375  lub_bin_chain   ~> is_lub_bin_chain
8376  lub_fun         ~> is_lub_fun
8377  thelub_fun      ~> lub_fun
8378  thelub_cfun     ~> lub_cfun
8379  thelub_Pair     ~> lub_Pair
8380  lub_cprod       ~> is_lub_prod
8381  thelub_cprod    ~> lub_prod
8382  minimal_cprod   ~> minimal_prod
8383  inst_cprod_pcpo ~> inst_prod_pcpo
8384  UU_I            ~> bottomI
8385  compact_UU      ~> compact_bottom
8386  deflation_UU    ~> deflation_bottom
8387  finite_deflation_UU ~> finite_deflation_bottom
8388
8389* Many legacy theorem names have been discontinued.  INCOMPATIBILITY.
8390
8391  sq_ord_less_eq_trans ~> below_eq_trans
8392  sq_ord_eq_less_trans ~> eq_below_trans
8393  refl_less            ~> below_refl
8394  trans_less           ~> below_trans
8395  antisym_less         ~> below_antisym
8396  antisym_less_inverse ~> po_eq_conv [THEN iffD1]
8397  box_less             ~> box_below
8398  rev_trans_less       ~> rev_below_trans
8399  not_less2not_eq      ~> not_below2not_eq
8400  less_UU_iff          ~> below_UU_iff
8401  flat_less_iff        ~> flat_below_iff
8402  adm_less             ~> adm_below
8403  adm_not_less         ~> adm_not_below
8404  adm_compact_not_less ~> adm_compact_not_below
8405  less_fun_def         ~> below_fun_def
8406  expand_fun_less      ~> fun_below_iff
8407  less_fun_ext         ~> fun_belowI
8408  less_discr_def       ~> below_discr_def
8409  discr_less_eq        ~> discr_below_eq
8410  less_unit_def        ~> below_unit_def
8411  less_cprod_def       ~> below_prod_def
8412  prod_lessI           ~> prod_belowI
8413  Pair_less_iff        ~> Pair_below_iff
8414  fst_less_iff         ~> fst_below_iff
8415  snd_less_iff         ~> snd_below_iff
8416  expand_cfun_less     ~> cfun_below_iff
8417  less_cfun_ext        ~> cfun_belowI
8418  injection_less       ~> injection_below
8419  less_up_def          ~> below_up_def
8420  not_Iup_less         ~> not_Iup_below
8421  Iup_less             ~> Iup_below
8422  up_less              ~> up_below
8423  Def_inject_less_eq   ~> Def_below_Def
8424  Def_less_is_eq       ~> Def_below_iff
8425  spair_less_iff       ~> spair_below_iff
8426  less_sprod           ~> below_sprod
8427  spair_less           ~> spair_below
8428  sfst_less_iff        ~> sfst_below_iff
8429  ssnd_less_iff        ~> ssnd_below_iff
8430  fix_least_less       ~> fix_least_below
8431  dist_less_one        ~> dist_below_one
8432  less_ONE             ~> below_ONE
8433  ONE_less_iff         ~> ONE_below_iff
8434  less_sinlD           ~> below_sinlD
8435  less_sinrD           ~> below_sinrD
8436
8437
8438*** FOL and ZF ***
8439
8440* All constant names are now qualified internally and use proper
8441identifiers, e.g. "IFOL.eq" instead of "op =".  INCOMPATIBILITY.
8442
8443
8444*** ML ***
8445
8446* Antiquotation @{assert} inlines a function bool -> unit that raises
8447Fail if the argument is false.  Due to inlining the source position of
8448failed assertions is included in the error output.
8449
8450* Discontinued antiquotation @{theory_ref}, which is obsolete since ML
8451text is in practice always evaluated with a stable theory checkpoint.
8452Minor INCOMPATIBILITY, use (Theory.check_thy @{theory}) instead.
8453
8454* Antiquotation @{theory A} refers to theory A from the ancestry of
8455the current context, not any accidental theory loader state as before.
8456Potential INCOMPATIBILITY, subtle change in semantics.
8457
8458* Syntax.pretty_priority (default 0) configures the required priority
8459of pretty-printed output and thus affects insertion of parentheses.
8460
8461* Syntax.default_root (default "any") configures the inner syntax
8462category (nonterminal symbol) for parsing of terms.
8463
8464* Former exception Library.UnequalLengths now coincides with
8465ListPair.UnequalLengths.
8466
8467* Renamed structure MetaSimplifier to Raw_Simplifier.  Note that the
8468main functionality is provided by structure Simplifier.
8469
8470* Renamed raw "explode" function to "raw_explode" to emphasize its
8471meaning.  Note that internally to Isabelle, Symbol.explode is used in
8472almost all situations.
8473
8474* Discontinued obsolete function sys_error and exception SYS_ERROR.
8475See implementation manual for further details on exceptions in
8476Isabelle/ML.
8477
8478* Renamed setmp_noncritical to Unsynchronized.setmp to emphasize its
8479meaning.
8480
8481* Renamed structure PureThy to Pure_Thy and moved most of its
8482operations to structure Global_Theory, to emphasize that this is
8483rarely-used global-only stuff.
8484
8485* Discontinued Output.debug.  Minor INCOMPATIBILITY, use plain writeln
8486instead (or tracing for high-volume output).
8487
8488* Configuration option show_question_marks only affects regular pretty
8489printing of types and terms, not raw Term.string_of_vname.
8490
8491* ML_Context.thm and ML_Context.thms are no longer pervasive.  Rare
8492INCOMPATIBILITY, superseded by static antiquotations @{thm} and
8493@{thms} for most purposes.
8494
8495* ML structure Unsynchronized is never opened, not even in Isar
8496interaction mode as before.  Old Unsynchronized.set etc. have been
8497discontinued -- use plain := instead.  This should be *rare* anyway,
8498since modern tools always work via official context data, notably
8499configuration options.
8500
8501* Parallel and asynchronous execution requires special care concerning
8502interrupts.  Structure Exn provides some convenience functions that
8503avoid working directly with raw Interrupt.  User code must not absorb
8504interrupts -- intermediate handling (for cleanup etc.) needs to be
8505followed by re-raising of the original exception.  Another common
8506source of mistakes are "handle _" patterns, which make the meaning of
8507the program subject to physical effects of the environment.
8508
8509
8510
8511New in Isabelle2009-2 (June 2010)
8512---------------------------------
8513
8514*** General ***
8515
8516* Authentic syntax for *all* logical entities (type classes, type
8517constructors, term constants): provides simple and robust
8518correspondence between formal entities and concrete syntax.  Within
8519the parse tree / AST representations, "constants" are decorated by
8520their category (class, type, const) and spelled out explicitly with
8521their full internal name.
8522
8523Substantial INCOMPATIBILITY concerning low-level syntax declarations
8524and translations (translation rules and translation functions in ML).
8525Some hints on upgrading:
8526
8527  - Many existing uses of 'syntax' and 'translations' can be replaced
8528    by more modern 'type_notation', 'notation' and 'abbreviation',
8529    which are independent of this issue.
8530
8531  - 'translations' require markup within the AST; the term syntax
8532    provides the following special forms:
8533
8534      CONST c   -- produces syntax version of constant c from context
8535      XCONST c  -- literally c, checked as constant from context
8536      c         -- literally c, if declared by 'syntax'
8537
8538    Plain identifiers are treated as AST variables -- occasionally the
8539    system indicates accidental variables via the error "rhs contains
8540    extra variables".
8541
8542    Type classes and type constructors are marked according to their
8543    concrete syntax.  Some old translations rules need to be written
8544    for the "type" category, using type constructor application
8545    instead of pseudo-term application of the default category
8546    "logic".
8547
8548  - 'parse_translation' etc. in ML may use the following
8549    antiquotations:
8550
8551      @{class_syntax c}   -- type class c within parse tree / AST
8552      @{term_syntax c}    -- type constructor c within parse tree / AST
8553      @{const_syntax c}   -- ML version of "CONST c" above
8554      @{syntax_const c}   -- literally c (checked wrt. 'syntax' declarations)
8555
8556  - Literal types within 'typed_print_translations', i.e. those *not*
8557    represented as pseudo-terms are represented verbatim.  Use @{class
8558    c} or @{type_name c} here instead of the above syntax
8559    antiquotations.
8560
8561Note that old non-authentic syntax was based on unqualified base
8562names, so all of the above "constant" names would coincide.  Recall
8563that 'print_syntax' and ML_command "set Syntax.trace_ast" help to
8564diagnose syntax problems.
8565
8566* Type constructors admit general mixfix syntax, not just infix.
8567
8568* Concrete syntax may be attached to local entities without a proof
8569body, too.  This works via regular mixfix annotations for 'fix',
8570'def', 'obtain' etc. or via the explicit 'write' command, which is
8571similar to the 'notation' command in theory specifications.
8572
8573* Discontinued unnamed infix syntax (legacy feature for many years) --
8574need to specify constant name and syntax separately.  Internal ML
8575datatype constructors have been renamed from InfixName to Infix etc.
8576Minor INCOMPATIBILITY.
8577
8578* Schematic theorem statements need to be explicitly markup as such,
8579via commands 'schematic_lemma', 'schematic_theorem',
8580'schematic_corollary'.  Thus the relevance of the proof is made
8581syntactically clear, which impacts performance in a parallel or
8582asynchronous interactive environment.  Minor INCOMPATIBILITY.
8583
8584* Use of cumulative prems via "!" in some proof methods has been
8585discontinued (old legacy feature).
8586
8587* References 'trace_simp' and 'debug_simp' have been replaced by
8588configuration options stored in the context. Enabling tracing (the
8589case of debugging is similar) in proofs works via
8590
8591  using [[trace_simp = true]]
8592
8593Tracing is then active for all invocations of the simplifier in
8594subsequent goal refinement steps. Tracing may also still be enabled or
8595disabled via the ProofGeneral settings menu.
8596
8597* Separate commands 'hide_class', 'hide_type', 'hide_const',
8598'hide_fact' replace the former 'hide' KIND command.  Minor
8599INCOMPATIBILITY.
8600
8601* Improved parallelism of proof term normalization: usedir -p2 -q0 is
8602more efficient than combinations with -q1 or -q2.
8603
8604
8605*** Pure ***
8606
8607* Proofterms record type-class reasoning explicitly, using the
8608"unconstrain" operation internally.  This eliminates all sort
8609constraints from a theorem and proof, introducing explicit
8610OFCLASS-premises.  On the proof term level, this operation is
8611automatically applied at theorem boundaries, such that closed proofs
8612are always free of sort constraints.  INCOMPATIBILITY for tools that
8613inspect proof terms.
8614
8615* Local theory specifications may depend on extra type variables that
8616are not present in the result type -- arguments TYPE('a) :: 'a itself
8617are added internally.  For example:
8618
8619  definition unitary :: bool where "unitary = (ALL (x::'a) y. x = y)"
8620
8621* Predicates of locales introduced by classes carry a mandatory
8622"class" prefix.  INCOMPATIBILITY.
8623
8624* Vacuous class specifications observe default sort.  INCOMPATIBILITY.
8625
8626* Old 'axclass' command has been discontinued.  INCOMPATIBILITY, use
8627'class' instead.
8628
8629* Command 'code_reflect' allows to incorporate generated ML code into
8630runtime environment; replaces immature code_datatype antiquotation.
8631INCOMPATIBILITY.
8632
8633* Code generator: simple concept for abstract datatypes obeying
8634invariants.
8635
8636* Code generator: details of internal data cache have no impact on the
8637user space functionality any longer.
8638
8639* Methods "unfold_locales" and "intro_locales" ignore non-locale
8640subgoals.  This is more appropriate for interpretations with 'where'.
8641INCOMPATIBILITY.
8642
8643* Command 'example_proof' opens an empty proof body.  This allows to
8644experiment with Isar, without producing any persistent result.
8645
8646* Commands 'type_notation' and 'no_type_notation' declare type syntax
8647within a local theory context, with explicit checking of the
8648constructors involved (in contrast to the raw 'syntax' versions).
8649
8650* Commands 'types' and 'typedecl' now work within a local theory
8651context -- without introducing dependencies on parameters or
8652assumptions, which is not possible in Isabelle/Pure.
8653
8654* Command 'defaultsort' has been renamed to 'default_sort', it works
8655within a local theory context.  Minor INCOMPATIBILITY.
8656
8657
8658*** HOL ***
8659
8660* Command 'typedef' now works within a local theory context -- without
8661introducing dependencies on parameters or assumptions, which is not
8662possible in Isabelle/Pure/HOL.  Note that the logical environment may
8663contain multiple interpretations of local typedefs (with different
8664non-emptiness proofs), even in a global theory context.
8665
8666* New package for quotient types.  Commands 'quotient_type' and
8667'quotient_definition' may be used for defining types and constants by
8668quotient constructions.  An example is the type of integers created by
8669quotienting pairs of natural numbers:
8670
8671  fun
8672    intrel :: "(nat * nat) => (nat * nat) => bool"
8673  where
8674    "intrel (x, y) (u, v) = (x + v = u + y)"
8675
8676  quotient_type int = "nat * nat" / intrel
8677    by (auto simp add: equivp_def expand_fun_eq)
8678
8679  quotient_definition
8680    "0::int" is "(0::nat, 0::nat)"
8681
8682The method "lifting" can be used to lift of theorems from the
8683underlying "raw" type to the quotient type.  The example
8684src/HOL/Quotient_Examples/FSet.thy includes such a quotient
8685construction and provides a reasoning infrastructure for finite sets.
8686
8687* Renamed Library/Quotient.thy to Library/Quotient_Type.thy to avoid
8688clash with new theory Quotient in Main HOL.
8689
8690* Moved the SMT binding into the main HOL session, eliminating
8691separate HOL-SMT session.
8692
8693* List membership infix mem operation is only an input abbreviation.
8694INCOMPATIBILITY.
8695
8696* Theory Library/Word.thy has been removed.  Use library Word/Word.thy
8697for future developements; former Library/Word.thy is still present in
8698the AFP entry RSAPPS.
8699
8700* Theorem Int.int_induct renamed to Int.int_of_nat_induct and is no
8701longer shadowed.  INCOMPATIBILITY.
8702
8703* Dropped theorem duplicate comp_arith; use semiring_norm instead.
8704INCOMPATIBILITY.
8705
8706* Dropped theorem RealPow.real_sq_order; use power2_le_imp_le instead.
8707INCOMPATIBILITY.
8708
8709* Dropped normalizing_semiring etc; use the facts in semiring classes
8710instead.  INCOMPATIBILITY.
8711
8712* Dropped several real-specific versions of lemmas about floor and
8713ceiling; use the generic lemmas from theory "Archimedean_Field"
8714instead.  INCOMPATIBILITY.
8715
8716  floor_number_of_eq         ~> floor_number_of
8717  le_floor_eq_number_of      ~> number_of_le_floor
8718  le_floor_eq_zero           ~> zero_le_floor
8719  le_floor_eq_one            ~> one_le_floor
8720  floor_less_eq_number_of    ~> floor_less_number_of
8721  floor_less_eq_zero         ~> floor_less_zero
8722  floor_less_eq_one          ~> floor_less_one
8723  less_floor_eq_number_of    ~> number_of_less_floor
8724  less_floor_eq_zero         ~> zero_less_floor
8725  less_floor_eq_one          ~> one_less_floor
8726  floor_le_eq_number_of      ~> floor_le_number_of
8727  floor_le_eq_zero           ~> floor_le_zero
8728  floor_le_eq_one            ~> floor_le_one
8729  floor_subtract_number_of   ~> floor_diff_number_of
8730  floor_subtract_one         ~> floor_diff_one
8731  ceiling_number_of_eq       ~> ceiling_number_of
8732  ceiling_le_eq_number_of    ~> ceiling_le_number_of
8733  ceiling_le_zero_eq         ~> ceiling_le_zero
8734  ceiling_le_eq_one          ~> ceiling_le_one
8735  less_ceiling_eq_number_of  ~> number_of_less_ceiling
8736  less_ceiling_eq_zero       ~> zero_less_ceiling
8737  less_ceiling_eq_one        ~> one_less_ceiling
8738  ceiling_less_eq_number_of  ~> ceiling_less_number_of
8739  ceiling_less_eq_zero       ~> ceiling_less_zero
8740  ceiling_less_eq_one        ~> ceiling_less_one
8741  le_ceiling_eq_number_of    ~> number_of_le_ceiling
8742  le_ceiling_eq_zero         ~> zero_le_ceiling
8743  le_ceiling_eq_one          ~> one_le_ceiling
8744  ceiling_subtract_number_of ~> ceiling_diff_number_of
8745  ceiling_subtract_one       ~> ceiling_diff_one
8746
8747* Theory "Finite_Set": various folding_XXX locales facilitate the
8748application of the various fold combinators on finite sets.
8749
8750* Library theory "RBT" renamed to "RBT_Impl"; new library theory "RBT"
8751provides abstract red-black tree type which is backed by "RBT_Impl" as
8752implementation.  INCOMPATIBILITY.
8753
8754* Theory Library/Coinductive_List has been removed -- superseded by
8755AFP/thys/Coinductive.
8756
8757* Theory PReal, including the type "preal" and related operations, has
8758been removed.  INCOMPATIBILITY.
8759
8760* Real: new development using Cauchy Sequences.
8761
8762* Split off theory "Big_Operators" containing setsum, setprod,
8763Inf_fin, Sup_fin, Min, Max from theory Finite_Set.  INCOMPATIBILITY.
8764
8765* Theory "Rational" renamed to "Rat", for consistency with "Nat",
8766"Int" etc.  INCOMPATIBILITY.
8767
8768* Constant Rat.normalize needs to be qualified.  INCOMPATIBILITY.
8769
8770* New set of rules "ac_simps" provides combined assoc / commute
8771rewrites for all interpretations of the appropriate generic locales.
8772
8773* Renamed theory "OrderedGroup" to "Groups" and split theory
8774"Ring_and_Field" into theories "Rings" and "Fields"; for more
8775appropriate and more consistent names suitable for name prefixes
8776within the HOL theories.  INCOMPATIBILITY.
8777
8778* Some generic constants have been put to appropriate theories:
8779  - less_eq, less: Orderings
8780  - zero, one, plus, minus, uminus, times, abs, sgn: Groups
8781  - inverse, divide: Rings
8782INCOMPATIBILITY.
8783
8784* More consistent naming of type classes involving orderings (and
8785lattices):
8786
8787    lower_semilattice                   ~> semilattice_inf
8788    upper_semilattice                   ~> semilattice_sup
8789
8790    dense_linear_order                  ~> dense_linorder
8791
8792    pordered_ab_group_add               ~> ordered_ab_group_add
8793    pordered_ab_group_add_abs           ~> ordered_ab_group_add_abs
8794    pordered_ab_semigroup_add           ~> ordered_ab_semigroup_add
8795    pordered_ab_semigroup_add_imp_le    ~> ordered_ab_semigroup_add_imp_le
8796    pordered_cancel_ab_semigroup_add    ~> ordered_cancel_ab_semigroup_add
8797    pordered_cancel_comm_semiring       ~> ordered_cancel_comm_semiring
8798    pordered_cancel_semiring            ~> ordered_cancel_semiring
8799    pordered_comm_monoid_add            ~> ordered_comm_monoid_add
8800    pordered_comm_ring                  ~> ordered_comm_ring
8801    pordered_comm_semiring              ~> ordered_comm_semiring
8802    pordered_ring                       ~> ordered_ring
8803    pordered_ring_abs                   ~> ordered_ring_abs
8804    pordered_semiring                   ~> ordered_semiring
8805
8806    ordered_ab_group_add                ~> linordered_ab_group_add
8807    ordered_ab_semigroup_add            ~> linordered_ab_semigroup_add
8808    ordered_cancel_ab_semigroup_add     ~> linordered_cancel_ab_semigroup_add
8809    ordered_comm_semiring_strict        ~> linordered_comm_semiring_strict
8810    ordered_field                       ~> linordered_field
8811    ordered_field_no_lb                 ~> linordered_field_no_lb
8812    ordered_field_no_ub                 ~> linordered_field_no_ub
8813    ordered_field_dense_linear_order    ~> dense_linordered_field
8814    ordered_idom                        ~> linordered_idom
8815    ordered_ring                        ~> linordered_ring
8816    ordered_ring_le_cancel_factor       ~> linordered_ring_le_cancel_factor
8817    ordered_ring_less_cancel_factor     ~> linordered_ring_less_cancel_factor
8818    ordered_ring_strict                 ~> linordered_ring_strict
8819    ordered_semidom                     ~> linordered_semidom
8820    ordered_semiring                    ~> linordered_semiring
8821    ordered_semiring_1                  ~> linordered_semiring_1
8822    ordered_semiring_1_strict           ~> linordered_semiring_1_strict
8823    ordered_semiring_strict             ~> linordered_semiring_strict
8824
8825  The following slightly odd type classes have been moved to a
8826  separate theory Library/Lattice_Algebras:
8827
8828    lordered_ab_group_add               ~> lattice_ab_group_add
8829    lordered_ab_group_add_abs           ~> lattice_ab_group_add_abs
8830    lordered_ab_group_add_meet          ~> semilattice_inf_ab_group_add
8831    lordered_ab_group_add_join          ~> semilattice_sup_ab_group_add
8832    lordered_ring                       ~> lattice_ring
8833
8834INCOMPATIBILITY.
8835
8836* Refined field classes:
8837  - classes division_ring_inverse_zero, field_inverse_zero,
8838    linordered_field_inverse_zero include rule inverse 0 = 0 --
8839    subsumes former division_by_zero class;
8840  - numerous lemmas have been ported from field to division_ring.
8841INCOMPATIBILITY.
8842
8843* Refined algebra theorem collections:
8844  - dropped theorem group group_simps, use algebra_simps instead;
8845  - dropped theorem group ring_simps, use field_simps instead;
8846  - proper theorem collection field_simps subsumes former theorem
8847    groups field_eq_simps and field_simps;
8848  - dropped lemma eq_minus_self_iff which is a duplicate for
8849    equal_neg_zero.
8850INCOMPATIBILITY.
8851
8852* Theory Finite_Set and List: some lemmas have been generalized from
8853sets to lattices:
8854
8855  fun_left_comm_idem_inter      ~> fun_left_comm_idem_inf
8856  fun_left_comm_idem_union      ~> fun_left_comm_idem_sup
8857  inter_Inter_fold_inter        ~> inf_Inf_fold_inf
8858  union_Union_fold_union        ~> sup_Sup_fold_sup
8859  Inter_fold_inter              ~> Inf_fold_inf
8860  Union_fold_union              ~> Sup_fold_sup
8861  inter_INTER_fold_inter        ~> inf_INFI_fold_inf
8862  union_UNION_fold_union        ~> sup_SUPR_fold_sup
8863  INTER_fold_inter              ~> INFI_fold_inf
8864  UNION_fold_union              ~> SUPR_fold_sup
8865
8866* Theory "Complete_Lattice": lemmas top_def and bot_def have been
8867replaced by the more convenient lemmas Inf_empty and Sup_empty.
8868Dropped lemmas Inf_insert_simp and Sup_insert_simp, which are subsumed
8869by Inf_insert and Sup_insert.  Lemmas Inf_UNIV and Sup_UNIV replace
8870former Inf_Univ and Sup_Univ.  Lemmas inf_top_right and sup_bot_right
8871subsume inf_top and sup_bot respectively.  INCOMPATIBILITY.
8872
8873* Reorganized theory Multiset: swapped notation of pointwise and
8874multiset order:
8875
8876  - pointwise ordering is instance of class order with standard syntax
8877    <= and <;
8878  - multiset ordering has syntax <=# and <#; partial order properties
8879    are provided by means of interpretation with prefix
8880    multiset_order;
8881  - less duplication, less historical organization of sections,
8882    conversion from associations lists to multisets, rudimentary code
8883    generation;
8884  - use insert_DiffM2 [symmetric] instead of elem_imp_eq_diff_union,
8885    if needed.
8886
8887Renamed:
8888
8889  multiset_eq_conv_count_eq  ~>  multiset_ext_iff
8890  multi_count_ext  ~>  multiset_ext
8891  diff_union_inverse2  ~>  diff_union_cancelR
8892
8893INCOMPATIBILITY.
8894
8895* Theory Permutation: replaced local "remove" by List.remove1.
8896
8897* Code generation: ML and OCaml code is decorated with signatures.
8898
8899* Theory List: added transpose.
8900
8901* Library/Nat_Bijection.thy is a collection of bijective functions
8902between nat and other types, which supersedes the older libraries
8903Library/Nat_Int_Bij.thy and HOLCF/NatIso.thy.  INCOMPATIBILITY.
8904
8905  Constants:
8906  Nat_Int_Bij.nat2_to_nat         ~> prod_encode
8907  Nat_Int_Bij.nat_to_nat2         ~> prod_decode
8908  Nat_Int_Bij.int_to_nat_bij      ~> int_encode
8909  Nat_Int_Bij.nat_to_int_bij      ~> int_decode
8910  Countable.pair_encode           ~> prod_encode
8911  NatIso.prod2nat                 ~> prod_encode
8912  NatIso.nat2prod                 ~> prod_decode
8913  NatIso.sum2nat                  ~> sum_encode
8914  NatIso.nat2sum                  ~> sum_decode
8915  NatIso.list2nat                 ~> list_encode
8916  NatIso.nat2list                 ~> list_decode
8917  NatIso.set2nat                  ~> set_encode
8918  NatIso.nat2set                  ~> set_decode
8919
8920  Lemmas:
8921  Nat_Int_Bij.bij_nat_to_int_bij  ~> bij_int_decode
8922  Nat_Int_Bij.nat2_to_nat_inj     ~> inj_prod_encode
8923  Nat_Int_Bij.nat2_to_nat_surj    ~> surj_prod_encode
8924  Nat_Int_Bij.nat_to_nat2_inj     ~> inj_prod_decode
8925  Nat_Int_Bij.nat_to_nat2_surj    ~> surj_prod_decode
8926  Nat_Int_Bij.i2n_n2i_id          ~> int_encode_inverse
8927  Nat_Int_Bij.n2i_i2n_id          ~> int_decode_inverse
8928  Nat_Int_Bij.surj_nat_to_int_bij ~> surj_int_encode
8929  Nat_Int_Bij.surj_int_to_nat_bij ~> surj_int_decode
8930  Nat_Int_Bij.inj_nat_to_int_bij  ~> inj_int_encode
8931  Nat_Int_Bij.inj_int_to_nat_bij  ~> inj_int_decode
8932  Nat_Int_Bij.bij_nat_to_int_bij  ~> bij_int_encode
8933  Nat_Int_Bij.bij_int_to_nat_bij  ~> bij_int_decode
8934
8935* Sledgehammer:
8936  - Renamed ATP commands:
8937    atp_info     ~> sledgehammer running_atps
8938    atp_kill     ~> sledgehammer kill_atps
8939    atp_messages ~> sledgehammer messages
8940    atp_minimize ~> sledgehammer minimize
8941    print_atps   ~> sledgehammer available_atps
8942    INCOMPATIBILITY.
8943  - Added user's manual ("isabelle doc sledgehammer").
8944  - Added option syntax and "sledgehammer_params" to customize
8945    Sledgehammer's behavior.  See the manual for details.
8946  - Modified the Isar proof reconstruction code so that it produces
8947    direct proofs rather than proofs by contradiction.  (This feature
8948    is still experimental.)
8949  - Made Isar proof reconstruction work for SPASS, remote ATPs, and in
8950    full-typed mode.
8951  - Added support for TPTP syntax for SPASS via the "spass_tptp" ATP.
8952
8953* Nitpick:
8954  - Added and implemented "binary_ints" and "bits" options.
8955  - Added "std" option and implemented support for nonstandard models.
8956  - Added and implemented "finitize" option to improve the precision
8957    of infinite datatypes based on a monotonicity analysis.
8958  - Added support for quotient types.
8959  - Added support for "specification" and "ax_specification"
8960    constructs.
8961  - Added support for local definitions (for "function" and
8962    "termination" proofs).
8963  - Added support for term postprocessors.
8964  - Optimized "Multiset.multiset" and "FinFun.finfun".
8965  - Improved efficiency of "destroy_constrs" optimization.
8966  - Fixed soundness bugs related to "destroy_constrs" optimization and
8967    record getters.
8968  - Fixed soundness bug related to higher-order constructors.
8969  - Fixed soundness bug when "full_descrs" is enabled.
8970  - Improved precision of set constructs.
8971  - Added "atoms" option.
8972  - Added cache to speed up repeated Kodkod invocations on the same
8973    problems.
8974  - Renamed "MiniSatJNI", "zChaffJNI", "BerkMinAlloy", and
8975    "SAT4JLight" to "MiniSat_JNI", "zChaff_JNI", "BerkMin_Alloy", and
8976    "SAT4J_Light".  INCOMPATIBILITY.
8977  - Removed "skolemize", "uncurry", "sym_break", "flatten_prop",
8978    "sharing_depth", and "show_skolems" options.  INCOMPATIBILITY.
8979  - Removed "nitpick_intro" attribute.  INCOMPATIBILITY.
8980
8981* Method "induct" now takes instantiations of the form t, where t is not
8982  a variable, as a shorthand for "x == t", where x is a fresh variable.
8983  If this is not intended, t has to be enclosed in parentheses.
8984  By default, the equalities generated by definitional instantiations
8985  are pre-simplified, which may cause parameters of inductive cases
8986  to disappear, or may even delete some of the inductive cases.
8987  Use "induct (no_simp)" instead of "induct" to restore the old
8988  behaviour. The (no_simp) option is also understood by the "cases"
8989  and "nominal_induct" methods, which now perform pre-simplification, too.
8990  INCOMPATIBILITY.
8991
8992
8993*** HOLCF ***
8994
8995* Variable names in lemmas generated by the domain package have
8996changed; the naming scheme is now consistent with the HOL datatype
8997package.  Some proof scripts may be affected, INCOMPATIBILITY.
8998
8999* The domain package no longer defines the function "foo_copy" for
9000recursive domain "foo".  The reach lemma is now stated directly in
9001terms of "foo_take".  Lemmas and proofs that mention "foo_copy" must
9002be reformulated in terms of "foo_take", INCOMPATIBILITY.
9003
9004* Most definedness lemmas generated by the domain package (previously
9005of the form "x ~= UU ==> foo$x ~= UU") now have an if-and-only-if form
9006like "foo$x = UU <-> x = UU", which works better as a simp rule.
9007Proofs that used definedness lemmas as intro rules may break,
9008potential INCOMPATIBILITY.
9009
9010* Induction and casedist rules generated by the domain package now
9011declare proper case_names (one called "bottom", and one named for each
9012constructor).  INCOMPATIBILITY.
9013
9014* For mutually-recursive domains, separate "reach" and "take_lemma"
9015rules are generated for each domain, INCOMPATIBILITY.
9016
9017  foo_bar.reach       ~> foo.reach  bar.reach
9018  foo_bar.take_lemmas ~> foo.take_lemma  bar.take_lemma
9019
9020* Some lemmas generated by the domain package have been renamed for
9021consistency with the datatype package, INCOMPATIBILITY.
9022
9023  foo.ind        ~> foo.induct
9024  foo.finite_ind ~> foo.finite_induct
9025  foo.coind      ~> foo.coinduct
9026  foo.casedist   ~> foo.exhaust
9027  foo.exhaust    ~> foo.nchotomy
9028
9029* For consistency with other definition packages, the fixrec package
9030now generates qualified theorem names, INCOMPATIBILITY.
9031
9032  foo_simps  ~> foo.simps
9033  foo_unfold ~> foo.unfold
9034  foo_induct ~> foo.induct
9035
9036* The "fixrec_simp" attribute has been removed.  The "fixrec_simp"
9037method and internal fixrec proofs now use the default simpset instead.
9038INCOMPATIBILITY.
9039
9040* The "contlub" predicate has been removed.  Proof scripts should use
9041lemma contI2 in place of monocontlub2cont, INCOMPATIBILITY.
9042
9043* The "admw" predicate has been removed, INCOMPATIBILITY.
9044
9045* The constants cpair, cfst, and csnd have been removed in favor of
9046Pair, fst, and snd from Isabelle/HOL, INCOMPATIBILITY.
9047
9048
9049*** ML ***
9050
9051* Antiquotations for basic formal entities:
9052
9053    @{class NAME}         -- type class
9054    @{class_syntax NAME}  -- syntax representation of the above
9055
9056    @{type_name NAME}     -- logical type
9057    @{type_abbrev NAME}   -- type abbreviation
9058    @{nonterminal NAME}   -- type of concrete syntactic category
9059    @{type_syntax NAME}   -- syntax representation of any of the above
9060
9061    @{const_name NAME}    -- logical constant (INCOMPATIBILITY)
9062    @{const_abbrev NAME}  -- abbreviated constant
9063    @{const_syntax NAME}  -- syntax representation of any of the above
9064
9065* Antiquotation @{syntax_const NAME} ensures that NAME refers to a raw
9066syntax constant (cf. 'syntax' command).
9067
9068* Antiquotation @{make_string} inlines a function to print arbitrary
9069values similar to the ML toplevel.  The result is compiler dependent
9070and may fall back on "?" in certain situations.
9071
9072* Diagnostic commands 'ML_val' and 'ML_command' may refer to
9073antiquotations @{Isar.state} and @{Isar.goal}.  This replaces impure
9074Isar.state() and Isar.goal(), which belong to the old TTY loop and do
9075not work with the asynchronous Isar document model.
9076
9077* Configuration options now admit dynamic default values, depending on
9078the context or even global references.
9079
9080* SHA1.digest digests strings according to SHA-1 (see RFC 3174).  It
9081uses an efficient external library if available (for Poly/ML).
9082
9083* Renamed some important ML structures, while keeping the old names
9084for some time as aliases within the structure Legacy:
9085
9086  OuterKeyword  ~>  Keyword
9087  OuterLex      ~>  Token
9088  OuterParse    ~>  Parse
9089  OuterSyntax   ~>  Outer_Syntax
9090  PrintMode     ~>  Print_Mode
9091  SpecParse     ~>  Parse_Spec
9092  ThyInfo       ~>  Thy_Info
9093  ThyLoad       ~>  Thy_Load
9094  ThyOutput     ~>  Thy_Output
9095  TypeInfer     ~>  Type_Infer
9096
9097Note that "open Legacy" simplifies porting of sources, but forgetting
9098to remove it again will complicate porting again in the future.
9099
9100* Most operations that refer to a global context are named
9101accordingly, e.g. Simplifier.global_context or
9102ProofContext.init_global.  There are some situations where a global
9103context actually works, but under normal circumstances one needs to
9104pass the proper local context through the code!
9105
9106* Discontinued old TheoryDataFun with its copy/init operation -- data
9107needs to be pure.  Functor Theory_Data_PP retains the traditional
9108Pretty.pp argument to merge, which is absent in the standard
9109Theory_Data version.
9110
9111* Sorts.certify_sort and derived "cert" operations for types and terms
9112no longer minimize sorts.  Thus certification at the boundary of the
9113inference kernel becomes invariant under addition of class relations,
9114which is an important monotonicity principle.  Sorts are now minimized
9115in the syntax layer only, at the boundary between the end-user and the
9116system.  Subtle INCOMPATIBILITY, may have to use Sign.minimize_sort
9117explicitly in rare situations.
9118
9119* Renamed old-style Drule.standard to Drule.export_without_context, to
9120emphasize that this is in no way a standard operation.
9121INCOMPATIBILITY.
9122
9123* Subgoal.FOCUS (and variants): resulting goal state is normalized as
9124usual for resolution.  Rare INCOMPATIBILITY.
9125
9126* Renamed varify/unvarify operations to varify_global/unvarify_global
9127to emphasize that these only work in a global situation (which is
9128quite rare).
9129
9130* Curried take and drop in library.ML; negative length is interpreted
9131as infinity (as in chop).  Subtle INCOMPATIBILITY.
9132
9133* Proof terms: type substitutions on proof constants now use canonical
9134order of type variables.  INCOMPATIBILITY for tools working with proof
9135terms.
9136
9137* Raw axioms/defs may no longer carry sort constraints, and raw defs
9138may no longer carry premises.  User-level specifications are
9139transformed accordingly by Thm.add_axiom/add_def.
9140
9141
9142*** System ***
9143
9144* Discontinued special HOL_USEDIR_OPTIONS for the main HOL image;
9145ISABELLE_USEDIR_OPTIONS applies uniformly to all sessions.  Note that
9146proof terms are enabled unconditionally in the new HOL-Proofs image.
9147
9148* Discontinued old ISABELLE and ISATOOL environment settings (legacy
9149feature since Isabelle2009).  Use ISABELLE_PROCESS and ISABELLE_TOOL,
9150respectively.
9151
9152* Old lib/scripts/polyml-platform is superseded by the
9153ISABELLE_PLATFORM setting variable, which defaults to the 32 bit
9154variant, even on a 64 bit machine.  The following example setting
9155prefers 64 bit if available:
9156
9157  ML_PLATFORM="${ISABELLE_PLATFORM64:-$ISABELLE_PLATFORM}"
9158
9159* The preliminary Isabelle/jEdit application demonstrates the emerging
9160Isabelle/Scala layer for advanced prover interaction and integration.
9161See src/Tools/jEdit or "isabelle jedit" provided by the properly built
9162component.
9163
9164* "IsabelleText" is a Unicode font derived from Bitstream Vera Mono
9165and Bluesky TeX fonts.  It provides the usual Isabelle symbols,
9166similar to the default assignment of the document preparation system
9167(cf. isabellesym.sty).  The Isabelle/Scala class Isabelle_System
9168provides some operations for direct access to the font without asking
9169the user for manual installation.
9170
9171
9172
9173New in Isabelle2009-1 (December 2009)
9174-------------------------------------
9175
9176*** General ***
9177
9178* Discontinued old form of "escaped symbols" such as \\<forall>.  Only
9179one backslash should be used, even in ML sources.
9180
9181
9182*** Pure ***
9183
9184* Locale interpretation propagates mixins along the locale hierarchy.
9185The currently only available mixins are the equations used to map
9186local definitions to terms of the target domain of an interpretation.
9187
9188* Reactivated diagnostic command 'print_interps'.  Use "print_interps
9189loc" to print all interpretations of locale "loc" in the theory.
9190Interpretations in proofs are not shown.
9191
9192* Thoroughly revised locales tutorial.  New section on conditional
9193interpretation.
9194
9195* On instantiation of classes, remaining undefined class parameters
9196are formally declared.  INCOMPATIBILITY.
9197
9198
9199*** Document preparation ***
9200
9201* New generalized style concept for printing terms: @{foo (style) ...}
9202instead of @{foo_style style ...}  (old form is still retained for
9203backward compatibility).  Styles can be also applied for
9204antiquotations prop, term_type and typeof.
9205
9206
9207*** HOL ***
9208
9209* New proof method "smt" for a combination of first-order logic with
9210equality, linear and nonlinear (natural/integer/real) arithmetic, and
9211fixed-size bitvectors; there is also basic support for higher-order
9212features (esp. lambda abstractions).  It is an incomplete decision
9213procedure based on external SMT solvers using the oracle mechanism;
9214for the SMT solver Z3, this method is proof-producing.  Certificates
9215are provided to avoid calling the external solvers solely for
9216re-checking proofs.  Due to a remote SMT service there is no need for
9217installing SMT solvers locally.  See src/HOL/SMT.
9218
9219* New commands to load and prove verification conditions generated by
9220the Boogie program verifier or derived systems (e.g. the Verifying C
9221Compiler (VCC) or Spec#).  See src/HOL/Boogie.
9222
9223* New counterexample generator tool 'nitpick' based on the Kodkod
9224relational model finder.  See src/HOL/Tools/Nitpick and
9225src/HOL/Nitpick_Examples.
9226
9227* New commands 'code_pred' and 'values' to invoke the predicate
9228compiler and to enumerate values of inductive predicates.
9229
9230* A tabled implementation of the reflexive transitive closure.
9231
9232* New implementation of quickcheck uses generic code generator;
9233default generators are provided for all suitable HOL types, records
9234and datatypes.  Old quickcheck can be re-activated importing theory
9235Library/SML_Quickcheck.
9236
9237* New testing tool Mirabelle for automated proof tools.  Applies
9238several tools and tactics like sledgehammer, metis, or quickcheck, to
9239every proof step in a theory.  To be used in batch mode via the
9240"mirabelle" utility.
9241
9242* New proof method "sos" (sum of squares) for nonlinear real
9243arithmetic (originally due to John Harison). It requires theory
9244Library/Sum_Of_Squares.  It is not a complete decision procedure but
9245works well in practice on quantifier-free real arithmetic with +, -,
9246*, ^, =, <= and <, i.e. boolean combinations of equalities and
9247inequalities between polynomials.  It makes use of external
9248semidefinite programming solvers.  Method "sos" generates a
9249certificate that can be pasted into the proof thus avoiding the need
9250to call an external tool every time the proof is checked.  See
9251src/HOL/Library/Sum_Of_Squares.
9252
9253* New method "linarith" invokes existing linear arithmetic decision
9254procedure only.
9255
9256* New command 'atp_minimal' reduces result produced by Sledgehammer.
9257
9258* New Sledgehammer option "Full Types" in Proof General settings menu.
9259Causes full type information to be output to the ATPs.  This slows
9260ATPs down considerably but eliminates a source of unsound "proofs"
9261that fail later.
9262
9263* New method "metisFT": A version of metis that uses full type
9264information in order to avoid failures of proof reconstruction.
9265
9266* New evaluator "approximate" approximates an real valued term using
9267the same method as the approximation method.
9268
9269* Method "approximate" now supports arithmetic expressions as
9270boundaries of intervals and implements interval splitting and Taylor
9271series expansion.
9272
9273* ML antiquotation @{code_datatype} inserts definition of a datatype
9274generated by the code generator; e.g. see src/HOL/Predicate.thy.
9275
9276* New theory SupInf of the supremum and infimum operators for sets of
9277reals.
9278
9279* New theory Probability, which contains a development of measure
9280theory, eventually leading to Lebesgue integration and probability.
9281
9282* Extended Multivariate Analysis to include derivation and Brouwer's
9283fixpoint theorem.
9284
9285* Reorganization of number theory, INCOMPATIBILITY:
9286  - new number theory development for nat and int, in theories Divides
9287    and GCD as well as in new session Number_Theory
9288  - some constants and facts now suffixed with _nat and _int
9289    accordingly
9290  - former session NumberTheory now named Old_Number_Theory, including
9291    theories Legacy_GCD and Primes (prefer Number_Theory if possible)
9292  - moved theory Pocklington from src/HOL/Library to
9293    src/HOL/Old_Number_Theory
9294
9295* Theory GCD includes functions Gcd/GCD and Lcm/LCM for the gcd and
9296lcm of finite and infinite sets. It is shown that they form a complete
9297lattice.
9298
9299* Class semiring_div requires superclass no_zero_divisors and proof of
9300div_mult_mult1; theorems div_mult_mult1, div_mult_mult2,
9301div_mult_mult1_if, div_mult_mult1 and div_mult_mult2 have been
9302generalized to class semiring_div, subsuming former theorems
9303zdiv_zmult_zmult1, zdiv_zmult_zmult1_if, zdiv_zmult_zmult1 and
9304zdiv_zmult_zmult2.  div_mult_mult1 is now [simp] by default.
9305INCOMPATIBILITY.
9306
9307* Refinements to lattice classes and sets:
9308  - less default intro/elim rules in locale variant, more default
9309    intro/elim rules in class variant: more uniformity
9310  - lemma ge_sup_conv renamed to le_sup_iff, in accordance with
9311    le_inf_iff
9312  - dropped lemma alias inf_ACI for inf_aci (same for sup_ACI and
9313    sup_aci)
9314  - renamed ACI to inf_sup_aci
9315  - new class "boolean_algebra"
9316  - class "complete_lattice" moved to separate theory
9317    "Complete_Lattice"; corresponding constants (and abbreviations)
9318    renamed and with authentic syntax:
9319    Set.Inf ~>    Complete_Lattice.Inf
9320    Set.Sup ~>    Complete_Lattice.Sup
9321    Set.INFI ~>   Complete_Lattice.INFI
9322    Set.SUPR ~>   Complete_Lattice.SUPR
9323    Set.Inter ~>  Complete_Lattice.Inter
9324    Set.Union ~>  Complete_Lattice.Union
9325    Set.INTER ~>  Complete_Lattice.INTER
9326    Set.UNION ~>  Complete_Lattice.UNION
9327  - authentic syntax for
9328    Set.Pow
9329    Set.image
9330  - mere abbreviations:
9331    Set.empty               (for bot)
9332    Set.UNIV                (for top)
9333    Set.inter               (for inf, formerly Set.Int)
9334    Set.union               (for sup, formerly Set.Un)
9335    Complete_Lattice.Inter  (for Inf)
9336    Complete_Lattice.Union  (for Sup)
9337    Complete_Lattice.INTER  (for INFI)
9338    Complete_Lattice.UNION  (for SUPR)
9339  - object-logic definitions as far as appropriate
9340
9341INCOMPATIBILITY.  Care is required when theorems Int_subset_iff or
9342Un_subset_iff are explicitly deleted as default simp rules; then also
9343their lattice counterparts le_inf_iff and le_sup_iff have to be
9344deleted to achieve the desired effect.
9345
9346* Rules inf_absorb1, inf_absorb2, sup_absorb1, sup_absorb2 are no simp
9347rules by default any longer; the same applies to min_max.inf_absorb1
9348etc.  INCOMPATIBILITY.
9349
9350* Rules sup_Int_eq and sup_Un_eq are no longer declared as
9351pred_set_conv by default.  INCOMPATIBILITY.
9352
9353* Power operations on relations and functions are now one dedicated
9354constant "compow" with infix syntax "^^".  Power operation on
9355multiplicative monoids retains syntax "^" and is now defined generic
9356in class power.  INCOMPATIBILITY.
9357
9358* Relation composition "R O S" now has a more standard argument order:
9359"R O S = {(x, z). EX y. (x, y) : R & (y, z) : S}".  INCOMPATIBILITY,
9360rewrite propositions with "S O R" --> "R O S". Proofs may occasionally
9361break, since the O_assoc rule was not rewritten like this.  Fix using
9362O_assoc[symmetric].  The same applies to the curried version "R OO S".
9363
9364* Function "Inv" is renamed to "inv_into" and function "inv" is now an
9365abbreviation for "inv_into UNIV".  Lemmas are renamed accordingly.
9366INCOMPATIBILITY.
9367
9368* Most rules produced by inductive and datatype package have mandatory
9369prefixes.  INCOMPATIBILITY.
9370
9371* Changed "DERIV_intros" to a dynamic fact, which can be augmented by
9372the attribute of the same name.  Each of the theorems in the list
9373DERIV_intros assumes composition with an additional function and
9374matches a variable to the derivative, which has to be solved by the
9375Simplifier.  Hence (auto intro!: DERIV_intros) computes the derivative
9376of most elementary terms.  Former Maclauren.DERIV_tac and
9377Maclauren.deriv_tac should be replaced by (auto intro!: DERIV_intros).
9378INCOMPATIBILITY.
9379
9380* Code generator attributes follow the usual underscore convention:
9381    code_unfold     replaces    code unfold
9382    code_post       replaces    code post
9383    etc.
9384  INCOMPATIBILITY.
9385
9386* Renamed methods:
9387    sizechange -> size_change
9388    induct_scheme -> induction_schema
9389  INCOMPATIBILITY.
9390
9391* Discontinued abbreviation "arbitrary" of constant "undefined".
9392INCOMPATIBILITY, use "undefined" directly.
9393
9394* Renamed theorems:
9395    Suc_eq_add_numeral_1 -> Suc_eq_plus1
9396    Suc_eq_add_numeral_1_left -> Suc_eq_plus1_left
9397    Suc_plus1 -> Suc_eq_plus1
9398    *anti_sym -> *antisym*
9399    vector_less_eq_def -> vector_le_def
9400  INCOMPATIBILITY.
9401
9402* Added theorem List.map_map as [simp].  Removed List.map_compose.
9403INCOMPATIBILITY.
9404
9405* Removed predicate "M hassize n" (<--> card M = n & finite M).
9406INCOMPATIBILITY.
9407
9408
9409*** HOLCF ***
9410
9411* Theory Representable defines a class "rep" of domains that are
9412representable (via an ep-pair) in the universal domain type "udom".
9413Instances are provided for all type constructors defined in HOLCF.
9414
9415* The 'new_domain' command is a purely definitional version of the
9416domain package, for representable domains.  Syntax is identical to the
9417old domain package.  The 'new_domain' package also supports indirect
9418recursion using previously-defined type constructors.  See
9419src/HOLCF/ex/New_Domain.thy for examples.
9420
9421* Method "fixrec_simp" unfolds one step of a fixrec-defined constant
9422on the left-hand side of an equation, and then performs
9423simplification.  Rewriting is done using rules declared with the
9424"fixrec_simp" attribute.  The "fixrec_simp" method is intended as a
9425replacement for "fixpat"; see src/HOLCF/ex/Fixrec_ex.thy for examples.
9426
9427* The pattern-match compiler in 'fixrec' can now handle constructors
9428with HOL function types.  Pattern-match combinators for the Pair
9429constructor are pre-configured.
9430
9431* The 'fixrec' package now produces better fixed-point induction rules
9432for mutually-recursive definitions:  Induction rules have conclusions
9433of the form "P foo bar" instead of "P <foo, bar>".
9434
9435* The constant "sq_le" (with infix syntax "<<" or "\<sqsubseteq>") has
9436been renamed to "below".  The name "below" now replaces "less" in many
9437theorem names.  (Legacy theorem names using "less" are still supported
9438as well.)
9439
9440* The 'fixrec' package now supports "bottom patterns".  Bottom
9441patterns can be used to generate strictness rules, or to make
9442functions more strict (much like the bang-patterns supported by the
9443Glasgow Haskell Compiler).  See src/HOLCF/ex/Fixrec_ex.thy for
9444examples.
9445
9446
9447*** ML ***
9448
9449* Support for Poly/ML 5.3.0, with improved reporting of compiler
9450errors and run-time exceptions, including detailed source positions.
9451
9452* Structure Name_Space (formerly NameSpace) now manages uniquely
9453identified entries, with some additional information such as source
9454position, logical grouping etc.
9455
9456* Theory and context data is now introduced by the simplified and
9457modernized functors Theory_Data, Proof_Data, Generic_Data.  Data needs
9458to be pure, but the old TheoryDataFun for mutable data (with explicit
9459copy operation) is still available for some time.
9460
9461* Structure Synchronized (cf. src/Pure/Concurrent/synchronized.ML)
9462provides a high-level programming interface to synchronized state
9463variables with atomic update.  This works via pure function
9464application within a critical section -- its runtime should be as
9465short as possible; beware of deadlocks if critical code is nested,
9466either directly or indirectly via other synchronized variables!
9467
9468* Structure Unsynchronized (cf. src/Pure/ML-Systems/unsynchronized.ML)
9469wraps raw ML references, explicitly indicating their non-thread-safe
9470behaviour.  The Isar toplevel keeps this structure open, to
9471accommodate Proof General as well as quick and dirty interactive
9472experiments with references.
9473
9474* PARALLEL_CHOICE and PARALLEL_GOALS provide basic support for
9475parallel tactical reasoning.
9476
9477* Tacticals Subgoal.FOCUS, Subgoal.FOCUS_PREMS, Subgoal.FOCUS_PARAMS
9478are similar to SUBPROOF, but are slightly more flexible: only the
9479specified parts of the subgoal are imported into the context, and the
9480body tactic may introduce new subgoals and schematic variables.
9481
9482* Old tactical METAHYPS, which does not observe the proof context, has
9483been renamed to Old_Goals.METAHYPS and awaits deletion.  Use SUBPROOF
9484or Subgoal.FOCUS etc.
9485
9486* Renamed functor TableFun to Table, and GraphFun to Graph.  (Since
9487functors have their own ML name space there is no point to mark them
9488separately.)  Minor INCOMPATIBILITY.
9489
9490* Renamed NamedThmsFun to Named_Thms.  INCOMPATIBILITY.
9491
9492* Renamed several structures FooBar to Foo_Bar.  Occasional,
9493INCOMPATIBILITY.
9494
9495* Operations of structure Skip_Proof no longer require quick_and_dirty
9496mode, which avoids critical setmp.
9497
9498* Eliminated old Attrib.add_attributes, Method.add_methods and related
9499combinators for "args".  INCOMPATIBILITY, need to use simplified
9500Attrib/Method.setup introduced in Isabelle2009.
9501
9502* Proper context for simpset_of, claset_of, clasimpset_of.  May fall
9503back on global_simpset_of, global_claset_of, global_clasimpset_of as
9504last resort.  INCOMPATIBILITY.
9505
9506* Display.pretty_thm now requires a proper context (cf. former
9507ProofContext.pretty_thm).  May fall back on Display.pretty_thm_global
9508or even Display.pretty_thm_without_context as last resort.
9509INCOMPATIBILITY.
9510
9511* Discontinued Display.pretty_ctyp/cterm etc.  INCOMPATIBILITY, use
9512Syntax.pretty_typ/term directly, preferably with proper context
9513instead of global theory.
9514
9515
9516*** System ***
9517
9518* Further fine tuning of parallel proof checking, scales up to 8 cores
9519(max. speedup factor 5.0).  See also Goal.parallel_proofs in ML and
9520usedir option -q.
9521
9522* Support for additional "Isabelle components" via etc/components, see
9523also the system manual.
9524
9525* The isabelle makeall tool now operates on all components with
9526IsaMakefile, not just hardwired "logics".
9527
9528* Removed "compress" option from isabelle-process and isabelle usedir;
9529this is always enabled.
9530
9531* Discontinued support for Poly/ML 4.x versions.
9532
9533* Isabelle tool "wwwfind" provides web interface for 'find_theorems'
9534on a given logic image.  This requires the lighttpd webserver and is
9535currently supported on Linux only.
9536
9537
9538
9539New in Isabelle2009 (April 2009)
9540--------------------------------
9541
9542*** General ***
9543
9544* Simplified main Isabelle executables, with less surprises on
9545case-insensitive file-systems (such as Mac OS).
9546
9547  - The main Isabelle tool wrapper is now called "isabelle" instead of
9548    "isatool."
9549
9550  - The former "isabelle" alias for "isabelle-process" has been
9551    removed (should rarely occur to regular users).
9552
9553  - The former "isabelle-interface" and its alias "Isabelle" have been
9554    removed (interfaces are now regular Isabelle tools).
9555
9556Within scripts and make files, the Isabelle environment variables
9557ISABELLE_TOOL and ISABELLE_PROCESS replace old ISATOOL and ISABELLE,
9558respectively.  (The latter are still available as legacy feature.)
9559
9560The old isabelle-interface wrapper could react in confusing ways if
9561the interface was uninstalled or changed otherwise.  Individual
9562interface tool configuration is now more explicit, see also the
9563Isabelle system manual.  In particular, Proof General is now available
9564via "isabelle emacs".
9565
9566INCOMPATIBILITY, need to adapt derivative scripts.  Users may need to
9567purge installed copies of Isabelle executables and re-run "isabelle
9568install -p ...", or use symlinks.
9569
9570* The default for ISABELLE_HOME_USER is now ~/.isabelle instead of the
9571old ~/isabelle, which was slightly non-standard and apt to cause
9572surprises on case-insensitive file-systems (such as Mac OS).
9573
9574INCOMPATIBILITY, need to move existing ~/isabelle/etc,
9575~/isabelle/heaps, ~/isabelle/browser_info to the new place.  Special
9576care is required when using older releases of Isabelle.  Note that
9577ISABELLE_HOME_USER can be changed in Isabelle/etc/settings of any
9578Isabelle distribution, in order to use the new ~/.isabelle uniformly.
9579
9580* Proofs of fully specified statements are run in parallel on
9581multi-core systems.  A speedup factor of 2.5 to 3.2 can be expected on
9582a regular 4-core machine, if the initial heap space is made reasonably
9583large (cf. Poly/ML option -H).  (Requires Poly/ML 5.2.1 or later.)
9584
9585* The main reference manuals ("isar-ref", "implementation", and
9586"system") have been updated and extended.  Formally checked references
9587as hyperlinks are now available uniformly.
9588
9589
9590*** Pure ***
9591
9592* Complete re-implementation of locales.  INCOMPATIBILITY in several
9593respects.  The most important changes are listed below.  See the
9594Tutorial on Locales ("locales" manual) for details.
9595
9596- In locale expressions, instantiation replaces renaming.  Parameters
9597must be declared in a for clause.  To aid compatibility with previous
9598parameter inheritance, in locale declarations, parameters that are not
9599'touched' (instantiation position "_" or omitted) are implicitly added
9600with their syntax at the beginning of the for clause.
9601
9602- Syntax from abbreviations and definitions in locales is available in
9603locale expressions and context elements.  The latter is particularly
9604useful in locale declarations.
9605
9606- More flexible mechanisms to qualify names generated by locale
9607expressions.  Qualifiers (prefixes) may be specified in locale
9608expressions, and can be marked as mandatory (syntax: "name!:") or
9609optional (syntax "name?:").  The default depends for plain "name:"
9610depends on the situation where a locale expression is used: in
9611commands 'locale' and 'sublocale' prefixes are optional, in
9612'interpretation' and 'interpret' prefixes are mandatory.  The old
9613implicit qualifiers derived from the parameter names of a locale are
9614no longer generated.
9615
9616- Command "sublocale l < e" replaces "interpretation l < e".  The
9617instantiation clause in "interpretation" and "interpret" (square
9618brackets) is no longer available.  Use locale expressions.
9619
9620- When converting proof scripts, mandatory qualifiers in
9621'interpretation' and 'interpret' should be retained by default, even
9622if this is an INCOMPATIBILITY compared to former behavior.  In the
9623worst case, use the "name?:" form for non-mandatory ones.  Qualifiers
9624in locale expressions range over a single locale instance only.
9625
9626- Dropped locale element "includes".  This is a major INCOMPATIBILITY.
9627In existing theorem specifications replace the includes element by the
9628respective context elements of the included locale, omitting those
9629that are already present in the theorem specification.  Multiple
9630assume elements of a locale should be replaced by a single one
9631involving the locale predicate.  In the proof body, declarations (most
9632notably theorems) may be regained by interpreting the respective
9633locales in the proof context as required (command "interpret").
9634
9635If using "includes" in replacement of a target solely because the
9636parameter types in the theorem are not as general as in the target,
9637consider declaring a new locale with additional type constraints on
9638the parameters (context element "constrains").
9639
9640- Discontinued "locale (open)".  INCOMPATIBILITY.
9641
9642- Locale interpretation commands no longer attempt to simplify goal.
9643INCOMPATIBILITY: in rare situations the generated goal differs.  Use
9644methods intro_locales and unfold_locales to clarify.
9645
9646- Locale interpretation commands no longer accept interpretation
9647attributes.  INCOMPATIBILITY.
9648
9649* Class declaration: so-called "base sort" must not be given in import
9650list any longer, but is inferred from the specification.  Particularly
9651in HOL, write
9652
9653    class foo = ...
9654
9655instead of
9656
9657    class foo = type + ...
9658
9659* Class target: global versions of theorems stemming do not carry a
9660parameter prefix any longer.  INCOMPATIBILITY.
9661
9662* Class 'instance' command no longer accepts attached definitions.
9663INCOMPATIBILITY, use proper 'instantiation' target instead.
9664
9665* Recovered hiding of consts, which was accidentally broken in
9666Isabelle2007.  Potential INCOMPATIBILITY, ``hide const c'' really
9667makes c inaccessible; consider using ``hide (open) const c'' instead.
9668
9669* Slightly more coherent Pure syntax, with updated documentation in
9670isar-ref manual.  Removed locales meta_term_syntax and
9671meta_conjunction_syntax: TERM and &&& (formerly &&) are now permanent,
9672INCOMPATIBILITY in rare situations.  Note that &&& should not be used
9673directly in regular applications.
9674
9675* There is a new syntactic category "float_const" for signed decimal
9676fractions (e.g. 123.45 or -123.45).
9677
9678* Removed exotic 'token_translation' command.  INCOMPATIBILITY, use ML
9679interface with 'setup' command instead.
9680
9681* Command 'local_setup' is similar to 'setup', but operates on a local
9682theory context.
9683
9684* The 'axiomatization' command now only works within a global theory
9685context.  INCOMPATIBILITY.
9686
9687* Goal-directed proof now enforces strict proof irrelevance wrt. sort
9688hypotheses.  Sorts required in the course of reasoning need to be
9689covered by the constraints in the initial statement, completed by the
9690type instance information of the background theory.  Non-trivial sort
9691hypotheses, which rarely occur in practice, may be specified via
9692vacuous propositions of the form SORT_CONSTRAINT('a::c).  For example:
9693
9694  lemma assumes "SORT_CONSTRAINT('a::empty)" shows False ...
9695
9696The result contains an implicit sort hypotheses as before --
9697SORT_CONSTRAINT premises are eliminated as part of the canonical rule
9698normalization.
9699
9700* Generalized Isar history, with support for linear undo, direct state
9701addressing etc.
9702
9703* Changed defaults for unify configuration options:
9704
9705  unify_trace_bound = 50 (formerly 25)
9706  unify_search_bound = 60 (formerly 30)
9707
9708* Different bookkeeping for code equations (INCOMPATIBILITY):
9709
9710  a) On theory merge, the last set of code equations for a particular
9711     constant is taken (in accordance with the policy applied by other
9712     parts of the code generator framework).
9713
9714  b) Code equations stemming from explicit declarations (e.g. code
9715     attribute) gain priority over default code equations stemming
9716     from definition, primrec, fun etc.
9717
9718* Keyword 'code_exception' now named 'code_abort'.  INCOMPATIBILITY.
9719
9720* Unified theorem tables for both code generators.  Thus [code
9721func] has disappeared and only [code] remains.  INCOMPATIBILITY.
9722
9723* Command 'find_consts' searches for constants based on type and name
9724patterns, e.g.
9725
9726    find_consts "_ => bool"
9727
9728By default, matching is against subtypes, but it may be restricted to
9729the whole type.  Searching by name is possible.  Multiple queries are
9730conjunctive and queries may be negated by prefixing them with a
9731hyphen:
9732
9733    find_consts strict: "_ => bool" name: "Int" -"int => int"
9734
9735* New 'find_theorems' criterion "solves" matches theorems that
9736directly solve the current goal (modulo higher-order unification).
9737
9738* Auto solve feature for main theorem statements: whenever a new goal
9739is stated, "find_theorems solves" is called; any theorems that could
9740solve the lemma directly are listed as part of the goal state.
9741Cf. associated options in Proof General Isabelle settings menu,
9742enabled by default, with reasonable timeout for pathological cases of
9743higher-order unification.
9744
9745
9746*** Document preparation ***
9747
9748* Antiquotation @{lemma} now imitates a regular terminal proof,
9749demanding keyword 'by' and supporting the full method expression
9750syntax just like the Isar command 'by'.
9751
9752
9753*** HOL ***
9754
9755* Integrated main parts of former image HOL-Complex with HOL.  Entry
9756points Main and Complex_Main remain as before.
9757
9758* Logic image HOL-Plain provides a minimal HOL with the most important
9759tools available (inductive, datatype, primrec, ...).  This facilitates
9760experimentation and tool development.  Note that user applications
9761(and library theories) should never refer to anything below theory
9762Main, as before.
9763
9764* Logic image HOL-Main stops at theory Main, and thus facilitates
9765experimentation due to shorter build times.
9766
9767* Logic image HOL-NSA contains theories of nonstandard analysis which
9768were previously part of former HOL-Complex.  Entry point Hyperreal
9769remains valid, but theories formerly using Complex_Main should now use
9770new entry point Hypercomplex.
9771
9772* Generic ATP manager for Sledgehammer, based on ML threads instead of
9773Posix processes.  Avoids potentially expensive forking of the ML
9774process.  New thread-based implementation also works on non-Unix
9775platforms (Cygwin).  Provers are no longer hardwired, but defined
9776within the theory via plain ML wrapper functions.  Basic Sledgehammer
9777commands are covered in the isar-ref manual.
9778
9779* Wrapper scripts for remote SystemOnTPTP service allows to use
9780sledgehammer without local ATP installation (Vampire etc.). Other
9781provers may be included via suitable ML wrappers, see also
9782src/HOL/ATP_Linkup.thy.
9783
9784* ATP selection (E/Vampire/Spass) is now via Proof General's settings
9785menu.
9786
9787* The metis method no longer fails because the theorem is too trivial
9788(contains the empty clause).
9789
9790* The metis method now fails in the usual manner, rather than raising
9791an exception, if it determines that it cannot prove the theorem.
9792
9793* Method "coherent" implements a prover for coherent logic (see also
9794src/Tools/coherent.ML).
9795
9796* Constants "undefined" and "default" replace "arbitrary".  Usually
9797"undefined" is the right choice to replace "arbitrary", though
9798logically there is no difference.  INCOMPATIBILITY.
9799
9800* Command "value" now integrates different evaluation mechanisms.  The
9801result of the first successful evaluation mechanism is printed.  In
9802square brackets a particular named evaluation mechanisms may be
9803specified (currently, [SML], [code] or [nbe]).  See further
9804src/HOL/ex/Eval_Examples.thy.
9805
9806* Normalization by evaluation now allows non-leftlinear equations.
9807Declare with attribute [code nbe].
9808
9809* Methods "case_tac" and "induct_tac" now refer to the very same rules
9810as the structured Isar versions "cases" and "induct", cf. the
9811corresponding "cases" and "induct" attributes.  Mutual induction rules
9812are now presented as a list of individual projections
9813(e.g. foo_bar.inducts for types foo and bar); the old format with
9814explicit HOL conjunction is no longer supported.  INCOMPATIBILITY, in
9815rare situations a different rule is selected --- notably nested tuple
9816elimination instead of former prod.exhaust: use explicit (case_tac t
9817rule: prod.exhaust) here.
9818
9819* Attributes "cases", "induct", "coinduct" support "del" option.
9820
9821* Removed fact "case_split_thm", which duplicates "case_split".
9822
9823* The option datatype has been moved to a new theory Option.  Renamed
9824option_map to Option.map, and o2s to Option.set, INCOMPATIBILITY.
9825
9826* New predicate "strict_mono" classifies strict functions on partial
9827orders.  With strict functions on linear orders, reasoning about
9828(in)equalities is facilitated by theorems "strict_mono_eq",
9829"strict_mono_less_eq" and "strict_mono_less".
9830
9831* Some set operations are now proper qualified constants with
9832authentic syntax.  INCOMPATIBILITY:
9833
9834    op Int ~>   Set.Int
9835    op Un ~>    Set.Un
9836    INTER ~>    Set.INTER
9837    UNION ~>    Set.UNION
9838    Inter ~>    Set.Inter
9839    Union ~>    Set.Union
9840    {} ~>       Set.empty
9841    UNIV ~>     Set.UNIV
9842
9843* Class complete_lattice with operations Inf, Sup, INFI, SUPR now in
9844theory Set.
9845
9846* Auxiliary class "itself" has disappeared -- classes without any
9847parameter are treated as expected by the 'class' command.
9848
9849* Leibnitz's Series for Pi and the arcus tangens and logarithm series.
9850
9851* Common decision procedures (Cooper, MIR, Ferrack, Approximation,
9852Dense_Linear_Order) are now in directory HOL/Decision_Procs.
9853
9854* Theory src/HOL/Decision_Procs/Approximation provides the new proof
9855method "approximation".  It proves formulas on real values by using
9856interval arithmetic.  In the formulas are also the transcendental
9857functions sin, cos, tan, atan, ln, exp and the constant pi are
9858allowed. For examples see
9859src/HOL/Descision_Procs/ex/Approximation_Ex.thy.
9860
9861* Theory "Reflection" now resides in HOL/Library.
9862
9863* Entry point to Word library now simply named "Word".
9864INCOMPATIBILITY.
9865
9866* Made source layout more coherent with logical distribution
9867structure:
9868
9869    src/HOL/Library/RType.thy ~> src/HOL/Typerep.thy
9870    src/HOL/Library/Code_Message.thy ~> src/HOL/
9871    src/HOL/Library/GCD.thy ~> src/HOL/
9872    src/HOL/Library/Order_Relation.thy ~> src/HOL/
9873    src/HOL/Library/Parity.thy ~> src/HOL/
9874    src/HOL/Library/Univ_Poly.thy ~> src/HOL/
9875    src/HOL/Real/ContNotDenum.thy ~> src/HOL/Library/
9876    src/HOL/Real/Lubs.thy ~> src/HOL/
9877    src/HOL/Real/PReal.thy ~> src/HOL/
9878    src/HOL/Real/Rational.thy ~> src/HOL/
9879    src/HOL/Real/RComplete.thy ~> src/HOL/
9880    src/HOL/Real/RealDef.thy ~> src/HOL/
9881    src/HOL/Real/RealPow.thy ~> src/HOL/
9882    src/HOL/Real/Real.thy ~> src/HOL/
9883    src/HOL/Complex/Complex_Main.thy ~> src/HOL/
9884    src/HOL/Complex/Complex.thy ~> src/HOL/
9885    src/HOL/Complex/FrechetDeriv.thy ~> src/HOL/Library/
9886    src/HOL/Complex/Fundamental_Theorem_Algebra.thy ~> src/HOL/Library/
9887    src/HOL/Hyperreal/Deriv.thy ~> src/HOL/
9888    src/HOL/Hyperreal/Fact.thy ~> src/HOL/
9889    src/HOL/Hyperreal/Integration.thy ~> src/HOL/
9890    src/HOL/Hyperreal/Lim.thy ~> src/HOL/
9891    src/HOL/Hyperreal/Ln.thy ~> src/HOL/
9892    src/HOL/Hyperreal/Log.thy ~> src/HOL/
9893    src/HOL/Hyperreal/MacLaurin.thy ~> src/HOL/
9894    src/HOL/Hyperreal/NthRoot.thy ~> src/HOL/
9895    src/HOL/Hyperreal/Series.thy ~> src/HOL/
9896    src/HOL/Hyperreal/SEQ.thy ~> src/HOL/
9897    src/HOL/Hyperreal/Taylor.thy ~> src/HOL/
9898    src/HOL/Hyperreal/Transcendental.thy ~> src/HOL/
9899    src/HOL/Real/Float ~> src/HOL/Library/
9900    src/HOL/Real/HahnBanach ~> src/HOL/HahnBanach
9901    src/HOL/Real/RealVector.thy ~> src/HOL/
9902
9903    src/HOL/arith_data.ML ~> src/HOL/Tools
9904    src/HOL/hologic.ML ~> src/HOL/Tools
9905    src/HOL/simpdata.ML ~> src/HOL/Tools
9906    src/HOL/int_arith1.ML ~> src/HOL/Tools/int_arith.ML
9907    src/HOL/int_factor_simprocs.ML ~> src/HOL/Tools
9908    src/HOL/nat_simprocs.ML ~> src/HOL/Tools
9909    src/HOL/Real/float_arith.ML ~> src/HOL/Tools
9910    src/HOL/Real/float_syntax.ML ~> src/HOL/Tools
9911    src/HOL/Real/rat_arith.ML ~> src/HOL/Tools
9912    src/HOL/Real/real_arith.ML ~> src/HOL/Tools
9913
9914    src/HOL/Library/Array.thy ~> src/HOL/Imperative_HOL
9915    src/HOL/Library/Heap_Monad.thy ~> src/HOL/Imperative_HOL
9916    src/HOL/Library/Heap.thy ~> src/HOL/Imperative_HOL
9917    src/HOL/Library/Imperative_HOL.thy ~> src/HOL/Imperative_HOL
9918    src/HOL/Library/Ref.thy ~> src/HOL/Imperative_HOL
9919    src/HOL/Library/Relational.thy ~> src/HOL/Imperative_HOL
9920
9921* If methods "eval" and "evaluation" encounter a structured proof
9922state with !!/==>, only the conclusion is evaluated to True (if
9923possible), avoiding strange error messages.
9924
9925* Method "sizechange" automates termination proofs using (a
9926modification of) the size-change principle.  Requires SAT solver.  See
9927src/HOL/ex/Termination.thy for examples.
9928
9929* Simplifier: simproc for let expressions now unfolds if bound
9930variable occurs at most once in let expression body.  INCOMPATIBILITY.
9931
9932* Method "arith": Linear arithmetic now ignores all inequalities when
9933fast_arith_neq_limit is exceeded, instead of giving up entirely.
9934
9935* New attribute "arith" for facts that should always be used
9936automatically by arithmetic. It is intended to be used locally in
9937proofs, e.g.
9938
9939  assumes [arith]: "x > 0"
9940
9941Global usage is discouraged because of possible performance impact.
9942
9943* New classes "top" and "bot" with corresponding operations "top" and
9944"bot" in theory Orderings; instantiation of class "complete_lattice"
9945requires instantiation of classes "top" and "bot".  INCOMPATIBILITY.
9946
9947* Changed definition lemma "less_fun_def" in order to provide an
9948instance for preorders on functions; use lemma "less_le" instead.
9949INCOMPATIBILITY.
9950
9951* Theory Orderings: class "wellorder" moved here, with explicit
9952induction rule "less_induct" as assumption.  For instantiation of
9953"wellorder" by means of predicate "wf", use rule wf_wellorderI.
9954INCOMPATIBILITY.
9955
9956* Theory Orderings: added class "preorder" as superclass of "order".
9957INCOMPATIBILITY: Instantiation proofs for order, linorder
9958etc. slightly changed.  Some theorems named order_class.* now named
9959preorder_class.*.
9960
9961* Theory Relation: renamed "refl" to "refl_on", "reflexive" to "refl,
9962"diag" to "Id_on".
9963
9964* Theory Finite_Set: added a new fold combinator of type
9965
9966  ('a => 'b => 'b) => 'b => 'a set => 'b
9967
9968Occasionally this is more convenient than the old fold combinator
9969which is now defined in terms of the new one and renamed to
9970fold_image.
9971
9972* Theories Ring_and_Field and OrderedGroup: The lemmas "group_simps"
9973and "ring_simps" have been replaced by "algebra_simps" (which can be
9974extended with further lemmas!).  At the moment both still exist but
9975the former will disappear at some point.
9976
9977* Theory Power: Lemma power_Suc is now declared as a simp rule in
9978class recpower.  Type-specific simp rules for various recpower types
9979have been removed.  INCOMPATIBILITY, rename old lemmas as follows:
9980
9981rat_power_0    -> power_0
9982rat_power_Suc  -> power_Suc
9983realpow_0      -> power_0
9984realpow_Suc    -> power_Suc
9985complexpow_0   -> power_0
9986complexpow_Suc -> power_Suc
9987power_poly_0   -> power_0
9988power_poly_Suc -> power_Suc
9989
9990* Theories Ring_and_Field and Divides: Definition of "op dvd" has been
9991moved to separate class dvd in Ring_and_Field; a couple of lemmas on
9992dvd has been generalized to class comm_semiring_1.  Likewise a bunch
9993of lemmas from Divides has been generalized from nat to class
9994semiring_div.  INCOMPATIBILITY.  This involves the following theorem
9995renames resulting from duplicate elimination:
9996
9997    dvd_def_mod ~>          dvd_eq_mod_eq_0
9998    zero_dvd_iff ~>         dvd_0_left_iff
9999    dvd_0 ~>                dvd_0_right
10000    DIVISION_BY_ZERO_DIV ~> div_by_0
10001    DIVISION_BY_ZERO_MOD ~> mod_by_0
10002    mult_div ~>             div_mult_self2_is_id
10003    mult_mod ~>             mod_mult_self2_is_0
10004
10005* Theory IntDiv: removed many lemmas that are instances of class-based
10006generalizations (from Divides and Ring_and_Field).  INCOMPATIBILITY,
10007rename old lemmas as follows:
10008
10009dvd_diff               -> nat_dvd_diff
10010dvd_zminus_iff         -> dvd_minus_iff
10011mod_add1_eq            -> mod_add_eq
10012mod_mult1_eq           -> mod_mult_right_eq
10013mod_mult1_eq'          -> mod_mult_left_eq
10014mod_mult_distrib_mod   -> mod_mult_eq
10015nat_mod_add_left_eq    -> mod_add_left_eq
10016nat_mod_add_right_eq   -> mod_add_right_eq
10017nat_mod_div_trivial    -> mod_div_trivial
10018nat_mod_mod_trivial    -> mod_mod_trivial
10019zdiv_zadd_self1        -> div_add_self1
10020zdiv_zadd_self2        -> div_add_self2
10021zdiv_zmult_self1       -> div_mult_self2_is_id
10022zdiv_zmult_self2       -> div_mult_self1_is_id
10023zdvd_triv_left         -> dvd_triv_left
10024zdvd_triv_right        -> dvd_triv_right
10025zdvd_zmult_cancel_disj -> dvd_mult_cancel_left
10026zmod_eq0_zdvd_iff      -> dvd_eq_mod_eq_0[symmetric]
10027zmod_zadd_left_eq      -> mod_add_left_eq
10028zmod_zadd_right_eq     -> mod_add_right_eq
10029zmod_zadd_self1        -> mod_add_self1
10030zmod_zadd_self2        -> mod_add_self2
10031zmod_zadd1_eq          -> mod_add_eq
10032zmod_zdiff1_eq         -> mod_diff_eq
10033zmod_zdvd_zmod         -> mod_mod_cancel
10034zmod_zmod_cancel       -> mod_mod_cancel
10035zmod_zmult_self1       -> mod_mult_self2_is_0
10036zmod_zmult_self2       -> mod_mult_self1_is_0
10037zmod_1                 -> mod_by_1
10038zdiv_1                 -> div_by_1
10039zdvd_abs1              -> abs_dvd_iff
10040zdvd_abs2              -> dvd_abs_iff
10041zdvd_refl              -> dvd_refl
10042zdvd_trans             -> dvd_trans
10043zdvd_zadd              -> dvd_add
10044zdvd_zdiff             -> dvd_diff
10045zdvd_zminus_iff        -> dvd_minus_iff
10046zdvd_zminus2_iff       -> minus_dvd_iff
10047zdvd_zmultD            -> dvd_mult_right
10048zdvd_zmultD2           -> dvd_mult_left
10049zdvd_zmult_mono        -> mult_dvd_mono
10050zdvd_0_right           -> dvd_0_right
10051zdvd_0_left            -> dvd_0_left_iff
10052zdvd_1_left            -> one_dvd
10053zminus_dvd_iff         -> minus_dvd_iff
10054
10055* Theory Rational: 'Fract k 0' now equals '0'.  INCOMPATIBILITY.
10056
10057* The real numbers offer decimal input syntax: 12.34 is translated
10058into 1234/10^2. This translation is not reversed upon output.
10059
10060* Theory Library/Polynomial defines an abstract type 'a poly of
10061univariate polynomials with coefficients of type 'a.  In addition to
10062the standard ring operations, it also supports div and mod.  Code
10063generation is also supported, using list-style constructors.
10064
10065* Theory Library/Inner_Product defines a class of real_inner for real
10066inner product spaces, with an overloaded operation inner :: 'a => 'a
10067=> real.  Class real_inner is a subclass of real_normed_vector from
10068theory RealVector.
10069
10070* Theory Library/Product_Vector provides instances for the product
10071type 'a * 'b of several classes from RealVector and Inner_Product.
10072Definitions of addition, subtraction, scalar multiplication, norms,
10073and inner products are included.
10074
10075* Theory Library/Bit defines the field "bit" of integers modulo 2.  In
10076addition to the field operations, numerals and case syntax are also
10077supported.
10078
10079* Theory Library/Diagonalize provides constructive version of Cantor's
10080first diagonalization argument.
10081
10082* Theory Library/GCD: Curried operations gcd, lcm (for nat) and zgcd,
10083zlcm (for int); carried together from various gcd/lcm developements in
10084the HOL Distribution.  Constants zgcd and zlcm replace former igcd and
10085ilcm; corresponding theorems renamed accordingly.  INCOMPATIBILITY,
10086may recover tupled syntax as follows:
10087
10088    hide (open) const gcd
10089    abbreviation gcd where
10090      "gcd == (%(a, b). GCD.gcd a b)"
10091    notation (output)
10092      GCD.gcd ("gcd '(_, _')")
10093
10094The same works for lcm, zgcd, zlcm.
10095
10096* Theory Library/Nat_Infinity: added addition, numeral syntax and more
10097instantiations for algebraic structures.  Removed some duplicate
10098theorems.  Changes in simp rules.  INCOMPATIBILITY.
10099
10100* ML antiquotation @{code} takes a constant as argument and generates
10101corresponding code in background and inserts name of the corresponding
10102resulting ML value/function/datatype constructor binding in place.
10103All occurrences of @{code} with a single ML block are generated
10104simultaneously.  Provides a generic and safe interface for
10105instrumentalizing code generation.  See
10106src/HOL/Decision_Procs/Ferrack.thy for a more ambitious application.
10107In future you ought to refrain from ad-hoc compiling generated SML
10108code on the ML toplevel.  Note that (for technical reasons) @{code}
10109cannot refer to constants for which user-defined serializations are
10110set.  Refer to the corresponding ML counterpart directly in that
10111cases.
10112
10113* Command 'rep_datatype': instead of theorem names the command now
10114takes a list of terms denoting the constructors of the type to be
10115represented as datatype.  The characteristic theorems have to be
10116proven.  INCOMPATIBILITY.  Also observe that the following theorems
10117have disappeared in favour of existing ones:
10118
10119    unit_induct                 ~> unit.induct
10120    prod_induct                 ~> prod.induct
10121    sum_induct                  ~> sum.induct
10122    Suc_Suc_eq                  ~> nat.inject
10123    Suc_not_Zero Zero_not_Suc   ~> nat.distinct
10124
10125
10126*** HOL-Algebra ***
10127
10128* New locales for orders and lattices where the equivalence relation
10129is not restricted to equality.  INCOMPATIBILITY: all order and lattice
10130locales use a record structure with field eq for the equivalence.
10131
10132* New theory of factorial domains.
10133
10134* Units_l_inv and Units_r_inv are now simp rules by default.
10135INCOMPATIBILITY.  Simplifier proof that require deletion of l_inv
10136and/or r_inv will now also require deletion of these lemmas.
10137
10138* Renamed the following theorems, INCOMPATIBILITY:
10139
10140UpperD ~> Upper_memD
10141LowerD ~> Lower_memD
10142least_carrier ~> least_closed
10143greatest_carrier ~> greatest_closed
10144greatest_Lower_above ~> greatest_Lower_below
10145one_zero ~> carrier_one_zero
10146one_not_zero ~> carrier_one_not_zero  (collision with assumption)
10147
10148
10149*** HOL-Nominal ***
10150
10151* Nominal datatypes can now contain type-variables.
10152
10153* Commands 'nominal_inductive' and 'equivariance' work with local
10154theory targets.
10155
10156* Nominal primrec can now works with local theory targets and its
10157specification syntax now conforms to the general format as seen in
10158'inductive' etc.
10159
10160* Method "perm_simp" honours the standard simplifier attributes
10161(no_asm), (no_asm_use) etc.
10162
10163* The new predicate #* is defined like freshness, except that on the
10164left hand side can be a set or list of atoms.
10165
10166* Experimental command 'nominal_inductive2' derives strong induction
10167principles for inductive definitions.  In contrast to
10168'nominal_inductive', which can only deal with a fixed number of
10169binders, it can deal with arbitrary expressions standing for sets of
10170atoms to be avoided.  The only inductive definition we have at the
10171moment that needs this generalisation is the typing rule for Lets in
10172the algorithm W:
10173
10174 Gamma |- t1 : T1   (x,close Gamma T1)::Gamma |- t2 : T2   x#Gamma
10175 -----------------------------------------------------------------
10176         Gamma |- Let x be t1 in t2 : T2
10177
10178In this rule one wants to avoid all the binders that are introduced by
10179"close Gamma T1".  We are looking for other examples where this
10180feature might be useful.  Please let us know.
10181
10182
10183*** HOLCF ***
10184
10185* Reimplemented the simplification procedure for proving continuity
10186subgoals.  The new simproc is extensible; users can declare additional
10187continuity introduction rules with the attribute [cont2cont].
10188
10189* The continuity simproc now uses a different introduction rule for
10190solving continuity subgoals on terms with lambda abstractions.  In
10191some rare cases the new simproc may fail to solve subgoals that the
10192old one could solve, and "simp add: cont2cont_LAM" may be necessary.
10193Potential INCOMPATIBILITY.
10194
10195* Command 'fixrec': specification syntax now conforms to the general
10196format as seen in 'inductive' etc.  See src/HOLCF/ex/Fixrec_ex.thy for
10197examples.  INCOMPATIBILITY.
10198
10199
10200*** ZF ***
10201
10202* Proof of Zorn's Lemma for partial orders.
10203
10204
10205*** ML ***
10206
10207* Multithreading for Poly/ML 5.1/5.2 is no longer supported, only for
10208Poly/ML 5.2.1 or later.  Important note: the TimeLimit facility
10209depends on multithreading, so timouts will not work before Poly/ML
102105.2.1!
10211
10212* High-level support for concurrent ML programming, see
10213src/Pure/Cuncurrent.  The data-oriented model of "future values" is
10214particularly convenient to organize independent functional
10215computations.  The concept of "synchronized variables" provides a
10216higher-order interface for components with shared state, avoiding the
10217delicate details of mutexes and condition variables.  (Requires
10218Poly/ML 5.2.1 or later.)
10219
10220* ML bindings produced via Isar commands are stored within the Isar
10221context (theory or proof).  Consequently, commands like 'use' and 'ML'
10222become thread-safe and work with undo as expected (concerning
10223top-level bindings, not side-effects on global references).
10224INCOMPATIBILITY, need to provide proper Isar context when invoking the
10225compiler at runtime; really global bindings need to be given outside a
10226theory.  (Requires Poly/ML 5.2 or later.)
10227
10228* Command 'ML_prf' is analogous to 'ML' but works within a proof
10229context.  Top-level ML bindings are stored within the proof context in
10230a purely sequential fashion, disregarding the nested proof structure.
10231ML bindings introduced by 'ML_prf' are discarded at the end of the
10232proof.  (Requires Poly/ML 5.2 or later.)
10233
10234* Simplified ML attribute and method setup, cf. functions Attrib.setup
10235and Method.setup, as well as Isar commands 'attribute_setup' and
10236'method_setup'.  INCOMPATIBILITY for 'method_setup', need to simplify
10237existing code accordingly, or use plain 'setup' together with old
10238Method.add_method.
10239
10240* Simplified ML oracle interface Thm.add_oracle promotes 'a -> cterm
10241to 'a -> thm, while results are always tagged with an authentic oracle
10242name.  The Isar command 'oracle' is now polymorphic, no argument type
10243is specified.  INCOMPATIBILITY, need to simplify existing oracle code
10244accordingly.  Note that extra performance may be gained by producing
10245the cterm carefully, avoiding slow Thm.cterm_of.
10246
10247* Simplified interface for defining document antiquotations via
10248ThyOutput.antiquotation, ThyOutput.output, and optionally
10249ThyOutput.maybe_pretty_source.  INCOMPATIBILITY, need to simplify user
10250antiquotations accordingly, see src/Pure/Thy/thy_output.ML for common
10251examples.
10252
10253* More systematic treatment of long names, abstract name bindings, and
10254name space operations.  Basic operations on qualified names have been
10255move from structure NameSpace to Long_Name, e.g. Long_Name.base_name,
10256Long_Name.append.  Old type bstring has been mostly replaced by
10257abstract type binding (see structure Binding), which supports precise
10258qualification by packages and local theory targets, as well as proper
10259tracking of source positions.  INCOMPATIBILITY, need to wrap old
10260bstring values into Binding.name, or better pass through abstract
10261bindings everywhere.  See further src/Pure/General/long_name.ML,
10262src/Pure/General/binding.ML and src/Pure/General/name_space.ML
10263
10264* Result facts (from PureThy.note_thms, ProofContext.note_thms,
10265LocalTheory.note etc.) now refer to the *full* internal name, not the
10266bstring as before.  INCOMPATIBILITY, not detected by ML type-checking!
10267
10268* Disposed old type and term read functions (Sign.read_def_typ,
10269Sign.read_typ, Sign.read_def_terms, Sign.read_term,
10270Thm.read_def_cterms, Thm.read_cterm etc.).  INCOMPATIBILITY, should
10271use regular Syntax.read_typ, Syntax.read_term, Syntax.read_typ_global,
10272Syntax.read_term_global etc.; see also OldGoals.read_term as last
10273resort for legacy applications.
10274
10275* Disposed old declarations, tactics, tactic combinators that refer to
10276the simpset or claset of an implicit theory (such as Addsimps,
10277Simp_tac, SIMPSET).  INCOMPATIBILITY, should use @{simpset} etc. in
10278embedded ML text, or local_simpset_of with a proper context passed as
10279explicit runtime argument.
10280
10281* Rules and tactics that read instantiations (read_instantiate,
10282res_inst_tac, thin_tac, subgoal_tac etc.) now demand a proper proof
10283context, which is required for parsing and type-checking.  Moreover,
10284the variables are specified as plain indexnames, not string encodings
10285thereof.  INCOMPATIBILITY.
10286
10287* Generic Toplevel.add_hook interface allows to analyze the result of
10288transactions.  E.g. see src/Pure/ProofGeneral/proof_general_pgip.ML
10289for theorem dependency output of transactions resulting in a new
10290theory state.
10291
10292* ML antiquotations: block-structured compilation context indicated by
10293\<lbrace> ... \<rbrace>; additional antiquotation forms:
10294
10295  @{binding name}                         - basic name binding
10296  @{let ?pat = term}                      - term abbreviation (HO matching)
10297  @{note name = fact}                     - fact abbreviation
10298  @{thm fact}                             - singleton fact (with attributes)
10299  @{thms fact}                            - general fact (with attributes)
10300  @{lemma prop by method}                 - singleton goal
10301  @{lemma prop by meth1 meth2}            - singleton goal
10302  @{lemma prop1 ... propN by method}      - general goal
10303  @{lemma prop1 ... propN by meth1 meth2} - general goal
10304  @{lemma (open) ...}                     - open derivation
10305
10306
10307*** System ***
10308
10309* The Isabelle "emacs" tool provides a specific interface to invoke
10310Proof General / Emacs, with more explicit failure if that is not
10311installed (the old isabelle-interface script silently falls back on
10312isabelle-process).  The PROOFGENERAL_HOME setting determines the
10313installation location of the Proof General distribution.
10314
10315* Isabelle/lib/classes/Pure.jar provides basic support to integrate
10316the Isabelle process into a JVM/Scala application.  See
10317Isabelle/lib/jedit/plugin for a minimal example.  (The obsolete Java
10318process wrapper has been discontinued.)
10319
10320* Added homegrown Isabelle font with unicode layout, see lib/fonts.
10321
10322* Various status messages (with exact source position information) are
10323emitted, if proper markup print mode is enabled.  This allows
10324user-interface components to provide detailed feedback on internal
10325prover operations.
10326
10327
10328
10329New in Isabelle2008 (June 2008)
10330-------------------------------
10331
10332*** General ***
10333
10334* The Isabelle/Isar Reference Manual (isar-ref) has been reorganized
10335and updated, with formally checked references as hyperlinks.
10336
10337* Theory loader: use_thy (and similar operations) no longer set the
10338implicit ML context, which was occasionally hard to predict and in
10339conflict with concurrency.  INCOMPATIBILITY, use ML within Isar which
10340provides a proper context already.
10341
10342* Theory loader: old-style ML proof scripts being *attached* to a thy
10343file are no longer supported.  INCOMPATIBILITY, regular 'uses' and
10344'use' within a theory file will do the job.
10345
10346* Name space merge now observes canonical order, i.e. the second space
10347is inserted into the first one, while existing entries in the first
10348space take precedence.  INCOMPATIBILITY in rare situations, may try to
10349swap theory imports.
10350
10351* Syntax: symbol \<chi> is now considered a letter.  Potential
10352INCOMPATIBILITY in identifier syntax etc.
10353
10354* Outer syntax: string tokens no longer admit escaped white space,
10355which was an accidental (undocumented) feature.  INCOMPATIBILITY, use
10356white space without escapes.
10357
10358* Outer syntax: string tokens may contain arbitrary character codes
10359specified via 3 decimal digits (as in SML).  E.g. "foo\095bar" for
10360"foo_bar".
10361
10362
10363*** Pure ***
10364
10365* Context-dependent token translations.  Default setup reverts locally
10366fixed variables, and adds hilite markup for undeclared frees.
10367
10368* Unused theorems can be found using the new command 'unused_thms'.
10369There are three ways of invoking it:
10370
10371(1) unused_thms
10372     Only finds unused theorems in the current theory.
10373
10374(2) unused_thms thy_1 ... thy_n -
10375     Finds unused theorems in the current theory and all of its ancestors,
10376     excluding the theories thy_1 ... thy_n and all of their ancestors.
10377
10378(3) unused_thms thy_1 ... thy_n - thy'_1 ... thy'_m
10379     Finds unused theorems in the theories thy'_1 ... thy'_m and all of
10380     their ancestors, excluding the theories thy_1 ... thy_n and all of
10381     their ancestors.
10382
10383In order to increase the readability of the list produced by
10384unused_thms, theorems that have been created by a particular instance
10385of a theory command such as 'inductive' or 'function' are considered
10386to belong to the same "group", meaning that if at least one theorem in
10387this group is used, the other theorems in the same group are no longer
10388reported as unused.  Moreover, if all theorems in the group are
10389unused, only one theorem in the group is displayed.
10390
10391Note that proof objects have to be switched on in order for
10392unused_thms to work properly (i.e. !proofs must be >= 1, which is
10393usually the case when using Proof General with the default settings).
10394
10395* Authentic naming of facts disallows ad-hoc overwriting of previous
10396theorems within the same name space.  INCOMPATIBILITY, need to remove
10397duplicate fact bindings, or even accidental fact duplications.  Note
10398that tools may maintain dynamically scoped facts systematically, using
10399PureThy.add_thms_dynamic.
10400
10401* Command 'hide' now allows to hide from "fact" name space as well.
10402
10403* Eliminated destructive theorem database, simpset, claset, and
10404clasimpset.  Potential INCOMPATIBILITY, really need to observe linear
10405update of theories within ML code.
10406
10407* Eliminated theory ProtoPure and CPure, leaving just one Pure theory.
10408INCOMPATIBILITY, object-logics depending on former Pure require
10409additional setup PureThy.old_appl_syntax_setup; object-logics
10410depending on former CPure need to refer to Pure.
10411
10412* Commands 'use' and 'ML' are now purely functional, operating on
10413theory/local_theory.  Removed former 'ML_setup' (on theory), use 'ML'
10414instead.  Added 'ML_val' as mere diagnostic replacement for 'ML'.
10415INCOMPATIBILITY.
10416
10417* Command 'setup': discontinued implicit version with ML reference.
10418
10419* Instantiation target allows for simultaneous specification of class
10420instance operations together with an instantiation proof.
10421Type-checking phase allows to refer to class operations uniformly.
10422See src/HOL/Complex/Complex.thy for an Isar example and
10423src/HOL/Library/Eval.thy for an ML example.
10424
10425* Indexing of literal facts: be more serious about including only
10426facts from the visible specification/proof context, but not the
10427background context (locale etc.).  Affects `prop` notation and method
10428"fact".  INCOMPATIBILITY: need to name facts explicitly in rare
10429situations.
10430
10431* Method "cases", "induct", "coinduct": removed obsolete/undocumented
10432"(open)" option, which used to expose internal bound variables to the
10433proof text.
10434
10435* Isar statements: removed obsolete case "rule_context".
10436INCOMPATIBILITY, better use explicit fixes/assumes.
10437
10438* Locale proofs: default proof step now includes 'unfold_locales';
10439hence 'proof' without argument may be used to unfold locale
10440predicates.
10441
10442
10443*** Document preparation ***
10444
10445* Simplified pdfsetup.sty: color/hyperref is used unconditionally for
10446both pdf and dvi (hyperlinks usually work in xdvi as well); removed
10447obsolete thumbpdf setup (contemporary PDF viewers do this on the
10448spot); renamed link color from "darkblue" to "linkcolor" (default
10449value unchanged, can be redefined via \definecolor); no longer sets
10450"a4paper" option (unnecessary or even intrusive).
10451
10452* Antiquotation @{lemma A method} proves proposition A by the given
10453method (either a method name or a method name plus (optional) method
10454arguments in parentheses) and prints A just like @{prop A}.
10455
10456
10457*** HOL ***
10458
10459* New primrec package.  Specification syntax conforms in style to
10460definition/function/....  No separate induction rule is provided.  The
10461"primrec" command distinguishes old-style and new-style specifications
10462by syntax.  The former primrec package is now named OldPrimrecPackage.
10463When adjusting theories, beware: constants stemming from new-style
10464primrec specifications have authentic syntax.
10465
10466* Metis prover is now an order of magnitude faster, and also works
10467with multithreading.
10468
10469* Metis: the maximum number of clauses that can be produced from a
10470theorem is now given by the attribute max_clauses.  Theorems that
10471exceed this number are ignored, with a warning printed.
10472
10473* Sledgehammer no longer produces structured proofs by default. To
10474enable, declare [[sledgehammer_full = true]].  Attributes
10475reconstruction_modulus, reconstruction_sorts renamed
10476sledgehammer_modulus, sledgehammer_sorts.  INCOMPATIBILITY.
10477
10478* Method "induct_scheme" derives user-specified induction rules
10479from well-founded induction and completeness of patterns. This factors
10480out some operations that are done internally by the function package
10481and makes them available separately.  See
10482src/HOL/ex/Induction_Scheme.thy for examples.
10483
10484* More flexible generation of measure functions for termination
10485proofs: Measure functions can be declared by proving a rule of the
10486form "is_measure f" and giving it the [measure_function] attribute.
10487The "is_measure" predicate is logically meaningless (always true), and
10488just guides the heuristic.  To find suitable measure functions, the
10489termination prover sets up the goal "is_measure ?f" of the appropriate
10490type and generates all solutions by Prolog-style backward proof using
10491the declared rules.
10492
10493This setup also deals with rules like
10494
10495  "is_measure f ==> is_measure (list_size f)"
10496
10497which accommodates nested datatypes that recurse through lists.
10498Similar rules are predeclared for products and option types.
10499
10500* Turned the type of sets "'a set" into an abbreviation for "'a => bool"
10501
10502  INCOMPATIBILITIES:
10503
10504  - Definitions of overloaded constants on sets have to be replaced by
10505    definitions on => and bool.
10506
10507  - Some definitions of overloaded operators on sets can now be proved
10508    using the definitions of the operators on => and bool.  Therefore,
10509    the following theorems have been renamed:
10510
10511      subset_def   -> subset_eq
10512      psubset_def  -> psubset_eq
10513      set_diff_def -> set_diff_eq
10514      Compl_def    -> Compl_eq
10515      Sup_set_def  -> Sup_set_eq
10516      Inf_set_def  -> Inf_set_eq
10517      sup_set_def  -> sup_set_eq
10518      inf_set_def  -> inf_set_eq
10519
10520  - Due to the incompleteness of the HO unification algorithm, some
10521    rules such as subst may require manual instantiation, if some of
10522    the unknowns in the rule is a set.
10523
10524  - Higher order unification and forward proofs:
10525    The proof pattern
10526
10527      have "P (S::'a set)" <...>
10528      then have "EX S. P S" ..
10529
10530    no longer works (due to the incompleteness of the HO unification
10531    algorithm) and must be replaced by the pattern
10532
10533      have "EX S. P S"
10534      proof
10535        show "P S" <...>
10536      qed
10537
10538  - Calculational reasoning with subst (or similar rules):
10539    The proof pattern
10540
10541      have "P (S::'a set)" <...>
10542      also have "S = T" <...>
10543      finally have "P T" .
10544
10545    no longer works (for similar reasons as the previous example) and
10546    must be replaced by something like
10547
10548      have "P (S::'a set)" <...>
10549      moreover have "S = T" <...>
10550      ultimately have "P T" by simp
10551
10552  - Tactics or packages written in ML code:
10553    Code performing pattern matching on types via
10554
10555      Type ("set", [T]) => ...
10556
10557    must be rewritten. Moreover, functions like strip_type or
10558    binder_types no longer return the right value when applied to a
10559    type of the form
10560
10561      T1 => ... => Tn => U => bool
10562
10563    rather than
10564
10565      T1 => ... => Tn => U set
10566
10567* Merged theories Wellfounded_Recursion, Accessible_Part and
10568Wellfounded_Relations to theory Wellfounded.
10569
10570* Explicit class "eq" for executable equality.  INCOMPATIBILITY.
10571
10572* Class finite no longer treats UNIV as class parameter.  Use class
10573enum from theory Library/Enum instead to achieve a similar effect.
10574INCOMPATIBILITY.
10575
10576* Theory List: rule list_induct2 now has explicitly named cases "Nil"
10577and "Cons".  INCOMPATIBILITY.
10578
10579* HOL (and FOL): renamed variables in rules imp_elim and swap.
10580Potential INCOMPATIBILITY.
10581
10582* Theory Product_Type: duplicated lemmas split_Pair_apply and
10583injective_fst_snd removed, use split_eta and prod_eqI instead.
10584Renamed upd_fst to apfst and upd_snd to apsnd.  INCOMPATIBILITY.
10585
10586* Theory Nat: removed redundant lemmas that merely duplicate lemmas of
10587the same name in theory Orderings:
10588
10589  less_trans
10590  less_linear
10591  le_imp_less_or_eq
10592  le_less_trans
10593  less_le_trans
10594  less_not_sym
10595  less_asym
10596
10597Renamed less_imp_le to less_imp_le_nat, and less_irrefl to
10598less_irrefl_nat.  Potential INCOMPATIBILITY due to more general types
10599and different variable names.
10600
10601* Library/Option_ord.thy: Canonical order on option type.
10602
10603* Library/RBT.thy: Red-black trees, an efficient implementation of
10604finite maps.
10605
10606* Library/Countable.thy: Type class for countable types.
10607
10608* Theory Int: The representation of numerals has changed.  The infix
10609operator BIT and the bit datatype with constructors B0 and B1 have
10610disappeared.  INCOMPATIBILITY, use "Int.Bit0 x" and "Int.Bit1 y" in
10611place of "x BIT bit.B0" and "y BIT bit.B1", respectively.  Theorems
10612involving BIT, B0, or B1 have been renamed with "Bit0" or "Bit1"
10613accordingly.
10614
10615* Theory Nat: definition of <= and < on natural numbers no longer
10616depend on well-founded relations.  INCOMPATIBILITY.  Definitions
10617le_def and less_def have disappeared.  Consider lemmas not_less
10618[symmetric, where ?'a = nat] and less_eq [symmetric] instead.
10619
10620* Theory Finite_Set: locales ACf, ACe, ACIf, ACIfSL and ACIfSLlin
10621(whose purpose mainly is for various fold_set functionals) have been
10622abandoned in favor of the existing algebraic classes
10623ab_semigroup_mult, comm_monoid_mult, ab_semigroup_idem_mult,
10624lower_semilattice (resp. upper_semilattice) and linorder.
10625INCOMPATIBILITY.
10626
10627* Theory Transitive_Closure: induct and cases rules now declare proper
10628case_names ("base" and "step").  INCOMPATIBILITY.
10629
10630* Theorem Inductive.lfp_ordinal_induct generalized to complete
10631lattices.  The form set-specific version is available as
10632Inductive.lfp_ordinal_induct_set.
10633
10634* Renamed theorems "power.simps" to "power_int.simps".
10635INCOMPATIBILITY.
10636
10637* Class semiring_div provides basic abstract properties of semirings
10638with division and modulo operations.  Subsumes former class dvd_mod.
10639
10640* Merged theories IntDef, Numeral and IntArith into unified theory
10641Int.  INCOMPATIBILITY.
10642
10643* Theory Library/Code_Index: type "index" now represents natural
10644numbers rather than integers.  INCOMPATIBILITY.
10645
10646* New class "uminus" with operation "uminus" (split of from class
10647"minus" which now only has operation "minus", binary).
10648INCOMPATIBILITY.
10649
10650* Constants "card", "internal_split", "option_map" now with authentic
10651syntax.  INCOMPATIBILITY.
10652
10653* Definitions subset_def, psubset_def, set_diff_def, Compl_def,
10654le_bool_def, less_bool_def, le_fun_def, less_fun_def, inf_bool_def,
10655sup_bool_def, Inf_bool_def, Sup_bool_def, inf_fun_def, sup_fun_def,
10656Inf_fun_def, Sup_fun_def, inf_set_def, sup_set_def, Inf_set_def,
10657Sup_set_def, le_def, less_def, option_map_def now with object
10658equality.  INCOMPATIBILITY.
10659
10660* Records. Removed K_record, and replaced it by pure lambda term
10661%x. c. The simplifier setup is now more robust against eta expansion.
10662INCOMPATIBILITY: in cases explicitly referring to K_record.
10663
10664* Library/Multiset: {#a, b, c#} abbreviates {#a#} + {#b#} + {#c#}.
10665
10666* Library/ListVector: new theory of arithmetic vector operations.
10667
10668* Library/Order_Relation: new theory of various orderings as sets of
10669pairs.  Defines preorders, partial orders, linear orders and
10670well-orders on sets and on types.
10671
10672
10673*** ZF ***
10674
10675* Renamed some theories to allow to loading both ZF and HOL in the
10676same session:
10677
10678  Datatype  -> Datatype_ZF
10679  Inductive -> Inductive_ZF
10680  Int       -> Int_ZF
10681  IntDiv    -> IntDiv_ZF
10682  Nat       -> Nat_ZF
10683  List      -> List_ZF
10684  Main      -> Main_ZF
10685
10686INCOMPATIBILITY: ZF theories that import individual theories below
10687Main might need to be adapted.  Regular theory Main is still
10688available, as trivial extension of Main_ZF.
10689
10690
10691*** ML ***
10692
10693* ML within Isar: antiquotation @{const name} or @{const
10694name(typargs)} produces statically-checked Const term.
10695
10696* Functor NamedThmsFun: data is available to the user as dynamic fact
10697(of the same name).  Removed obsolete print command.
10698
10699* Removed obsolete "use_legacy_bindings" function.
10700
10701* The ``print mode'' is now a thread-local value derived from a global
10702template (the former print_mode reference), thus access becomes
10703non-critical.  The global print_mode reference is for session
10704management only; user-code should use print_mode_value,
10705print_mode_active, PrintMode.setmp etc.  INCOMPATIBILITY.
10706
10707* Functions system/system_out provide a robust way to invoke external
10708shell commands, with propagation of interrupts (requires Poly/ML
107095.2.1).  Do not use OS.Process.system etc. from the basis library!
10710
10711
10712*** System ***
10713
10714* Default settings: PROOFGENERAL_OPTIONS no longer impose xemacs ---
10715in accordance with Proof General 3.7, which prefers GNU emacs.
10716
10717* isatool tty runs Isabelle process with plain tty interaction;
10718optional line editor may be specified via ISABELLE_LINE_EDITOR
10719setting, the default settings attempt to locate "ledit" and "rlwrap".
10720
10721* isatool browser now works with Cygwin as well, using general
10722"javapath" function defined in Isabelle process environment.
10723
10724* YXML notation provides a simple and efficient alternative to
10725standard XML transfer syntax.  See src/Pure/General/yxml.ML and
10726isatool yxml as described in the Isabelle system manual.
10727
10728* JVM class isabelle.IsabelleProcess (located in Isabelle/lib/classes)
10729provides general wrapper for managing an Isabelle process in a robust
10730fashion, with ``cooked'' output from stdin/stderr.
10731
10732* Rudimentary Isabelle plugin for jEdit (see Isabelle/lib/jedit),
10733based on Isabelle/JVM process wrapper (see Isabelle/lib/classes).
10734
10735* Removed obsolete THIS_IS_ISABELLE_BUILD feature.  NB: the documented
10736way of changing the user's settings is via
10737ISABELLE_HOME_USER/etc/settings, which is a fully featured bash
10738script.
10739
10740* Multithreading.max_threads := 0 refers to the number of actual CPU
10741cores of the underlying machine, which is a good starting point for
10742optimal performance tuning.  The corresponding usedir option -M allows
10743"max" as an alias for "0".  WARNING: does not work on certain versions
10744of Mac OS (with Poly/ML 5.1).
10745
10746* isabelle-process: non-ML sessions are run with "nice", to reduce the
10747adverse effect of Isabelle flooding interactive front-ends (notably
10748ProofGeneral / XEmacs).
10749
10750
10751
10752New in Isabelle2007 (November 2007)
10753-----------------------------------
10754
10755*** General ***
10756
10757* More uniform information about legacy features, notably a
10758warning/error of "Legacy feature: ...", depending on the state of the
10759tolerate_legacy_features flag (default true). FUTURE INCOMPATIBILITY:
10760legacy features will disappear eventually.
10761
10762* Theory syntax: the header format ``theory A = B + C:'' has been
10763discontinued in favour of ``theory A imports B C begin''.  Use isatool
10764fixheaders to convert existing theory files.  INCOMPATIBILITY.
10765
10766* Theory syntax: the old non-Isar theory file format has been
10767discontinued altogether.  Note that ML proof scripts may still be used
10768with Isar theories; migration is usually quite simple with the ML
10769function use_legacy_bindings.  INCOMPATIBILITY.
10770
10771* Theory syntax: some popular names (e.g. 'class', 'declaration',
10772'fun', 'help', 'if') are now keywords.  INCOMPATIBILITY, use double
10773quotes.
10774
10775* Theory loader: be more serious about observing the static theory
10776header specifications (including optional directories), but not the
10777accidental file locations of previously successful loads.  The strict
10778update policy of former update_thy is now already performed by
10779use_thy, so the former has been removed; use_thys updates several
10780theories simultaneously, just as 'imports' within a theory header
10781specification, but without merging the results.  Potential
10782INCOMPATIBILITY: may need to refine theory headers and commands
10783ROOT.ML which depend on load order.
10784
10785* Theory loader: optional support for content-based file
10786identification, instead of the traditional scheme of full physical
10787path plus date stamp; configured by the ISABELLE_FILE_IDENT setting
10788(cf. the system manual).  The new scheme allows to work with
10789non-finished theories in persistent session images, such that source
10790files may be moved later on without requiring reloads.
10791
10792* Theory loader: old-style ML proof scripts being *attached* to a thy
10793file (with the same base name as the theory) are considered a legacy
10794feature, which will disappear eventually. Even now, the theory loader
10795no longer maintains dependencies on such files.
10796
10797* Syntax: the scope for resolving ambiguities via type-inference is
10798now limited to individual terms, instead of whole simultaneous
10799specifications as before. This greatly reduces the complexity of the
10800syntax module and improves flexibility by separating parsing and
10801type-checking. INCOMPATIBILITY: additional type-constraints (explicit
10802'fixes' etc.) are required in rare situations.
10803
10804* Syntax: constants introduced by new-style packages ('definition',
10805'abbreviation' etc.) are passed through the syntax module in
10806``authentic mode''. This means that associated mixfix annotations
10807really stick to such constants, independently of potential name space
10808ambiguities introduced later on. INCOMPATIBILITY: constants in parse
10809trees are represented slightly differently, may need to adapt syntax
10810translations accordingly. Use CONST marker in 'translations' and
10811@{const_syntax} antiquotation in 'parse_translation' etc.
10812
10813* Legacy goal package: reduced interface to the bare minimum required
10814to keep existing proof scripts running.  Most other user-level
10815functions are now part of the OldGoals structure, which is *not* open
10816by default (consider isatool expandshort before open OldGoals).
10817Removed top_sg, prin, printyp, pprint_term/typ altogether, because
10818these tend to cause confusion about the actual goal (!) context being
10819used here, which is not necessarily the same as the_context().
10820
10821* Command 'find_theorems': supports "*" wild-card in "name:"
10822criterion; "with_dups" option.  Certain ProofGeneral versions might
10823support a specific search form (see ProofGeneral/CHANGES).
10824
10825* The ``prems limit'' option (cf. ProofContext.prems_limit) is now -1
10826by default, which means that "prems" (and also "fixed variables") are
10827suppressed from proof state output.  Note that the ProofGeneral
10828settings mechanism allows to change and save options persistently, but
10829older versions of Isabelle will fail to start up if a negative prems
10830limit is imposed.
10831
10832* Local theory targets may be specified by non-nested blocks of
10833``context/locale/class ... begin'' followed by ``end''.  The body may
10834contain definitions, theorems etc., including any derived mechanism
10835that has been implemented on top of these primitives.  This concept
10836generalizes the existing ``theorem (in ...)'' towards more versatility
10837and scalability.
10838
10839* Proof General interface: proper undo of final 'end' command;
10840discontinued Isabelle/classic mode (ML proof scripts).
10841
10842
10843*** Document preparation ***
10844
10845* Added antiquotation @{theory name} which prints the given name,
10846after checking that it refers to a valid ancestor theory in the
10847current context.
10848
10849* Added antiquotations @{ML_type text} and @{ML_struct text} which
10850check the given source text as ML type/structure, printing verbatim.
10851
10852* Added antiquotation @{abbrev "c args"} which prints the abbreviation
10853"c args == rhs" given in the current context.  (Any number of
10854arguments may be given on the LHS.)
10855
10856
10857*** Pure ***
10858
10859* The 'class' package offers a combination of axclass and locale to
10860achieve Haskell-like type classes in Isabelle.  Definitions and
10861theorems within a class context produce both relative results (with
10862implicit parameters according to the locale context), and polymorphic
10863constants with qualified polymorphism (according to the class
10864context).  Within the body context of a 'class' target, a separate
10865syntax layer ("user space type system") takes care of converting
10866between global polymorphic consts and internal locale representation.
10867See src/HOL/ex/Classpackage.thy for examples (as well as main HOL).
10868"isatool doc classes" provides a tutorial.
10869
10870* Generic code generator framework allows to generate executable
10871code for ML and Haskell (including Isabelle classes).  A short usage
10872sketch:
10873
10874    internal compilation:
10875        export_code <list of constants (term syntax)> in SML
10876    writing SML code to a file:
10877        export_code <list of constants (term syntax)> in SML <filename>
10878    writing OCaml code to a file:
10879        export_code <list of constants (term syntax)> in OCaml <filename>
10880    writing Haskell code to a bunch of files:
10881        export_code <list of constants (term syntax)> in Haskell <filename>
10882
10883    evaluating closed propositions to True/False using code generation:
10884        method ``eval''
10885
10886Reasonable default setup of framework in HOL.
10887
10888Theorem attributs for selecting and transforming function equations theorems:
10889
10890    [code fun]:        select a theorem as function equation for a specific constant
10891    [code fun del]:    deselect a theorem as function equation for a specific constant
10892    [code inline]:     select an equation theorem for unfolding (inlining) in place
10893    [code inline del]: deselect an equation theorem for unfolding (inlining) in place
10894
10895User-defined serializations (target in {SML, OCaml, Haskell}):
10896
10897    code_const <and-list of constants (term syntax)>
10898      {(target) <and-list of const target syntax>}+
10899
10900    code_type <and-list of type constructors>
10901      {(target) <and-list of type target syntax>}+
10902
10903    code_instance <and-list of instances>
10904      {(target)}+
10905        where instance ::= <type constructor> :: <class>
10906
10907    code_class <and_list of classes>
10908      {(target) <and-list of class target syntax>}+
10909        where class target syntax ::= <class name> {where {<classop> == <target syntax>}+}?
10910
10911code_instance and code_class only are effective to target Haskell.
10912
10913For example usage see src/HOL/ex/Codegenerator.thy and
10914src/HOL/ex/Codegenerator_Pretty.thy.  A separate tutorial on code
10915generation from Isabelle/HOL theories is available via "isatool doc
10916codegen".
10917
10918* Code generator: consts in 'consts_code' Isar commands are now
10919referred to by usual term syntax (including optional type
10920annotations).
10921
10922* Command 'no_translations' removes translation rules from theory
10923syntax.
10924
10925* Overloaded definitions are now actually checked for acyclic
10926dependencies.  The overloading scheme is slightly more general than
10927that of Haskell98, although Isabelle does not demand an exact
10928correspondence to type class and instance declarations.
10929INCOMPATIBILITY, use ``defs (unchecked overloaded)'' to admit more
10930exotic versions of overloading -- at the discretion of the user!
10931
10932Polymorphic constants are represented via type arguments, i.e. the
10933instantiation that matches an instance against the most general
10934declaration given in the signature.  For example, with the declaration
10935c :: 'a => 'a => 'a, an instance c :: nat => nat => nat is represented
10936as c(nat).  Overloading is essentially simultaneous structural
10937recursion over such type arguments.  Incomplete specification patterns
10938impose global constraints on all occurrences, e.g. c('a * 'a) on the
10939LHS means that more general c('a * 'b) will be disallowed on any RHS.
10940Command 'print_theory' outputs the normalized system of recursive
10941equations, see section "definitions".
10942
10943* Configuration options are maintained within the theory or proof
10944context (with name and type bool/int/string), providing a very simple
10945interface to a poor-man's version of general context data.  Tools may
10946declare options in ML (e.g. using Attrib.config_int) and then refer to
10947these values using Config.get etc.  Users may change options via an
10948associated attribute of the same name.  This form of context
10949declaration works particularly well with commands 'declare' or
10950'using', for example ``declare [[foo = 42]]''.  Thus it has become
10951very easy to avoid global references, which would not observe Isar
10952toplevel undo/redo and fail to work with multithreading.
10953
10954Various global ML references of Pure and HOL have been turned into
10955configuration options:
10956
10957  Unify.search_bound		unify_search_bound
10958  Unify.trace_bound		unify_trace_bound
10959  Unify.trace_simp		unify_trace_simp
10960  Unify.trace_types		unify_trace_types
10961  Simplifier.simp_depth_limit	simp_depth_limit
10962  Blast.depth_limit		blast_depth_limit
10963  DatatypeProp.dtK		datatype_distinctness_limit
10964  fast_arith_neq_limit  	fast_arith_neq_limit
10965  fast_arith_split_limit	fast_arith_split_limit
10966
10967* Named collections of theorems may be easily installed as context
10968data using the functor NamedThmsFun (see also
10969src/Pure/Tools/named_thms.ML).  The user may add or delete facts via
10970attributes; there is also a toplevel print command.  This facility is
10971just a common case of general context data, which is the preferred way
10972for anything more complex than just a list of facts in canonical
10973order.
10974
10975* Isar: command 'declaration' augments a local theory by generic
10976declaration functions written in ML.  This enables arbitrary content
10977being added to the context, depending on a morphism that tells the
10978difference of the original declaration context wrt. the application
10979context encountered later on.
10980
10981* Isar: proper interfaces for simplification procedures.  Command
10982'simproc_setup' declares named simprocs (with match patterns, and body
10983text in ML).  Attribute "simproc" adds/deletes simprocs in the current
10984context.  ML antiquotation @{simproc name} retrieves named simprocs.
10985
10986* Isar: an extra pair of brackets around attribute declarations
10987abbreviates a theorem reference involving an internal dummy fact,
10988which will be ignored later --- only the effect of the attribute on
10989the background context will persist.  This form of in-place
10990declarations is particularly useful with commands like 'declare' and
10991'using', for example ``have A using [[simproc a]] by simp''.
10992
10993* Isar: method "assumption" (and implicit closing of subproofs) now
10994takes simple non-atomic goal assumptions into account: after applying
10995an assumption as a rule the resulting subgoals are solved by atomic
10996assumption steps.  This is particularly useful to finish 'obtain'
10997goals, such as "!!x. (!!x. P x ==> thesis) ==> P x ==> thesis",
10998without referring to the original premise "!!x. P x ==> thesis" in the
10999Isar proof context.  POTENTIAL INCOMPATIBILITY: method "assumption" is
11000more permissive.
11001
11002* Isar: implicit use of prems from the Isar proof context is
11003considered a legacy feature.  Common applications like ``have A .''
11004may be replaced by ``have A by fact'' or ``note `A`''.  In general,
11005referencing facts explicitly here improves readability and
11006maintainability of proof texts.
11007
11008* Isar: improper proof element 'guess' is like 'obtain', but derives
11009the obtained context from the course of reasoning!  For example:
11010
11011  assume "EX x y. A x & B y"   -- "any previous fact"
11012  then guess x and y by clarify
11013
11014This technique is potentially adventurous, depending on the facts and
11015proof tools being involved here.
11016
11017* Isar: known facts from the proof context may be specified as literal
11018propositions, using ASCII back-quote syntax.  This works wherever
11019named facts used to be allowed so far, in proof commands, proof
11020methods, attributes etc.  Literal facts are retrieved from the context
11021according to unification of type and term parameters.  For example,
11022provided that "A" and "A ==> B" and "!!x. P x ==> Q x" are known
11023theorems in the current context, then these are valid literal facts:
11024`A` and `A ==> B` and `!!x. P x ==> Q x" as well as `P a ==> Q a` etc.
11025
11026There is also a proof method "fact" which does the same composition
11027for explicit goal states, e.g. the following proof texts coincide with
11028certain special cases of literal facts:
11029
11030  have "A" by fact                 ==  note `A`
11031  have "A ==> B" by fact           ==  note `A ==> B`
11032  have "!!x. P x ==> Q x" by fact  ==  note `!!x. P x ==> Q x`
11033  have "P a ==> Q a" by fact       ==  note `P a ==> Q a`
11034
11035* Isar: ":" (colon) is no longer a symbolic identifier character in
11036outer syntax.  Thus symbolic identifiers may be used without
11037additional white space in declarations like this: ``assume *: A''.
11038
11039* Isar: 'print_facts' prints all local facts of the current context,
11040both named and unnamed ones.
11041
11042* Isar: 'def' now admits simultaneous definitions, e.g.:
11043
11044  def x == "t" and y == "u"
11045
11046* Isar: added command 'unfolding', which is structurally similar to
11047'using', but affects both the goal state and facts by unfolding given
11048rewrite rules.  Thus many occurrences of the 'unfold' method or
11049'unfolded' attribute may be replaced by first-class proof text.
11050
11051* Isar: methods 'unfold' / 'fold', attributes 'unfolded' / 'folded',
11052and command 'unfolding' now all support object-level equalities
11053(potentially conditional).  The underlying notion of rewrite rule is
11054analogous to the 'rule_format' attribute, but *not* that of the
11055Simplifier (which is usually more generous).
11056
11057* Isar: the new attribute [rotated n] (default n = 1) rotates the
11058premises of a theorem by n. Useful in conjunction with drule.
11059
11060* Isar: the goal restriction operator [N] (default N = 1) evaluates a
11061method expression within a sandbox consisting of the first N
11062sub-goals, which need to exist.  For example, ``simp_all [3]''
11063simplifies the first three sub-goals, while (rule foo, simp_all)[]
11064simplifies all new goals that emerge from applying rule foo to the
11065originally first one.
11066
11067* Isar: schematic goals are no longer restricted to higher-order
11068patterns; e.g. ``lemma "?P(?x)" by (rule TrueI)'' now works as
11069expected.
11070
11071* Isar: the conclusion of a long theorem statement is now either
11072'shows' (a simultaneous conjunction, as before), or 'obtains'
11073(essentially a disjunction of cases with local parameters and
11074assumptions).  The latter allows to express general elimination rules
11075adequately; in this notation common elimination rules look like this:
11076
11077  lemma exE:    -- "EX x. P x ==> (!!x. P x ==> thesis) ==> thesis"
11078    assumes "EX x. P x"
11079    obtains x where "P x"
11080
11081  lemma conjE:  -- "A & B ==> (A ==> B ==> thesis) ==> thesis"
11082    assumes "A & B"
11083    obtains A and B
11084
11085  lemma disjE:  -- "A | B ==> (A ==> thesis) ==> (B ==> thesis) ==> thesis"
11086    assumes "A | B"
11087    obtains
11088      A
11089    | B
11090
11091The subsequent classical rules even refer to the formal "thesis"
11092explicitly:
11093
11094  lemma classical:     -- "(~ thesis ==> thesis) ==> thesis"
11095    obtains "~ thesis"
11096
11097  lemma Peirce's_Law:  -- "((thesis ==> something) ==> thesis) ==> thesis"
11098    obtains "thesis ==> something"
11099
11100The actual proof of an 'obtains' statement is analogous to that of the
11101Isar proof element 'obtain', only that there may be several cases.
11102Optional case names may be specified in parentheses; these will be
11103available both in the present proof and as annotations in the
11104resulting rule, for later use with the 'cases' method (cf. attribute
11105case_names).
11106
11107* Isar: the assumptions of a long theorem statement are available as
11108"assms" fact in the proof context.  This is more appropriate than the
11109(historical) "prems", which refers to all assumptions of the current
11110context, including those from the target locale, proof body etc.
11111
11112* Isar: 'print_statement' prints theorems from the current theory or
11113proof context in long statement form, according to the syntax of a
11114top-level lemma.
11115
11116* Isar: 'obtain' takes an optional case name for the local context
11117introduction rule (default "that").
11118
11119* Isar: removed obsolete 'concl is' patterns.  INCOMPATIBILITY, use
11120explicit (is "_ ==> ?foo") in the rare cases where this still happens
11121to occur.
11122
11123* Pure: syntax "CONST name" produces a fully internalized constant
11124according to the current context.  This is particularly useful for
11125syntax translations that should refer to internal constant
11126representations independently of name spaces.
11127
11128* Pure: syntax constant for foo (binder "FOO ") is called "foo_binder"
11129instead of "FOO ". This allows multiple binder declarations to coexist
11130in the same context.  INCOMPATIBILITY.
11131
11132* Isar/locales: 'notation' provides a robust interface to the 'syntax'
11133primitive that also works in a locale context (both for constants and
11134fixed variables). Type declaration and internal syntactic representation
11135of given constants retrieved from the context. Likewise, the
11136'no_notation' command allows to remove given syntax annotations from the
11137current context.
11138
11139* Isar/locales: new derived specification elements 'axiomatization',
11140'definition', 'abbreviation', which support type-inference, admit
11141object-level specifications (equality, equivalence).  See also the
11142isar-ref manual.  Examples:
11143
11144  axiomatization
11145    eq  (infix "===" 50) where
11146    eq_refl: "x === x" and eq_subst: "x === y ==> P x ==> P y"
11147
11148  definition "f x y = x + y + 1"
11149  definition g where "g x = f x x"
11150
11151  abbreviation
11152    neq  (infix "=!=" 50) where
11153    "x =!= y == ~ (x === y)"
11154
11155These specifications may be also used in a locale context.  Then the
11156constants being introduced depend on certain fixed parameters, and the
11157constant name is qualified by the locale base name.  An internal
11158abbreviation takes care for convenient input and output, making the
11159parameters implicit and using the original short name.  See also
11160src/HOL/ex/Abstract_NAT.thy for an example of deriving polymorphic
11161entities from a monomorphic theory.
11162
11163Presently, abbreviations are only available 'in' a target locale, but
11164not inherited by general import expressions.  Also note that
11165'abbreviation' may be used as a type-safe replacement for 'syntax' +
11166'translations' in common applications.  The "no_abbrevs" print mode
11167prevents folding of abbreviations in term output.
11168
11169Concrete syntax is attached to specified constants in internal form,
11170independently of name spaces.  The parse tree representation is
11171slightly different -- use 'notation' instead of raw 'syntax', and
11172'translations' with explicit "CONST" markup to accommodate this.
11173
11174* Pure/Isar: unified syntax for new-style specification mechanisms
11175(e.g.  'definition', 'abbreviation', or 'inductive' in HOL) admits
11176full type inference and dummy patterns ("_").  For example:
11177
11178  definition "K x _ = x"
11179
11180  inductive conj for A B
11181  where "A ==> B ==> conj A B"
11182
11183* Pure: command 'print_abbrevs' prints all constant abbreviations of
11184the current context.  Print mode "no_abbrevs" prevents inversion of
11185abbreviations on output.
11186
11187* Isar/locales: improved parameter handling: use of locales "var" and
11188"struct" no longer necessary; - parameter renamings are no longer
11189required to be injective.  For example, this allows to define
11190endomorphisms as locale endom = homom mult mult h.
11191
11192* Isar/locales: changed the way locales with predicates are defined.
11193Instead of accumulating the specification, the imported expression is
11194now an interpretation.  INCOMPATIBILITY: different normal form of
11195locale expressions.  In particular, in interpretations of locales with
11196predicates, goals repesenting already interpreted fragments are not
11197removed automatically.  Use methods `intro_locales' and
11198`unfold_locales'; see below.
11199
11200* Isar/locales: new methods `intro_locales' and `unfold_locales'
11201provide backward reasoning on locales predicates.  The methods are
11202aware of interpretations and discharge corresponding goals.
11203`intro_locales' is less aggressive then `unfold_locales' and does not
11204unfold predicates to assumptions.
11205
11206* Isar/locales: the order in which locale fragments are accumulated
11207has changed.  This enables to override declarations from fragments due
11208to interpretations -- for example, unwanted simp rules.
11209
11210* Isar/locales: interpretation in theories and proof contexts has been
11211extended.  One may now specify (and prove) equations, which are
11212unfolded in interpreted theorems.  This is useful for replacing
11213defined concepts (constants depending on locale parameters) by
11214concepts already existing in the target context.  Example:
11215
11216  interpretation partial_order ["op <= :: [int, int] => bool"]
11217    where "partial_order.less (op <=) (x::int) y = (x < y)"
11218
11219Typically, the constant `partial_order.less' is created by a
11220definition specification element in the context of locale
11221partial_order.
11222
11223* Method "induct": improved internal context management to support
11224local fixes and defines on-the-fly. Thus explicit meta-level
11225connectives !!  and ==> are rarely required anymore in inductive goals
11226(using object-logic connectives for this purpose has been long
11227obsolete anyway). Common proof patterns are explained in
11228src/HOL/Induct/Common_Patterns.thy, see also
11229src/HOL/Isar_examples/Puzzle.thy and src/HOL/Lambda for realistic
11230examples.
11231
11232* Method "induct": improved handling of simultaneous goals. Instead of
11233introducing object-level conjunction, the statement is now split into
11234several conclusions, while the corresponding symbolic cases are nested
11235accordingly. INCOMPATIBILITY, proofs need to be structured explicitly,
11236see src/HOL/Induct/Common_Patterns.thy, for example.
11237
11238* Method "induct": mutual induction rules are now specified as a list
11239of rule sharing the same induction cases. HOL packages usually provide
11240foo_bar.inducts for mutually defined items foo and bar (e.g. inductive
11241predicates/sets or datatypes). INCOMPATIBILITY, users need to specify
11242mutual induction rules differently, i.e. like this:
11243
11244  (induct rule: foo_bar.inducts)
11245  (induct set: foo bar)
11246  (induct pred: foo bar)
11247  (induct type: foo bar)
11248
11249The ML function ProjectRule.projections turns old-style rules into the
11250new format.
11251
11252* Method "coinduct": dual of induction, see
11253src/HOL/Library/Coinductive_List.thy for various examples.
11254
11255* Method "cases", "induct", "coinduct": the ``(open)'' option is
11256considered a legacy feature.
11257
11258* Attribute "symmetric" produces result with standardized schematic
11259variables (index 0).  Potential INCOMPATIBILITY.
11260
11261* Simplifier: by default the simplifier trace only shows top level
11262rewrites now. That is, trace_simp_depth_limit is set to 1 by
11263default. Thus there is less danger of being flooded by the trace. The
11264trace indicates where parts have been suppressed.
11265
11266* Provers/classical: removed obsolete classical version of elim_format
11267attribute; classical elim/dest rules are now treated uniformly when
11268manipulating the claset.
11269
11270* Provers/classical: stricter checks to ensure that supplied intro,
11271dest and elim rules are well-formed; dest and elim rules must have at
11272least one premise.
11273
11274* Provers/classical: attributes dest/elim/intro take an optional
11275weight argument for the rule (just as the Pure versions).  Weights are
11276ignored by automated tools, but determine the search order of single
11277rule steps.
11278
11279* Syntax: input syntax now supports dummy variable binding "%_. b",
11280where the body does not mention the bound variable.  Note that dummy
11281patterns implicitly depend on their context of bounds, which makes
11282"{_. _}" match any set comprehension as expected.  Potential
11283INCOMPATIBILITY -- parse translations need to cope with syntactic
11284constant "_idtdummy" in the binding position.
11285
11286* Syntax: removed obsolete syntactic constant "_K" and its associated
11287parse translation.  INCOMPATIBILITY -- use dummy abstraction instead,
11288for example "A -> B" => "Pi A (%_. B)".
11289
11290* Pure: 'class_deps' command visualizes the subclass relation, using
11291the graph browser tool.
11292
11293* Pure: 'print_theory' now suppresses certain internal declarations by
11294default; use '!' option for full details.
11295
11296
11297*** HOL ***
11298
11299* Method "metis" proves goals by applying the Metis general-purpose
11300resolution prover (see also http://gilith.com/software/metis/).
11301Examples are in the directory MetisExamples.  WARNING: the
11302Isabelle/HOL-Metis integration does not yet work properly with
11303multi-threading.
11304
11305* Command 'sledgehammer' invokes external automatic theorem provers as
11306background processes.  It generates calls to the "metis" method if
11307successful. These can be pasted into the proof.  Users do not have to
11308wait for the automatic provers to return.  WARNING: does not really
11309work with multi-threading.
11310
11311* New "auto_quickcheck" feature tests outermost goal statements for
11312potential counter-examples.  Controlled by ML references
11313auto_quickcheck (default true) and auto_quickcheck_time_limit (default
113145000 milliseconds).  Fails silently if statements is outside of
11315executable fragment, or any other codgenerator problem occurs.
11316
11317* New constant "undefined" with axiom "undefined x = undefined".
11318
11319* Added class "HOL.eq", allowing for code generation with polymorphic
11320equality.
11321
11322* Some renaming of class constants due to canonical name prefixing in
11323the new 'class' package:
11324
11325    HOL.abs ~> HOL.abs_class.abs
11326    HOL.divide ~> HOL.divide_class.divide
11327    0 ~> HOL.zero_class.zero
11328    1 ~> HOL.one_class.one
11329    op + ~> HOL.plus_class.plus
11330    op - ~> HOL.minus_class.minus
11331    uminus ~> HOL.minus_class.uminus
11332    op * ~> HOL.times_class.times
11333    op < ~> HOL.ord_class.less
11334    op <= > HOL.ord_class.less_eq
11335    Nat.power ~> Power.power_class.power
11336    Nat.size ~> Nat.size_class.size
11337    Numeral.number_of ~> Numeral.number_class.number_of
11338    FixedPoint.Inf ~> Lattices.complete_lattice_class.Inf
11339    FixedPoint.Sup ~> Lattices.complete_lattice_class.Sup
11340    Orderings.min ~> Orderings.ord_class.min
11341    Orderings.max ~> Orderings.ord_class.max
11342    Divides.op div ~> Divides.div_class.div
11343    Divides.op mod ~> Divides.div_class.mod
11344    Divides.op dvd ~> Divides.div_class.dvd
11345
11346INCOMPATIBILITY.  Adaptions may be required in the following cases:
11347
11348a) User-defined constants using any of the names "plus", "minus",
11349"times", "less" or "less_eq". The standard syntax translations for
11350"+", "-" and "*" may go wrong.  INCOMPATIBILITY: use more specific
11351names.
11352
11353b) Variables named "plus", "minus", "times", "less", "less_eq"
11354INCOMPATIBILITY: use more specific names.
11355
11356c) Permutative equations (e.g. "a + b = b + a")
11357Since the change of names also changes the order of terms, permutative
11358rewrite rules may get applied in a different order. Experience shows
11359that this is rarely the case (only two adaptions in the whole Isabelle
11360distribution).  INCOMPATIBILITY: rewrite proofs
11361
11362d) ML code directly refering to constant names
11363This in general only affects hand-written proof tactics, simprocs and
11364so on.  INCOMPATIBILITY: grep your sourcecode and replace names.
11365Consider using @{const_name} antiquotation.
11366
11367* New class "default" with associated constant "default".
11368
11369* Function "sgn" is now overloaded and available on int, real, complex
11370(and other numeric types), using class "sgn".  Two possible defs of
11371sgn are given as equational assumptions in the classes sgn_if and
11372sgn_div_norm; ordered_idom now also inherits from sgn_if.
11373INCOMPATIBILITY.
11374
11375* Locale "partial_order" now unified with class "order" (cf. theory
11376Orderings), added parameter "less".  INCOMPATIBILITY.
11377
11378* Renamings in classes "order" and "linorder": facts "refl", "trans" and
11379"cases" to "order_refl", "order_trans" and "linorder_cases", to avoid
11380clashes with HOL "refl" and "trans".  INCOMPATIBILITY.
11381
11382* Classes "order" and "linorder": potential INCOMPATIBILITY due to
11383changed order of proof goals in instance proofs.
11384
11385* The transitivity reasoner for partial and linear orders is set up
11386for classes "order" and "linorder".  Instances of the reasoner are available
11387in all contexts importing or interpreting the corresponding locales.
11388Method "order" invokes the reasoner separately; the reasoner
11389is also integrated with the Simplifier as a solver.  Diagnostic
11390command 'print_orders' shows the available instances of the reasoner
11391in the current context.
11392
11393* Localized monotonicity predicate in theory "Orderings"; integrated
11394lemmas max_of_mono and min_of_mono with this predicate.
11395INCOMPATIBILITY.
11396
11397* Formulation of theorem "dense" changed slightly due to integration
11398with new class dense_linear_order.
11399
11400* Uniform lattice theory development in HOL.
11401
11402    constants "meet" and "join" now named "inf" and "sup"
11403    constant "Meet" now named "Inf"
11404
11405    classes "meet_semilorder" and "join_semilorder" now named
11406      "lower_semilattice" and "upper_semilattice"
11407    class "lorder" now named "lattice"
11408    class "comp_lat" now named "complete_lattice"
11409
11410    Instantiation of lattice classes allows explicit definitions
11411    for "inf" and "sup" operations (or "Inf" and "Sup" for complete lattices).
11412
11413  INCOMPATIBILITY.  Theorem renames:
11414
11415    meet_left_le            ~> inf_le1
11416    meet_right_le           ~> inf_le2
11417    join_left_le            ~> sup_ge1
11418    join_right_le           ~> sup_ge2
11419    meet_join_le            ~> inf_sup_ord
11420    le_meetI                ~> le_infI
11421    join_leI                ~> le_supI
11422    le_meet                 ~> le_inf_iff
11423    le_join                 ~> ge_sup_conv
11424    meet_idempotent         ~> inf_idem
11425    join_idempotent         ~> sup_idem
11426    meet_comm               ~> inf_commute
11427    join_comm               ~> sup_commute
11428    meet_leI1               ~> le_infI1
11429    meet_leI2               ~> le_infI2
11430    le_joinI1               ~> le_supI1
11431    le_joinI2               ~> le_supI2
11432    meet_assoc              ~> inf_assoc
11433    join_assoc              ~> sup_assoc
11434    meet_left_comm          ~> inf_left_commute
11435    meet_left_idempotent    ~> inf_left_idem
11436    join_left_comm          ~> sup_left_commute
11437    join_left_idempotent    ~> sup_left_idem
11438    meet_aci                ~> inf_aci
11439    join_aci                ~> sup_aci
11440    le_def_meet             ~> le_iff_inf
11441    le_def_join             ~> le_iff_sup
11442    join_absorp2            ~> sup_absorb2
11443    join_absorp1            ~> sup_absorb1
11444    meet_absorp1            ~> inf_absorb1
11445    meet_absorp2            ~> inf_absorb2
11446    meet_join_absorp        ~> inf_sup_absorb
11447    join_meet_absorp        ~> sup_inf_absorb
11448    distrib_join_le         ~> distrib_sup_le
11449    distrib_meet_le         ~> distrib_inf_le
11450
11451    add_meet_distrib_left   ~> add_inf_distrib_left
11452    add_join_distrib_left   ~> add_sup_distrib_left
11453    is_join_neg_meet        ~> is_join_neg_inf
11454    is_meet_neg_join        ~> is_meet_neg_sup
11455    add_meet_distrib_right  ~> add_inf_distrib_right
11456    add_join_distrib_right  ~> add_sup_distrib_right
11457    add_meet_join_distribs  ~> add_sup_inf_distribs
11458    join_eq_neg_meet        ~> sup_eq_neg_inf
11459    meet_eq_neg_join        ~> inf_eq_neg_sup
11460    add_eq_meet_join        ~> add_eq_inf_sup
11461    meet_0_imp_0            ~> inf_0_imp_0
11462    join_0_imp_0            ~> sup_0_imp_0
11463    meet_0_eq_0             ~> inf_0_eq_0
11464    join_0_eq_0             ~> sup_0_eq_0
11465    neg_meet_eq_join        ~> neg_inf_eq_sup
11466    neg_join_eq_meet        ~> neg_sup_eq_inf
11467    join_eq_if              ~> sup_eq_if
11468
11469    mono_meet               ~> mono_inf
11470    mono_join               ~> mono_sup
11471    meet_bool_eq            ~> inf_bool_eq
11472    join_bool_eq            ~> sup_bool_eq
11473    meet_fun_eq             ~> inf_fun_eq
11474    join_fun_eq             ~> sup_fun_eq
11475    meet_set_eq             ~> inf_set_eq
11476    join_set_eq             ~> sup_set_eq
11477    meet1_iff               ~> inf1_iff
11478    meet2_iff               ~> inf2_iff
11479    meet1I                  ~> inf1I
11480    meet2I                  ~> inf2I
11481    meet1D1                 ~> inf1D1
11482    meet2D1                 ~> inf2D1
11483    meet1D2                 ~> inf1D2
11484    meet2D2                 ~> inf2D2
11485    meet1E                  ~> inf1E
11486    meet2E                  ~> inf2E
11487    join1_iff               ~> sup1_iff
11488    join2_iff               ~> sup2_iff
11489    join1I1                 ~> sup1I1
11490    join2I1                 ~> sup2I1
11491    join1I1                 ~> sup1I1
11492    join2I2                 ~> sup1I2
11493    join1CI                 ~> sup1CI
11494    join2CI                 ~> sup2CI
11495    join1E                  ~> sup1E
11496    join2E                  ~> sup2E
11497
11498    is_meet_Meet            ~> is_meet_Inf
11499    Meet_bool_def           ~> Inf_bool_def
11500    Meet_fun_def            ~> Inf_fun_def
11501    Meet_greatest           ~> Inf_greatest
11502    Meet_lower              ~> Inf_lower
11503    Meet_set_def            ~> Inf_set_def
11504
11505    Sup_def                 ~> Sup_Inf
11506    Sup_bool_eq             ~> Sup_bool_def
11507    Sup_fun_eq              ~> Sup_fun_def
11508    Sup_set_eq              ~> Sup_set_def
11509
11510    listsp_meetI            ~> listsp_infI
11511    listsp_meet_eq          ~> listsp_inf_eq
11512
11513    meet_min                ~> inf_min
11514    join_max                ~> sup_max
11515
11516* Added syntactic class "size"; overloaded constant "size" now has
11517type "'a::size ==> bool"
11518
11519* Internal reorganisation of `size' of datatypes: size theorems
11520"foo.size" are no longer subsumed by "foo.simps" (but are still
11521simplification rules by default!); theorems "prod.size" now named
11522"*.size".
11523
11524* Class "div" now inherits from class "times" rather than "type".
11525INCOMPATIBILITY.
11526
11527* HOL/Finite_Set: "name-space" locales Lattice, Distrib_lattice,
11528Linorder etc.  have disappeared; operations defined in terms of
11529fold_set now are named Inf_fin, Sup_fin.  INCOMPATIBILITY.
11530
11531* HOL/Nat: neq0_conv no longer declared as iff.  INCOMPATIBILITY.
11532
11533* HOL-Word: New extensive library and type for generic, fixed size
11534machine words, with arithmetic, bit-wise, shifting and rotating
11535operations, reflection into int, nat, and bool lists, automation for
11536linear arithmetic (by automatic reflection into nat or int), including
11537lemmas on overflow and monotonicity.  Instantiated to all appropriate
11538arithmetic type classes, supporting automatic simplification of
11539numerals on all operations.
11540
11541* Library/Boolean_Algebra: locales for abstract boolean algebras.
11542
11543* Library/Numeral_Type: numbers as types, e.g. TYPE(32).
11544
11545* Code generator library theories:
11546  - Code_Integer represents HOL integers by big integer literals in target
11547    languages.
11548  - Code_Char represents HOL characters by character literals in target
11549    languages.
11550  - Code_Char_chr like Code_Char, but also offers treatment of character
11551    codes; includes Code_Integer.
11552  - Executable_Set allows to generate code for finite sets using lists.
11553  - Executable_Rat implements rational numbers as triples (sign, enumerator,
11554    denominator).
11555  - Executable_Real implements a subset of real numbers, namly those
11556    representable by rational numbers.
11557  - Efficient_Nat implements natural numbers by integers, which in general will
11558    result in higher efficency; pattern matching with 0/Suc is eliminated;
11559    includes Code_Integer.
11560  - Code_Index provides an additional datatype index which is mapped to
11561    target-language built-in integers.
11562  - Code_Message provides an additional datatype message_string which is isomorphic to
11563    strings; messages are mapped to target-language strings.
11564
11565* New package for inductive predicates
11566
11567  An n-ary predicate p with m parameters z_1, ..., z_m can now be defined via
11568
11569    inductive
11570      p :: "U_1 => ... => U_m => T_1 => ... => T_n => bool"
11571      for z_1 :: U_1 and ... and z_n :: U_m
11572    where
11573      rule_1: "... ==> p z_1 ... z_m t_1_1 ... t_1_n"
11574    | ...
11575
11576  with full support for type-inference, rather than
11577
11578    consts s :: "U_1 => ... => U_m => (T_1 * ... * T_n) set"
11579
11580    abbreviation p :: "U_1 => ... => U_m => T_1 => ... => T_n => bool"
11581    where "p z_1 ... z_m x_1 ... x_n == (x_1, ..., x_n) : s z_1 ... z_m"
11582
11583    inductive "s z_1 ... z_m"
11584    intros
11585      rule_1: "... ==> (t_1_1, ..., t_1_n) : s z_1 ... z_m"
11586      ...
11587
11588  For backward compatibility, there is a wrapper allowing inductive
11589  sets to be defined with the new package via
11590
11591    inductive_set
11592      s :: "U_1 => ... => U_m => (T_1 * ... * T_n) set"
11593      for z_1 :: U_1 and ... and z_n :: U_m
11594    where
11595      rule_1: "... ==> (t_1_1, ..., t_1_n) : s z_1 ... z_m"
11596    | ...
11597
11598  or
11599
11600    inductive_set
11601      s :: "U_1 => ... => U_m => (T_1 * ... * T_n) set"
11602      and p :: "U_1 => ... => U_m => T_1 => ... => T_n => bool"
11603      for z_1 :: U_1 and ... and z_n :: U_m
11604    where
11605      "p z_1 ... z_m x_1 ... x_n == (x_1, ..., x_n) : s z_1 ... z_m"
11606    | rule_1: "... ==> p z_1 ... z_m t_1_1 ... t_1_n"
11607    | ...
11608
11609  if the additional syntax "p ..." is required.
11610
11611  Numerous examples can be found in the subdirectories src/HOL/Auth,
11612  src/HOL/Bali, src/HOL/Induct, and src/HOL/MicroJava.
11613
11614  INCOMPATIBILITIES:
11615
11616  - Since declaration and definition of inductive sets or predicates
11617    is no longer separated, abbreviations involving the newly
11618    introduced sets or predicates must be specified together with the
11619    introduction rules after the 'where' keyword (see above), rather
11620    than before the actual inductive definition.
11621
11622  - The variables in induction and elimination rules are now
11623    quantified in the order of their occurrence in the introduction
11624    rules, rather than in alphabetical order. Since this may break
11625    some proofs, these proofs either have to be repaired, e.g. by
11626    reordering the variables a_i_1 ... a_i_{k_i} in Isar 'case'
11627    statements of the form
11628
11629      case (rule_i a_i_1 ... a_i_{k_i})
11630
11631    or the old order of quantification has to be restored by explicitly adding
11632    meta-level quantifiers in the introduction rules, i.e.
11633
11634      | rule_i: "!!a_i_1 ... a_i_{k_i}. ... ==> p z_1 ... z_m t_i_1 ... t_i_n"
11635
11636  - The format of the elimination rules is now
11637
11638      p z_1 ... z_m x_1 ... x_n ==>
11639        (!!a_1_1 ... a_1_{k_1}. x_1 = t_1_1 ==> ... ==> x_n = t_1_n ==> ... ==> P)
11640        ==> ... ==> P
11641
11642    for predicates and
11643
11644      (x_1, ..., x_n) : s z_1 ... z_m ==>
11645        (!!a_1_1 ... a_1_{k_1}. x_1 = t_1_1 ==> ... ==> x_n = t_1_n ==> ... ==> P)
11646        ==> ... ==> P
11647
11648    for sets rather than
11649
11650      x : s z_1 ... z_m ==>
11651        (!!a_1_1 ... a_1_{k_1}. x = (t_1_1, ..., t_1_n) ==> ... ==> P)
11652        ==> ... ==> P
11653
11654    This may require terms in goals to be expanded to n-tuples
11655    (e.g. using case_tac or simplification with the split_paired_all
11656    rule) before the above elimination rule is applicable.
11657
11658  - The elimination or case analysis rules for (mutually) inductive
11659    sets or predicates are now called "p_1.cases" ... "p_k.cases". The
11660    list of rules "p_1_..._p_k.elims" is no longer available.
11661
11662* New package "function"/"fun" for general recursive functions,
11663supporting mutual and nested recursion, definitions in local contexts,
11664more general pattern matching and partiality. See HOL/ex/Fundefs.thy
11665for small examples, and the separate tutorial on the function
11666package. The old recdef "package" is still available as before, but
11667users are encouraged to use the new package.
11668
11669* Method "lexicographic_order" automatically synthesizes termination
11670relations as lexicographic combinations of size measures.
11671
11672* Case-expressions allow arbitrary constructor-patterns (including
11673"_") and take their order into account, like in functional
11674programming.  Internally, this is translated into nested
11675case-expressions; missing cases are added and mapped to the predefined
11676constant "undefined". In complicated cases printing may no longer show
11677the original input but the internal form. Lambda-abstractions allow
11678the same form of pattern matching: "% pat1 => e1 | ..." is an
11679abbreviation for "%x. case x of pat1 => e1 | ..." where x is a new
11680variable.
11681
11682* IntDef: The constant "int :: nat => int" has been removed; now "int"
11683is an abbreviation for "of_nat :: nat => int". The simplification
11684rules for "of_nat" have been changed to work like "int" did
11685previously.  Potential INCOMPATIBILITY:
11686  - "of_nat (Suc m)" simplifies to "1 + of_nat m" instead of "of_nat m + 1"
11687  - of_nat_diff and of_nat_mult are no longer default simp rules
11688
11689* Method "algebra" solves polynomial equations over (semi)rings using
11690Groebner bases. The (semi)ring structure is defined by locales and the
11691tool setup depends on that generic context. Installing the method for
11692a specific type involves instantiating the locale and possibly adding
11693declarations for computation on the coefficients.  The method is
11694already instantiated for natural numbers and for the axiomatic class
11695of idoms with numerals.  See also the paper by Chaieb and Wenzel at
11696CALCULEMUS 2007 for the general principles underlying this
11697architecture of context-aware proof-tools.
11698
11699* Method "ferrack" implements quantifier elimination over
11700special-purpose dense linear orders using locales (analogous to
11701"algebra"). The method is already installed for class
11702{ordered_field,recpower,number_ring} which subsumes real, hyperreal,
11703rat, etc.
11704
11705* Former constant "List.op @" now named "List.append".  Use ML
11706antiquotations @{const_name List.append} or @{term " ... @ ... "} to
11707circumvent possible incompatibilities when working on ML level.
11708
11709* primrec: missing cases mapped to "undefined" instead of "arbitrary".
11710
11711* New function listsum :: 'a list => 'a for arbitrary monoids.
11712Special syntax: "SUM x <- xs. f x" (and latex variants)
11713
11714* New syntax for Haskell-like list comprehension (input only), eg.
11715[(x,y). x <- xs, y <- ys, x ~= y], see also src/HOL/List.thy.
11716
11717* The special syntax for function "filter" has changed from [x :
11718xs. P] to [x <- xs. P] to avoid an ambiguity caused by list
11719comprehension syntax, and for uniformity.  INCOMPATIBILITY.
11720
11721* [a..b] is now defined for arbitrary linear orders.  It used to be
11722defined on nat only, as an abbreviation for [a..<Suc b]
11723INCOMPATIBILITY.
11724
11725* Renamed lemma "set_take_whileD"  to "set_takeWhileD".
11726
11727* New functions "sorted" and "sort" in src/HOL/List.thy.
11728
11729* New lemma collection field_simps (an extension of ring_simps) for
11730manipulating (in)equations involving division. Multiplies with all
11731denominators that can be proved to be non-zero (in equations) or
11732positive/negative (in inequations).
11733
11734* Lemma collections ring_eq_simps, group_eq_simps and ring_distrib
11735have been improved and renamed to ring_simps, group_simps and
11736ring_distribs.  Removed lemmas field_xyz in theory Ring_and_Field
11737because they were subsumed by lemmas xyz.  INCOMPATIBILITY.
11738
11739* Theory Library/Commutative_Ring: switched from recdef to function
11740package; constants add, mul, pow now curried.  Infix syntax for
11741algebraic operations.
11742
11743* Dropped redundant lemma def_imp_eq in favor of meta_eq_to_obj_eq.
11744INCOMPATIBILITY.
11745
11746* Dropped redundant lemma if_def2 in favor of if_bool_eq_conj.
11747INCOMPATIBILITY.
11748
11749* HOL/records: generalised field-update to take a function on the
11750field rather than the new value: r(|A := x|) is translated to A_update
11751(K x) r The K-combinator that is internally used is called K_record.
11752INCOMPATIBILITY: Usage of the plain update functions has to be
11753adapted.
11754
11755* Class "semiring_0" now contains annihilation axioms x * 0 = 0 and 0
11756* x = 0, which are required for a semiring.  Richer structures do not
11757inherit from semiring_0 anymore, because this property is a theorem
11758there, not an axiom.  INCOMPATIBILITY: In instances of semiring_0,
11759there is more to prove, but this is mostly trivial.
11760
11761* Class "recpower" is generalized to arbitrary monoids, not just
11762commutative semirings.  INCOMPATIBILITY: may need to incorporate
11763commutativity or semiring properties additionally.
11764
11765* Constant "List.list_all2" in List.thy now uses authentic syntax.
11766INCOMPATIBILITY: translations containing list_all2 may go wrong,
11767better use 'abbreviation'.
11768
11769* Renamed constant "List.op mem" to "List.member".  INCOMPATIBILITY.
11770
11771* Numeral syntax: type 'bin' which was a mere type copy of 'int' has
11772been abandoned in favour of plain 'int'.  INCOMPATIBILITY --
11773significant changes for setting up numeral syntax for types:
11774  - New constants Numeral.pred and Numeral.succ instead
11775      of former Numeral.bin_pred and Numeral.bin_succ.
11776  - Use integer operations instead of bin_add, bin_mult and so on.
11777  - Numeral simplification theorems named Numeral.numeral_simps instead of Bin_simps.
11778  - ML structure Bin_Simprocs now named Int_Numeral_Base_Simprocs.
11779
11780See src/HOL/Integ/IntArith.thy for an example setup.
11781
11782* Command 'normal_form' computes the normal form of a term that may
11783contain free variables.  For example ``normal_form "rev [a, b, c]"''
11784produces ``[b, c, a]'' (without proof).  This command is suitable for
11785heavy-duty computations because the functions are compiled to ML
11786first.  Correspondingly, a method "normalization" is provided.  See
11787further src/HOL/ex/NormalForm.thy and src/Tools/nbe.ML.
11788
11789* Alternative iff syntax "A <-> B" for equality on bool (with priority
1179025 like -->); output depends on the "iff" print_mode, the default is
11791"A = B" (with priority 50).
11792
11793* Relations less (<) and less_eq (<=) are also available on type bool.
11794Modified syntax to disallow nesting without explicit parentheses,
11795e.g. "(x < y) < z" or "x < (y < z)", but NOT "x < y < z".  Potential
11796INCOMPATIBILITY.
11797
11798* "LEAST x:A. P" expands to "LEAST x. x:A & P" (input only).
11799
11800* Relation composition operator "op O" now has precedence 75 and binds
11801stronger than union and intersection. INCOMPATIBILITY.
11802
11803* The old set interval syntax "{m..n(}" (and relatives) has been
11804removed.  Use "{m..<n}" (and relatives) instead.
11805
11806* In the context of the assumption "~(s = t)" the Simplifier rewrites
11807"t = s" to False (by simproc "neq").  INCOMPATIBILITY, consider using
11808``declare [[simproc del: neq]]''.
11809
11810* Simplifier: "m dvd n" where m and n are numbers is evaluated to
11811True/False.
11812
11813* Theorem Cons_eq_map_conv no longer declared as "simp".
11814
11815* Theorem setsum_mult renamed to setsum_right_distrib.
11816
11817* Prefer ex1I over ex_ex1I in single-step reasoning, e.g. by the
11818``rule'' method.
11819
11820* Reimplemented methods "sat" and "satx", with several improvements:
11821goals no longer need to be stated as "<prems> ==> False", equivalences
11822(i.e. "=" on type bool) are handled, variable names of the form
11823"lit_<n>" are no longer reserved, significant speedup.
11824
11825* Methods "sat" and "satx" can now replay MiniSat proof traces.
11826zChaff is still supported as well.
11827
11828* 'inductive' and 'datatype': provide projections of mutual rules,
11829bundled as foo_bar.inducts;
11830
11831* Library: moved theories Parity, GCD, Binomial, Infinite_Set to
11832Library.
11833
11834* Library: moved theory Accessible_Part to main HOL.
11835
11836* Library: added theory Coinductive_List of potentially infinite lists
11837as greatest fixed-point.
11838
11839* Library: added theory AssocList which implements (finite) maps as
11840association lists.
11841
11842* Method "evaluation" solves goals (i.e. a boolean expression)
11843efficiently by compiling it to ML.  The goal is "proved" (via an
11844oracle) if it evaluates to True.
11845
11846* Linear arithmetic now splits certain operators (e.g. min, max, abs)
11847also when invoked by the simplifier.  This results in the Simplifier
11848being more powerful on arithmetic goals.  INCOMPATIBILITY.
11849Configuration option fast_arith_split_limit=0 recovers the old
11850behavior.
11851
11852* Support for hex (0x20) and binary (0b1001) numerals.
11853
11854* New method: reify eqs (t), where eqs are equations for an
11855interpretation I :: 'a list => 'b => 'c and t::'c is an optional
11856parameter, computes a term s::'b and a list xs::'a list and proves the
11857theorem I xs s = t. This is also known as reification or quoting. The
11858resulting theorem is applied to the subgoal to substitute t with I xs
11859s.  If t is omitted, the subgoal itself is reified.
11860
11861* New method: reflection corr_thm eqs (t). The parameters eqs and (t)
11862are as explained above. corr_thm is a theorem for I vs (f t) = I vs t,
11863where f is supposed to be a computable function (in the sense of code
11864generattion). The method uses reify to compute s and xs as above then
11865applies corr_thm and uses normalization by evaluation to "prove" f s =
11866r and finally gets the theorem t = r, which is again applied to the
11867subgoal. An Example is available in src/HOL/ex/ReflectionEx.thy.
11868
11869* Reflection: Automatic reification now handels binding, an example is
11870available in src/HOL/ex/ReflectionEx.thy
11871
11872* HOL-Statespace: ``State Spaces: The Locale Way'' introduces a
11873command 'statespace' that is similar to 'record', but introduces an
11874abstract specification based on the locale infrastructure instead of
11875HOL types.  This leads to extra flexibility in composing state spaces,
11876in particular multiple inheritance and renaming of components.
11877
11878
11879*** HOL-Complex ***
11880
11881* Hyperreal: Functions root and sqrt are now defined on negative real
11882inputs so that root n (- x) = - root n x and sqrt (- x) = - sqrt x.
11883Nonnegativity side conditions have been removed from many lemmas, so
11884that more subgoals may now be solved by simplification; potential
11885INCOMPATIBILITY.
11886
11887* Real: new type classes formalize real normed vector spaces and
11888algebras, using new overloaded constants scaleR :: real => 'a => 'a
11889and norm :: 'a => real.
11890
11891* Real: constant of_real :: real => 'a::real_algebra_1 injects from
11892reals into other types. The overloaded constant Reals :: 'a set is now
11893defined as range of_real; potential INCOMPATIBILITY.
11894
11895* Real: proper support for ML code generation, including 'quickcheck'.
11896Reals are implemented as arbitrary precision rationals.
11897
11898* Hyperreal: Several constants that previously worked only for the
11899reals have been generalized, so they now work over arbitrary vector
11900spaces. Type annotations may need to be added in some cases; potential
11901INCOMPATIBILITY.
11902
11903  Infinitesimal  :: ('a::real_normed_vector) star set
11904  HFinite        :: ('a::real_normed_vector) star set
11905  HInfinite      :: ('a::real_normed_vector) star set
11906  approx         :: ('a::real_normed_vector) star => 'a star => bool
11907  monad          :: ('a::real_normed_vector) star => 'a star set
11908  galaxy         :: ('a::real_normed_vector) star => 'a star set
11909  (NS)LIMSEQ     :: [nat => 'a::real_normed_vector, 'a] => bool
11910  (NS)convergent :: (nat => 'a::real_normed_vector) => bool
11911  (NS)Bseq       :: (nat => 'a::real_normed_vector) => bool
11912  (NS)Cauchy     :: (nat => 'a::real_normed_vector) => bool
11913  (NS)LIM        :: ['a::real_normed_vector => 'b::real_normed_vector, 'a, 'b] => bool
11914  is(NS)Cont     :: ['a::real_normed_vector => 'b::real_normed_vector, 'a] => bool
11915  deriv          :: ['a::real_normed_field => 'a, 'a, 'a] => bool
11916  sgn            :: 'a::real_normed_vector => 'a
11917  exp            :: 'a::{recpower,real_normed_field,banach} => 'a
11918
11919* Complex: Some complex-specific constants are now abbreviations for
11920overloaded ones: complex_of_real = of_real, cmod = norm, hcmod =
11921hnorm.  Other constants have been entirely removed in favor of the
11922polymorphic versions (INCOMPATIBILITY):
11923
11924  approx        <-- capprox
11925  HFinite       <-- CFinite
11926  HInfinite     <-- CInfinite
11927  Infinitesimal <-- CInfinitesimal
11928  monad         <-- cmonad
11929  galaxy        <-- cgalaxy
11930  (NS)LIM       <-- (NS)CLIM, (NS)CRLIM
11931  is(NS)Cont    <-- is(NS)Contc, is(NS)contCR
11932  (ns)deriv     <-- (ns)cderiv
11933
11934
11935*** HOL-Algebra ***
11936
11937* Formalisation of ideals and the quotient construction over rings.
11938
11939* Order and lattice theory no longer based on records.
11940INCOMPATIBILITY.
11941
11942* Renamed lemmas least_carrier -> least_closed and greatest_carrier ->
11943greatest_closed.  INCOMPATIBILITY.
11944
11945* Method algebra is now set up via an attribute.  For examples see
11946Ring.thy.  INCOMPATIBILITY: the method is now weaker on combinations
11947of algebraic structures.
11948
11949* Renamed theory CRing to Ring.
11950
11951
11952*** HOL-Nominal ***
11953
11954* Substantial, yet incomplete support for nominal datatypes (binding
11955structures) based on HOL-Nominal logic.  See src/HOL/Nominal and
11956src/HOL/Nominal/Examples.  Prospective users should consult
11957http://isabelle.in.tum.de/nominal/
11958
11959
11960*** ML ***
11961
11962* ML basics: just one true type int, which coincides with IntInf.int
11963(even on SML/NJ).
11964
11965* ML within Isar: antiquotations allow to embed statically-checked
11966formal entities in the source, referring to the context available at
11967compile-time.  For example:
11968
11969ML {* @{sort "{zero,one}"} *}
11970ML {* @{typ "'a => 'b"} *}
11971ML {* @{term "%x. x"} *}
11972ML {* @{prop "x == y"} *}
11973ML {* @{ctyp "'a => 'b"} *}
11974ML {* @{cterm "%x. x"} *}
11975ML {* @{cprop "x == y"} *}
11976ML {* @{thm asm_rl} *}
11977ML {* @{thms asm_rl} *}
11978ML {* @{type_name c} *}
11979ML {* @{type_syntax c} *}
11980ML {* @{const_name c} *}
11981ML {* @{const_syntax c} *}
11982ML {* @{context} *}
11983ML {* @{theory} *}
11984ML {* @{theory Pure} *}
11985ML {* @{theory_ref} *}
11986ML {* @{theory_ref Pure} *}
11987ML {* @{simpset} *}
11988ML {* @{claset} *}
11989ML {* @{clasimpset} *}
11990
11991The same works for sources being ``used'' within an Isar context.
11992
11993* ML in Isar: improved error reporting; extra verbosity with
11994ML_Context.trace enabled.
11995
11996* Pure/General/table.ML: the join operations now works via exceptions
11997DUP/SAME instead of type option. This is simpler in simple cases, and
11998admits slightly more efficient complex applications.
11999
12000* Pure: 'advanced' translation functions (parse_translation etc.) now
12001use Context.generic instead of just theory.
12002
12003* Pure: datatype Context.generic joins theory/Proof.context and
12004provides some facilities for code that works in either kind of
12005context, notably GenericDataFun for uniform theory and proof data.
12006
12007* Pure: simplified internal attribute type, which is now always
12008Context.generic * thm -> Context.generic * thm. Global (theory) vs.
12009local (Proof.context) attributes have been discontinued, while
12010minimizing code duplication. Thm.rule_attribute and
12011Thm.declaration_attribute build canonical attributes; see also structure
12012Context for further operations on Context.generic, notably
12013GenericDataFun. INCOMPATIBILITY, need to adapt attribute type
12014declarations and definitions.
12015
12016* Context data interfaces (Theory/Proof/GenericDataFun): removed
12017name/print, uninitialized data defaults to ad-hoc copy of empty value,
12018init only required for impure data. INCOMPATIBILITY: empty really need
12019to be empty (no dependencies on theory content!)
12020
12021* Pure/kernel: consts certification ignores sort constraints given in
12022signature declarations. (This information is not relevant to the
12023logic, but only for type inference.) SIGNIFICANT INTERNAL CHANGE,
12024potential INCOMPATIBILITY.
12025
12026* Pure: axiomatic type classes are now purely definitional, with
12027explicit proofs of class axioms and super class relations performed
12028internally. See Pure/axclass.ML for the main internal interfaces --
12029notably AxClass.define_class supercedes AxClass.add_axclass, and
12030AxClass.axiomatize_class/classrel/arity supersede
12031Sign.add_classes/classrel/arities.
12032
12033* Pure/Isar: Args/Attrib parsers operate on Context.generic --
12034global/local versions on theory vs. Proof.context have been
12035discontinued; Attrib.syntax and Method.syntax have been adapted
12036accordingly.  INCOMPATIBILITY, need to adapt parser expressions for
12037attributes, methods, etc.
12038
12039* Pure: several functions of signature "... -> theory -> theory * ..."
12040have been reoriented to "... -> theory -> ... * theory" in order to
12041allow natural usage in combination with the ||>, ||>>, |-> and
12042fold_map combinators.
12043
12044* Pure: official theorem names (closed derivations) and additional
12045comments (tags) are now strictly separate.  Name hints -- which are
12046maintained as tags -- may be attached any time without affecting the
12047derivation.
12048
12049* Pure: primitive rule lift_rule now takes goal cterm instead of an
12050actual goal state (thm).  Use Thm.lift_rule (Thm.cprem_of st i) to
12051achieve the old behaviour.
12052
12053* Pure: the "Goal" constant is now called "prop", supporting a
12054slightly more general idea of ``protecting'' meta-level rule
12055statements.
12056
12057* Pure: Logic.(un)varify only works in a global context, which is now
12058enforced instead of silently assumed.  INCOMPATIBILITY, may use
12059Logic.legacy_(un)varify as temporary workaround.
12060
12061* Pure: structure Name provides scalable operations for generating
12062internal variable names, notably Name.variants etc.  This replaces
12063some popular functions from term.ML:
12064
12065  Term.variant		->  Name.variant
12066  Term.variantlist	->  Name.variant_list
12067  Term.invent_names	->  Name.invent_list
12068
12069Note that low-level renaming rarely occurs in new code -- operations
12070from structure Variable are used instead (see below).
12071
12072* Pure: structure Variable provides fundamental operations for proper
12073treatment of fixed/schematic variables in a context.  For example,
12074Variable.import introduces fixes for schematics of given facts and
12075Variable.export reverses the effect (up to renaming) -- this replaces
12076various freeze_thaw operations.
12077
12078* Pure: structure Goal provides simple interfaces for
12079init/conclude/finish and tactical prove operations (replacing former
12080Tactic.prove).  Goal.prove is the canonical way to prove results
12081within a given context; Goal.prove_global is a degraded version for
12082theory level goals, including a global Drule.standard.  Note that
12083OldGoals.prove_goalw_cterm has long been obsolete, since it is
12084ill-behaved in a local proof context (e.g. with local fixes/assumes or
12085in a locale context).
12086
12087* Pure/Syntax: generic interfaces for parsing (Syntax.parse_term etc.)
12088and type checking (Syntax.check_term etc.), with common combinations
12089(Syntax.read_term etc.). These supersede former Sign.read_term etc.
12090which are considered legacy and await removal.
12091
12092* Pure/Syntax: generic interfaces for type unchecking
12093(Syntax.uncheck_terms etc.) and unparsing (Syntax.unparse_term etc.),
12094with common combinations (Syntax.pretty_term, Syntax.string_of_term
12095etc.).  Former Sign.pretty_term, Sign.string_of_term etc. are still
12096available for convenience, but refer to the very same operations using
12097a mere theory instead of a full context.
12098
12099* Isar: simplified treatment of user-level errors, using exception
12100ERROR of string uniformly.  Function error now merely raises ERROR,
12101without any side effect on output channels.  The Isar toplevel takes
12102care of proper display of ERROR exceptions.  ML code may use plain
12103handle/can/try; cat_error may be used to concatenate errors like this:
12104
12105  ... handle ERROR msg => cat_error msg "..."
12106
12107Toplevel ML code (run directly or through the Isar toplevel) may be
12108embedded into the Isar toplevel with exception display/debug like
12109this:
12110
12111  Isar.toplevel (fn () => ...)
12112
12113INCOMPATIBILITY, removed special transform_error facilities, removed
12114obsolete variants of user-level exceptions (ERROR_MESSAGE,
12115Context.PROOF, ProofContext.CONTEXT, Proof.STATE, ProofHistory.FAIL)
12116-- use plain ERROR instead.
12117
12118* Isar: theory setup now has type (theory -> theory), instead of a
12119list.  INCOMPATIBILITY, may use #> to compose setup functions.
12120
12121* Isar: ML toplevel pretty printer for type Proof.context, subject to
12122ProofContext.debug/verbose flags.
12123
12124* Isar: Toplevel.theory_to_proof admits transactions that modify the
12125theory before entering a proof state.  Transactions now always see a
12126quasi-functional intermediate checkpoint, both in interactive and
12127batch mode.
12128
12129* Isar: simplified interfaces for outer syntax.  Renamed
12130OuterSyntax.add_keywords to OuterSyntax.keywords.  Removed
12131OuterSyntax.add_parsers -- this functionality is now included in
12132OuterSyntax.command etc.  INCOMPATIBILITY.
12133
12134* Simplifier: the simpset of a running simplification process now
12135contains a proof context (cf. Simplifier.the_context), which is the
12136very context that the initial simpset has been retrieved from (by
12137simpset_of/local_simpset_of).  Consequently, all plug-in components
12138(solver, looper etc.) may depend on arbitrary proof data.
12139
12140* Simplifier.inherit_context inherits the proof context (plus the
12141local bounds) of the current simplification process; any simproc
12142etc. that calls the Simplifier recursively should do this!  Removed
12143former Simplifier.inherit_bounds, which is already included here --
12144INCOMPATIBILITY.  Tools based on low-level rewriting may even have to
12145specify an explicit context using Simplifier.context/theory_context.
12146
12147* Simplifier/Classical Reasoner: more abstract interfaces
12148change_simpset/claset for modifying the simpset/claset reference of a
12149theory; raw versions simpset/claset_ref etc. have been discontinued --
12150INCOMPATIBILITY.
12151
12152* Provers: more generic wrt. syntax of object-logics, avoid hardwired
12153"Trueprop" etc.
12154
12155
12156*** System ***
12157
12158* settings: the default heap location within ISABELLE_HOME_USER now
12159includes ISABELLE_IDENTIFIER.  This simplifies use of multiple
12160Isabelle installations.
12161
12162* isabelle-process: option -S (secure mode) disables some critical
12163operations, notably runtime compilation and evaluation of ML source
12164code.
12165
12166* Basic Isabelle mode for jEdit, see Isabelle/lib/jedit/.
12167
12168* Support for parallel execution, using native multicore support of
12169Poly/ML 5.1.  The theory loader exploits parallelism when processing
12170independent theories, according to the given theory header
12171specifications. The maximum number of worker threads is specified via
12172usedir option -M or the "max-threads" setting in Proof General. A
12173speedup factor of 1.5--3.5 can be expected on a 4-core machine, and up
12174to 6 on a 8-core machine.  User-code needs to observe certain
12175guidelines for thread-safe programming, see appendix A in the Isar
12176Implementation manual.
12177
12178
12179
12180New in Isabelle2005 (October 2005)
12181----------------------------------
12182
12183*** General ***
12184
12185* Theory headers: the new header syntax for Isar theories is
12186
12187  theory <name>
12188  imports <theory1> ... <theoryN>
12189  uses <file1> ... <fileM>
12190  begin
12191
12192where the 'uses' part is optional.  The previous syntax
12193
12194  theory <name> = <theory1> + ... + <theoryN>:
12195
12196will disappear in the next release.  Use isatool fixheaders to convert
12197existing theory files.  Note that there is no change in ancient
12198non-Isar theories now, but these will disappear soon.
12199
12200* Theory loader: parent theories can now also be referred to via
12201relative and absolute paths.
12202
12203* Command 'find_theorems' searches for a list of criteria instead of a
12204list of constants. Known criteria are: intro, elim, dest, name:string,
12205simp:term, and any term. Criteria can be preceded by '-' to select
12206theorems that do not match. Intro, elim, dest select theorems that
12207match the current goal, name:s selects theorems whose fully qualified
12208name contain s, and simp:term selects all simplification rules whose
12209lhs match term.  Any other term is interpreted as pattern and selects
12210all theorems matching the pattern. Available in ProofGeneral under
12211'ProofGeneral -> Find Theorems' or C-c C-f.  Example:
12212
12213  C-c C-f (100) "(_::nat) + _ + _" intro -name: "HOL."
12214
12215prints the last 100 theorems matching the pattern "(_::nat) + _ + _",
12216matching the current goal as introduction rule and not having "HOL."
12217in their name (i.e. not being defined in theory HOL).
12218
12219* Command 'thms_containing' has been discontinued in favour of
12220'find_theorems'; INCOMPATIBILITY.
12221
12222* Communication with Proof General is now 8bit clean, which means that
12223Unicode text in UTF-8 encoding may be used within theory texts (both
12224formal and informal parts).  Cf. option -U of the Isabelle Proof
12225General interface.  Here are some simple examples (cf. src/HOL/ex):
12226
12227  http://isabelle.in.tum.de/library/HOL/ex/Hebrew.html
12228  http://isabelle.in.tum.de/library/HOL/ex/Chinese.html
12229
12230* Improved efficiency of the Simplifier and, to a lesser degree, the
12231Classical Reasoner.  Typical big applications run around 2 times
12232faster.
12233
12234
12235*** Document preparation ***
12236
12237* Commands 'display_drafts' and 'print_drafts' perform simple output
12238of raw sources.  Only those symbols that do not require additional
12239LaTeX packages (depending on comments in isabellesym.sty) are
12240displayed properly, everything else is left verbatim.  isatool display
12241and isatool print are used as front ends (these are subject to the
12242DVI/PDF_VIEWER and PRINT_COMMAND settings, respectively).
12243
12244* Command tags control specific markup of certain regions of text,
12245notably folding and hiding.  Predefined tags include "theory" (for
12246theory begin and end), "proof" for proof commands, and "ML" for
12247commands involving ML code; the additional tags "visible" and
12248"invisible" are unused by default.  Users may give explicit tag
12249specifications in the text, e.g. ''by %invisible (auto)''.  The
12250interpretation of tags is determined by the LaTeX job during document
12251preparation: see option -V of isatool usedir, or options -n and -t of
12252isatool document, or even the LaTeX macros \isakeeptag, \isafoldtag,
12253\isadroptag.
12254
12255Several document versions may be produced at the same time via isatool
12256usedir (the generated index.html will link all of them).  Typical
12257specifications include ''-V document=theory,proof,ML'' to present
12258theory/proof/ML parts faithfully, ''-V outline=/proof,/ML'' to fold
12259proof and ML commands, and ''-V mutilated=-theory,-proof,-ML'' to omit
12260these parts without any formal replacement text.  The Isabelle site
12261default settings produce ''document'' and ''outline'' versions as
12262specified above.
12263
12264* Several new antiquotations:
12265
12266  @{term_type term} prints a term with its type annotated;
12267
12268  @{typeof term} prints the type of a term;
12269
12270  @{const const} is the same as @{term const}, but checks that the
12271  argument is a known logical constant;
12272
12273  @{term_style style term} and @{thm_style style thm} print a term or
12274  theorem applying a "style" to it
12275
12276  @{ML text}
12277
12278Predefined styles are 'lhs' and 'rhs' printing the lhs/rhs of
12279definitions, equations, inequations etc., 'concl' printing only the
12280conclusion of a meta-logical statement theorem, and 'prem1' .. 'prem19'
12281to print the specified premise.  TermStyle.add_style provides an ML
12282interface for introducing further styles.  See also the "LaTeX Sugar"
12283document practical applications.  The ML antiquotation prints
12284type-checked ML expressions verbatim.
12285
12286* Markup commands 'chapter', 'section', 'subsection', 'subsubsection',
12287and 'text' support optional locale specification '(in loc)', which
12288specifies the default context for interpreting antiquotations.  For
12289example: 'text (in lattice) {* @{thm inf_assoc}*}'.
12290
12291* Option 'locale=NAME' of antiquotations specifies an alternative
12292context interpreting the subsequent argument.  For example: @{thm
12293[locale=lattice] inf_assoc}.
12294
12295* Proper output of proof terms (@{prf ...} and @{full_prf ...}) within
12296a proof context.
12297
12298* Proper output of antiquotations for theory commands involving a
12299proof context (such as 'locale' or 'theorem (in loc) ...').
12300
12301* Delimiters of outer tokens (string etc.) now produce separate LaTeX
12302macros (\isachardoublequoteopen, isachardoublequoteclose etc.).
12303
12304* isatool usedir: new option -C (default true) controls whether option
12305-D should include a copy of the original document directory; -C false
12306prevents unwanted effects such as copying of administrative CVS data.
12307
12308
12309*** Pure ***
12310
12311* Considerably improved version of 'constdefs' command.  Now performs
12312automatic type-inference of declared constants; additional support for
12313local structure declarations (cf. locales and HOL records), see also
12314isar-ref manual.  Potential INCOMPATIBILITY: need to observe strictly
12315sequential dependencies of definitions within a single 'constdefs'
12316section; moreover, the declared name needs to be an identifier.  If
12317all fails, consider to fall back on 'consts' and 'defs' separately.
12318
12319* Improved indexed syntax and implicit structures.  First of all,
12320indexed syntax provides a notational device for subscripted
12321application, using the new syntax \<^bsub>term\<^esub> for arbitrary
12322expressions.  Secondly, in a local context with structure
12323declarations, number indexes \<^sub>n or the empty index (default
12324number 1) refer to a certain fixed variable implicitly; option
12325show_structs controls printing of implicit structures.  Typical
12326applications of these concepts involve record types and locales.
12327
12328* New command 'no_syntax' removes grammar declarations (and
12329translations) resulting from the given syntax specification, which is
12330interpreted in the same manner as for the 'syntax' command.
12331
12332* 'Advanced' translation functions (parse_translation etc.) may depend
12333on the signature of the theory context being presently used for
12334parsing/printing, see also isar-ref manual.
12335
12336* Improved 'oracle' command provides a type-safe interface to turn an
12337ML expression of type theory -> T -> term into a primitive rule of
12338type theory -> T -> thm (i.e. the functionality of Thm.invoke_oracle
12339is already included here); see also FOL/ex/IffExample.thy;
12340INCOMPATIBILITY.
12341
12342* axclass: name space prefix for class "c" is now "c_class" (was "c"
12343before); "cI" is no longer bound, use "c.intro" instead.
12344INCOMPATIBILITY.  This change avoids clashes of fact bindings for
12345axclasses vs. locales.
12346
12347* Improved internal renaming of symbolic identifiers -- attach primes
12348instead of base 26 numbers.
12349
12350* New flag show_question_marks controls printing of leading question
12351marks in schematic variable names.
12352
12353* In schematic variable names, *any* symbol following \<^isub> or
12354\<^isup> is now treated as part of the base name.  For example, the
12355following works without printing of awkward ".0" indexes:
12356
12357  lemma "x\<^isub>1 = x\<^isub>2 ==> x\<^isub>2 = x\<^isub>1"
12358    by simp
12359
12360* Inner syntax includes (*(*nested*) comments*).
12361
12362* Pretty printer now supports unbreakable blocks, specified in mixfix
12363annotations as "(00...)".
12364
12365* Clear separation of logical types and nonterminals, where the latter
12366may only occur in 'syntax' specifications or type abbreviations.
12367Before that distinction was only partially implemented via type class
12368"logic" vs. "{}".  Potential INCOMPATIBILITY in rare cases of improper
12369use of 'types'/'consts' instead of 'nonterminals'/'syntax'.  Some very
12370exotic syntax specifications may require further adaption
12371(e.g. Cube/Cube.thy).
12372
12373* Removed obsolete type class "logic", use the top sort {} instead.
12374Note that non-logical types should be declared as 'nonterminals'
12375rather than 'types'.  INCOMPATIBILITY for new object-logic
12376specifications.
12377
12378* Attributes 'induct' and 'cases': type or set names may now be
12379locally fixed variables as well.
12380
12381* Simplifier: can now control the depth to which conditional rewriting
12382is traced via the PG menu Isabelle -> Settings -> Trace Simp Depth
12383Limit.
12384
12385* Simplifier: simplification procedures may now take the current
12386simpset into account (cf. Simplifier.simproc(_i) / mk_simproc
12387interface), which is very useful for calling the Simplifier
12388recursively.  Minor INCOMPATIBILITY: the 'prems' argument of simprocs
12389is gone -- use prems_of_ss on the simpset instead.  Moreover, the
12390low-level mk_simproc no longer applies Logic.varify internally, to
12391allow for use in a context of fixed variables.
12392
12393* thin_tac now works even if the assumption being deleted contains !!
12394or ==>.  More generally, erule now works even if the major premise of
12395the elimination rule contains !! or ==>.
12396
12397* Method 'rules' has been renamed to 'iprover'. INCOMPATIBILITY.
12398
12399* Reorganized bootstrapping of the Pure theories; CPure is now derived
12400from Pure, which contains all common declarations already.  Both
12401theories are defined via plain Isabelle/Isar .thy files.
12402INCOMPATIBILITY: elements of CPure (such as the CPure.intro /
12403CPure.elim / CPure.dest attributes) now appear in the Pure name space;
12404use isatool fixcpure to adapt your theory and ML sources.
12405
12406* New syntax 'name(i-j, i-, i, ...)' for referring to specific
12407selections of theorems in named facts via index ranges.
12408
12409* 'print_theorems': in theory mode, really print the difference
12410wrt. the last state (works for interactive theory development only),
12411in proof mode print all local facts (cf. 'print_facts');
12412
12413* 'hide': option '(open)' hides only base names.
12414
12415* More efficient treatment of intermediate checkpoints in interactive
12416theory development.
12417
12418* Code generator is now invoked via code_module (incremental code
12419generation) and code_library (modular code generation, ML structures
12420for each theory).  INCOMPATIBILITY: new keywords 'file' and 'contains'
12421must be quoted when used as identifiers.
12422
12423* New 'value' command for reading, evaluating and printing terms using
12424the code generator.  INCOMPATIBILITY: command keyword 'value' must be
12425quoted when used as identifier.
12426
12427
12428*** Locales ***
12429
12430* New commands for the interpretation of locale expressions in
12431theories (1), locales (2) and proof contexts (3).  These generate
12432proof obligations from the expression specification.  After the
12433obligations have been discharged, theorems of the expression are added
12434to the theory, target locale or proof context.  The synopsis of the
12435commands is a follows:
12436
12437  (1) interpretation expr inst
12438  (2) interpretation target < expr
12439  (3) interpret expr inst
12440
12441Interpretation in theories and proof contexts require a parameter
12442instantiation of terms from the current context.  This is applied to
12443specifications and theorems of the interpreted expression.
12444Interpretation in locales only permits parameter renaming through the
12445locale expression.  Interpretation is smart in that interpretations
12446that are active already do not occur in proof obligations, neither are
12447instantiated theorems stored in duplicate.  Use 'print_interps' to
12448inspect active interpretations of a particular locale.  For details,
12449see the Isar Reference manual.  Examples can be found in
12450HOL/Finite_Set.thy and HOL/Algebra/UnivPoly.thy.
12451
12452INCOMPATIBILITY: former 'instantiate' has been withdrawn, use
12453'interpret' instead.
12454
12455* New context element 'constrains' for adding type constraints to
12456parameters.
12457
12458* Context expressions: renaming of parameters with syntax
12459redeclaration.
12460
12461* Locale declaration: 'includes' disallowed.
12462
12463* Proper static binding of attribute syntax -- i.e. types / terms /
12464facts mentioned as arguments are always those of the locale definition
12465context, independently of the context of later invocations.  Moreover,
12466locale operations (renaming and type / term instantiation) are applied
12467to attribute arguments as expected.
12468
12469INCOMPATIBILITY of the ML interface: always pass Attrib.src instead of
12470actual attributes; rare situations may require Attrib.attribute to
12471embed those attributes into Attrib.src that lack concrete syntax.
12472Attribute implementations need to cooperate properly with the static
12473binding mechanism.  Basic parsers Args.XXX_typ/term/prop and
12474Attrib.XXX_thm etc. already do the right thing without further
12475intervention.  Only unusual applications -- such as "where" or "of"
12476(cf. src/Pure/Isar/attrib.ML), which process arguments depending both
12477on the context and the facts involved -- may have to assign parsed
12478values to argument tokens explicitly.
12479
12480* Changed parameter management in theorem generation for long goal
12481statements with 'includes'.  INCOMPATIBILITY: produces a different
12482theorem statement in rare situations.
12483
12484* Locale inspection command 'print_locale' omits notes elements.  Use
12485'print_locale!' to have them included in the output.
12486
12487
12488*** Provers ***
12489
12490* Provers/hypsubst.ML: improved version of the subst method, for
12491single-step rewriting: it now works in bound variable contexts. New is
12492'subst (asm)', for rewriting an assumption.  INCOMPATIBILITY: may
12493rewrite a different subterm than the original subst method, which is
12494still available as 'simplesubst'.
12495
12496* Provers/quasi.ML: new transitivity reasoners for transitivity only
12497and quasi orders.
12498
12499* Provers/trancl.ML: new transitivity reasoner for transitive and
12500reflexive-transitive closure of relations.
12501
12502* Provers/blast.ML: new reference depth_limit to make blast's depth
12503limit (previously hard-coded with a value of 20) user-definable.
12504
12505* Provers/simplifier.ML has been moved to Pure, where Simplifier.setup
12506is peformed already.  Object-logics merely need to finish their
12507initial simpset configuration as before.  INCOMPATIBILITY.
12508
12509
12510*** HOL ***
12511
12512* Symbolic syntax of Hilbert Choice Operator is now as follows:
12513
12514  syntax (epsilon)
12515    "_Eps" :: "[pttrn, bool] => 'a"    ("(3\<some>_./ _)" [0, 10] 10)
12516
12517The symbol \<some> is displayed as the alternative epsilon of LaTeX
12518and x-symbol; use option '-m epsilon' to get it actually printed.
12519Moreover, the mathematically important symbolic identifier \<epsilon>
12520becomes available as variable, constant etc.  INCOMPATIBILITY,
12521
12522* "x > y" abbreviates "y < x" and "x >= y" abbreviates "y <= x".
12523Similarly for all quantifiers: "ALL x > y" etc.  The x-symbol for >=
12524is \<ge>. New transitivity rules have been added to HOL/Orderings.thy to
12525support corresponding Isar calculations.
12526
12527* "{x:A. P}" abbreviates "{x. x:A & P}", and similarly for "\<in>"
12528instead of ":".
12529
12530* theory SetInterval: changed the syntax for open intervals:
12531
12532  Old       New
12533  {..n(}    {..<n}
12534  {)n..}    {n<..}
12535  {m..n(}   {m..<n}
12536  {)m..n}   {m<..n}
12537  {)m..n(}  {m<..<n}
12538
12539The old syntax is still supported but will disappear in the next
12540release.  For conversion use the following Emacs search and replace
12541patterns (these are not perfect but work quite well):
12542
12543  {)\([^\.]*\)\.\.  ->  {\1<\.\.}
12544  \.\.\([^(}]*\)(}  ->  \.\.<\1}
12545
12546* Theory Commutative_Ring (in Library): method comm_ring for proving
12547equalities in commutative rings; method 'algebra' provides a generic
12548interface.
12549
12550* Theory Finite_Set: changed the syntax for 'setsum', summation over
12551finite sets: "setsum (%x. e) A", which used to be "\<Sum>x:A. e", is
12552now either "SUM x:A. e" or "\<Sum>x \<in> A. e". The bound variable can
12553be a tuple pattern.
12554
12555Some new syntax forms are available:
12556
12557  "\<Sum>x | P. e"      for     "setsum (%x. e) {x. P}"
12558  "\<Sum>x = a..b. e"   for     "setsum (%x. e) {a..b}"
12559  "\<Sum>x = a..<b. e"  for     "setsum (%x. e) {a..<b}"
12560  "\<Sum>x < k. e"      for     "setsum (%x. e) {..<k}"
12561
12562The latter form "\<Sum>x < k. e" used to be based on a separate
12563function "Summation", which has been discontinued.
12564
12565* theory Finite_Set: in structured induction proofs, the insert case
12566is now 'case (insert x F)' instead of the old counterintuitive 'case
12567(insert F x)'.
12568
12569* The 'refute' command has been extended to support a much larger
12570fragment of HOL, including axiomatic type classes, constdefs and
12571typedefs, inductive datatypes and recursion.
12572
12573* New tactics 'sat' and 'satx' to prove propositional tautologies.
12574Requires zChaff with proof generation to be installed.  See
12575HOL/ex/SAT_Examples.thy for examples.
12576
12577* Datatype induction via method 'induct' now preserves the name of the
12578induction variable. For example, when proving P(xs::'a list) by
12579induction on xs, the induction step is now P(xs) ==> P(a#xs) rather
12580than P(list) ==> P(a#list) as previously.  Potential INCOMPATIBILITY
12581in unstructured proof scripts.
12582
12583* Reworked implementation of records.  Improved scalability for
12584records with many fields, avoiding performance problems for type
12585inference. Records are no longer composed of nested field types, but
12586of nested extension types. Therefore the record type only grows linear
12587in the number of extensions and not in the number of fields.  The
12588top-level (users) view on records is preserved.  Potential
12589INCOMPATIBILITY only in strange cases, where the theory depends on the
12590old record representation. The type generated for a record is called
12591<record_name>_ext_type.
12592
12593Flag record_quick_and_dirty_sensitive can be enabled to skip the
12594proofs triggered by a record definition or a simproc (if
12595quick_and_dirty is enabled).  Definitions of large records can take
12596quite long.
12597
12598New simproc record_upd_simproc for simplification of multiple record
12599updates enabled by default.  Moreover, trivial updates are also
12600removed: r(|x := x r|) = r.  INCOMPATIBILITY: old proofs break
12601occasionally, since simplification is more powerful by default.
12602
12603* typedef: proper support for polymorphic sets, which contain extra
12604type-variables in the term.
12605
12606* Simplifier: automatically reasons about transitivity chains
12607involving "trancl" (r^+) and "rtrancl" (r^*) by setting up tactics
12608provided by Provers/trancl.ML as additional solvers.  INCOMPATIBILITY:
12609old proofs break occasionally as simplification may now solve more
12610goals than previously.
12611
12612* Simplifier: converts x <= y into x = y if assumption y <= x is
12613present.  Works for all partial orders (class "order"), in particular
12614numbers and sets.  For linear orders (e.g. numbers) it treats ~ x < y
12615just like y <= x.
12616
12617* Simplifier: new simproc for "let x = a in f x".  If a is a free or
12618bound variable or a constant then the let is unfolded.  Otherwise
12619first a is simplified to b, and then f b is simplified to g. If
12620possible we abstract b from g arriving at "let x = b in h x",
12621otherwise we unfold the let and arrive at g.  The simproc can be
12622enabled/disabled by the reference use_let_simproc.  Potential
12623INCOMPATIBILITY since simplification is more powerful by default.
12624
12625* Classical reasoning: the meson method now accepts theorems as arguments.
12626
12627* Prover support: pre-release of the Isabelle-ATP linkup, which runs background
12628jobs to provide advice on the provability of subgoals.
12629
12630* Theory OrderedGroup and Ring_and_Field: various additions and
12631improvements to faciliate calculations involving equalities and
12632inequalities.
12633
12634The following theorems have been eliminated or modified
12635(INCOMPATIBILITY):
12636
12637  abs_eq             now named abs_of_nonneg
12638  abs_of_ge_0        now named abs_of_nonneg
12639  abs_minus_eq       now named abs_of_nonpos
12640  imp_abs_id         now named abs_of_nonneg
12641  imp_abs_neg_id     now named abs_of_nonpos
12642  mult_pos           now named mult_pos_pos
12643  mult_pos_le        now named mult_nonneg_nonneg
12644  mult_pos_neg_le    now named mult_nonneg_nonpos
12645  mult_pos_neg2_le   now named mult_nonneg_nonpos2
12646  mult_neg           now named mult_neg_neg
12647  mult_neg_le        now named mult_nonpos_nonpos
12648
12649* The following lemmas in Ring_and_Field have been added to the simplifier:
12650
12651     zero_le_square
12652     not_square_less_zero
12653
12654  The following lemmas have been deleted from Real/RealPow:
12655
12656     realpow_zero_zero
12657     realpow_two
12658     realpow_less
12659     zero_le_power
12660     realpow_two_le
12661     abs_realpow_two
12662     realpow_two_abs
12663
12664* Theory Parity: added rules for simplifying exponents.
12665
12666* Theory List:
12667
12668The following theorems have been eliminated or modified
12669(INCOMPATIBILITY):
12670
12671  list_all_Nil       now named list_all.simps(1)
12672  list_all_Cons      now named list_all.simps(2)
12673  list_all_conv      now named list_all_iff
12674  set_mem_eq         now named mem_iff
12675
12676* Theories SetsAndFunctions and BigO (see HOL/Library) support
12677asymptotic "big O" calculations.  See the notes in BigO.thy.
12678
12679
12680*** HOL-Complex ***
12681
12682* Theory RealDef: better support for embedding natural numbers and
12683integers in the reals.
12684
12685The following theorems have been eliminated or modified
12686(INCOMPATIBILITY):
12687
12688  exp_ge_add_one_self  now requires no hypotheses
12689  real_of_int_add      reversed direction of equality (use [symmetric])
12690  real_of_int_minus    reversed direction of equality (use [symmetric])
12691  real_of_int_diff     reversed direction of equality (use [symmetric])
12692  real_of_int_mult     reversed direction of equality (use [symmetric])
12693
12694* Theory RComplete: expanded support for floor and ceiling functions.
12695
12696* Theory Ln is new, with properties of the natural logarithm
12697
12698* Hyperreal: There is a new type constructor "star" for making
12699nonstandard types.  The old type names are now type synonyms:
12700
12701  hypreal = real star
12702  hypnat = nat star
12703  hcomplex = complex star
12704
12705* Hyperreal: Many groups of similarly-defined constants have been
12706replaced by polymorphic versions (INCOMPATIBILITY):
12707
12708  star_of <-- hypreal_of_real, hypnat_of_nat, hcomplex_of_complex
12709
12710  starset      <-- starsetNat, starsetC
12711  *s*          <-- *sNat*, *sc*
12712  starset_n    <-- starsetNat_n, starsetC_n
12713  *sn*         <-- *sNatn*, *scn*
12714  InternalSets <-- InternalNatSets, InternalCSets
12715
12716  starfun      <-- starfun{Nat,Nat2,C,RC,CR}
12717  *f*          <-- *fNat*, *fNat2*, *fc*, *fRc*, *fcR*
12718  starfun_n    <-- starfun{Nat,Nat2,C,RC,CR}_n
12719  *fn*         <-- *fNatn*, *fNat2n*, *fcn*, *fRcn*, *fcRn*
12720  InternalFuns <-- InternalNatFuns, InternalNatFuns2, Internal{C,RC,CR}Funs
12721
12722* Hyperreal: Many type-specific theorems have been removed in favor of
12723theorems specific to various axiomatic type classes (INCOMPATIBILITY):
12724
12725  add_commute <-- {hypreal,hypnat,hcomplex}_add_commute
12726  add_assoc   <-- {hypreal,hypnat,hcomplex}_add_assocs
12727  OrderedGroup.add_0 <-- {hypreal,hypnat,hcomplex}_add_zero_left
12728  OrderedGroup.add_0_right <-- {hypreal,hcomplex}_add_zero_right
12729  right_minus <-- hypreal_add_minus
12730  left_minus <-- {hypreal,hcomplex}_add_minus_left
12731  mult_commute <-- {hypreal,hypnat,hcomplex}_mult_commute
12732  mult_assoc <-- {hypreal,hypnat,hcomplex}_mult_assoc
12733  mult_1_left <-- {hypreal,hypnat}_mult_1, hcomplex_mult_one_left
12734  mult_1_right <-- hcomplex_mult_one_right
12735  mult_zero_left <-- hcomplex_mult_zero_left
12736  left_distrib <-- {hypreal,hypnat,hcomplex}_add_mult_distrib
12737  right_distrib <-- hypnat_add_mult_distrib2
12738  zero_neq_one <-- {hypreal,hypnat,hcomplex}_zero_not_eq_one
12739  right_inverse <-- hypreal_mult_inverse
12740  left_inverse <-- hypreal_mult_inverse_left, hcomplex_mult_inv_left
12741  order_refl <-- {hypreal,hypnat}_le_refl
12742  order_trans <-- {hypreal,hypnat}_le_trans
12743  order_antisym <-- {hypreal,hypnat}_le_anti_sym
12744  order_less_le <-- {hypreal,hypnat}_less_le
12745  linorder_linear <-- {hypreal,hypnat}_le_linear
12746  add_left_mono <-- {hypreal,hypnat}_add_left_mono
12747  mult_strict_left_mono <-- {hypreal,hypnat}_mult_less_mono2
12748  add_nonneg_nonneg <-- hypreal_le_add_order
12749
12750* Hyperreal: Separate theorems having to do with type-specific
12751versions of constants have been merged into theorems that apply to the
12752new polymorphic constants (INCOMPATIBILITY):
12753
12754  STAR_UNIV_set <-- {STAR_real,NatStar_real,STARC_complex}_set
12755  STAR_empty_set <-- {STAR,NatStar,STARC}_empty_set
12756  STAR_Un <-- {STAR,NatStar,STARC}_Un
12757  STAR_Int <-- {STAR,NatStar,STARC}_Int
12758  STAR_Compl <-- {STAR,NatStar,STARC}_Compl
12759  STAR_subset <-- {STAR,NatStar,STARC}_subset
12760  STAR_mem <-- {STAR,NatStar,STARC}_mem
12761  STAR_mem_Compl <-- {STAR,STARC}_mem_Compl
12762  STAR_diff <-- {STAR,STARC}_diff
12763  STAR_star_of_image_subset <-- {STAR_hypreal_of_real, NatStar_hypreal_of_real,
12764    STARC_hcomplex_of_complex}_image_subset
12765  starset_n_Un <-- starset{Nat,C}_n_Un
12766  starset_n_Int <-- starset{Nat,C}_n_Int
12767  starset_n_Compl <-- starset{Nat,C}_n_Compl
12768  starset_n_diff <-- starset{Nat,C}_n_diff
12769  InternalSets_Un <-- Internal{Nat,C}Sets_Un
12770  InternalSets_Int <-- Internal{Nat,C}Sets_Int
12771  InternalSets_Compl <-- Internal{Nat,C}Sets_Compl
12772  InternalSets_diff <-- Internal{Nat,C}Sets_diff
12773  InternalSets_UNIV_diff <-- Internal{Nat,C}Sets_UNIV_diff
12774  InternalSets_starset_n <-- Internal{Nat,C}Sets_starset{Nat,C}_n
12775  starset_starset_n_eq <-- starset{Nat,C}_starset{Nat,C}_n_eq
12776  starset_n_starset <-- starset{Nat,C}_n_starset{Nat,C}
12777  starfun_n_starfun <-- starfun{Nat,Nat2,C,RC,CR}_n_starfun{Nat,Nat2,C,RC,CR}
12778  starfun <-- starfun{Nat,Nat2,C,RC,CR}
12779  starfun_mult <-- starfun{Nat,Nat2,C,RC,CR}_mult
12780  starfun_add <-- starfun{Nat,Nat2,C,RC,CR}_add
12781  starfun_minus <-- starfun{Nat,Nat2,C,RC,CR}_minus
12782  starfun_diff <-- starfun{C,RC,CR}_diff
12783  starfun_o <-- starfun{NatNat2,Nat2,_stafunNat,C,C_starfunRC,_starfunCR}_o
12784  starfun_o2 <-- starfun{NatNat2,_stafunNat,C,C_starfunRC,_starfunCR}_o2
12785  starfun_const_fun <-- starfun{Nat,Nat2,C,RC,CR}_const_fun
12786  starfun_inverse <-- starfun{Nat,C,RC,CR}_inverse
12787  starfun_eq <-- starfun{Nat,Nat2,C,RC,CR}_eq
12788  starfun_eq_iff <-- starfun{C,RC,CR}_eq_iff
12789  starfun_Id <-- starfunC_Id
12790  starfun_approx <-- starfun{Nat,CR}_approx
12791  starfun_capprox <-- starfun{C,RC}_capprox
12792  starfun_abs <-- starfunNat_rabs
12793  starfun_lambda_cancel <-- starfun{C,CR,RC}_lambda_cancel
12794  starfun_lambda_cancel2 <-- starfun{C,CR,RC}_lambda_cancel2
12795  starfun_mult_HFinite_approx <-- starfunCR_mult_HFinite_capprox
12796  starfun_mult_CFinite_capprox <-- starfun{C,RC}_mult_CFinite_capprox
12797  starfun_add_capprox <-- starfun{C,RC}_add_capprox
12798  starfun_add_approx <-- starfunCR_add_approx
12799  starfun_inverse_inverse <-- starfunC_inverse_inverse
12800  starfun_divide <-- starfun{C,CR,RC}_divide
12801  starfun_n <-- starfun{Nat,C}_n
12802  starfun_n_mult <-- starfun{Nat,C}_n_mult
12803  starfun_n_add <-- starfun{Nat,C}_n_add
12804  starfun_n_add_minus <-- starfunNat_n_add_minus
12805  starfun_n_const_fun <-- starfun{Nat,C}_n_const_fun
12806  starfun_n_minus <-- starfun{Nat,C}_n_minus
12807  starfun_n_eq <-- starfun{Nat,C}_n_eq
12808
12809  star_n_add <-- {hypreal,hypnat,hcomplex}_add
12810  star_n_minus <-- {hypreal,hcomplex}_minus
12811  star_n_diff <-- {hypreal,hcomplex}_diff
12812  star_n_mult <-- {hypreal,hcomplex}_mult
12813  star_n_inverse <-- {hypreal,hcomplex}_inverse
12814  star_n_le <-- {hypreal,hypnat}_le
12815  star_n_less <-- {hypreal,hypnat}_less
12816  star_n_zero_num <-- {hypreal,hypnat,hcomplex}_zero_num
12817  star_n_one_num <-- {hypreal,hypnat,hcomplex}_one_num
12818  star_n_abs <-- hypreal_hrabs
12819  star_n_divide <-- hcomplex_divide
12820
12821  star_of_add <-- {hypreal_of_real,hypnat_of_nat,hcomplex_of_complex}_add
12822  star_of_minus <-- {hypreal_of_real,hcomplex_of_complex}_minus
12823  star_of_diff <-- hypreal_of_real_diff
12824  star_of_mult <-- {hypreal_of_real,hypnat_of_nat,hcomplex_of_complex}_mult
12825  star_of_one <-- {hypreal_of_real,hcomplex_of_complex}_one
12826  star_of_zero <-- {hypreal_of_real,hypnat_of_nat,hcomplex_of_complex}_zero
12827  star_of_le <-- {hypreal_of_real,hypnat_of_nat}_le_iff
12828  star_of_less <-- {hypreal_of_real,hypnat_of_nat}_less_iff
12829  star_of_eq <-- {hypreal_of_real,hypnat_of_nat,hcomplex_of_complex}_eq_iff
12830  star_of_inverse <-- {hypreal_of_real,hcomplex_of_complex}_inverse
12831  star_of_divide <-- {hypreal_of_real,hcomplex_of_complex}_divide
12832  star_of_of_nat <-- {hypreal_of_real,hcomplex_of_complex}_of_nat
12833  star_of_of_int <-- {hypreal_of_real,hcomplex_of_complex}_of_int
12834  star_of_number_of <-- {hypreal,hcomplex}_number_of
12835  star_of_number_less <-- number_of_less_hypreal_of_real_iff
12836  star_of_number_le <-- number_of_le_hypreal_of_real_iff
12837  star_of_eq_number <-- hypreal_of_real_eq_number_of_iff
12838  star_of_less_number <-- hypreal_of_real_less_number_of_iff
12839  star_of_le_number <-- hypreal_of_real_le_number_of_iff
12840  star_of_power <-- hypreal_of_real_power
12841  star_of_eq_0 <-- hcomplex_of_complex_zero_iff
12842
12843* Hyperreal: new method "transfer" that implements the transfer
12844principle of nonstandard analysis. With a subgoal that mentions
12845nonstandard types like "'a star", the command "apply transfer"
12846replaces it with an equivalent one that mentions only standard types.
12847To be successful, all free variables must have standard types; non-
12848standard variables must have explicit universal quantifiers.
12849
12850* Hyperreal: A theory of Taylor series.
12851
12852
12853*** HOLCF ***
12854
12855* Discontinued special version of 'constdefs' (which used to support
12856continuous functions) in favor of the general Pure one with full
12857type-inference.
12858
12859* New simplification procedure for solving continuity conditions; it
12860is much faster on terms with many nested lambda abstractions (cubic
12861instead of exponential time).
12862
12863* New syntax for domain package: selector names are now optional.
12864Parentheses should be omitted unless argument is lazy, for example:
12865
12866  domain 'a stream = cons "'a" (lazy "'a stream")
12867
12868* New command 'fixrec' for defining recursive functions with pattern
12869matching; defining multiple functions with mutual recursion is also
12870supported.  Patterns may include the constants cpair, spair, up, sinl,
12871sinr, or any data constructor defined by the domain package. The given
12872equations are proven as rewrite rules. See HOLCF/ex/Fixrec_ex.thy for
12873syntax and examples.
12874
12875* New commands 'cpodef' and 'pcpodef' for defining predicate subtypes
12876of cpo and pcpo types. Syntax is exactly like the 'typedef' command,
12877but the proof obligation additionally includes an admissibility
12878requirement. The packages generate instances of class cpo or pcpo,
12879with continuity and strictness theorems for Rep and Abs.
12880
12881* HOLCF: Many theorems have been renamed according to a more standard naming
12882scheme (INCOMPATIBILITY):
12883
12884  foo_inject:  "foo$x = foo$y ==> x = y"
12885  foo_eq:      "(foo$x = foo$y) = (x = y)"
12886  foo_less:    "(foo$x << foo$y) = (x << y)"
12887  foo_strict:  "foo$UU = UU"
12888  foo_defined: "... ==> foo$x ~= UU"
12889  foo_defined_iff: "(foo$x = UU) = (x = UU)"
12890
12891
12892*** ZF ***
12893
12894* ZF/ex: theories Group and Ring provide examples in abstract algebra,
12895including the First Isomorphism Theorem (on quotienting by the kernel
12896of a homomorphism).
12897
12898* ZF/Simplifier: install second copy of type solver that actually
12899makes use of TC rules declared to Isar proof contexts (or locales);
12900the old version is still required for ML proof scripts.
12901
12902
12903*** Cube ***
12904
12905* Converted to Isar theory format; use locales instead of axiomatic
12906theories.
12907
12908
12909*** ML ***
12910
12911* Pure/library.ML: added ##>, ##>>, #>> -- higher-order counterparts
12912for ||>, ||>>, |>>,
12913
12914* Pure/library.ML no longer defines its own option datatype, but uses
12915that of the SML basis, which has constructors NONE and SOME instead of
12916None and Some, as well as exception Option.Option instead of OPTION.
12917The functions the, if_none, is_some, is_none have been adapted
12918accordingly, while Option.map replaces apsome.
12919
12920* Pure/library.ML: the exception LIST has been given up in favour of
12921the standard exceptions Empty and Subscript, as well as
12922Library.UnequalLengths.  Function like Library.hd and Library.tl are
12923superceded by the standard hd and tl functions etc.
12924
12925A number of basic list functions are no longer exported to the ML
12926toplevel, as they are variants of predefined functions.  The following
12927suggests how one can translate existing code:
12928
12929    rev_append xs ys = List.revAppend (xs, ys)
12930    nth_elem (i, xs) = List.nth (xs, i)
12931    last_elem xs = List.last xs
12932    flat xss = List.concat xss
12933    seq fs = List.app fs
12934    partition P xs = List.partition P xs
12935    mapfilter f xs = List.mapPartial f xs
12936
12937* Pure/library.ML: several combinators for linear functional
12938transformations, notably reverse application and composition:
12939
12940  x |> f                f #> g
12941  (x, y) |-> f          f #-> g
12942
12943* Pure/library.ML: introduced/changed precedence of infix operators:
12944
12945  infix 1 |> |-> ||> ||>> |>> |>>> #> #->;
12946  infix 2 ?;
12947  infix 3 o oo ooo oooo;
12948  infix 4 ~~ upto downto;
12949
12950Maybe INCOMPATIBILITY when any of those is used in conjunction with other
12951infix operators.
12952
12953* Pure/library.ML: natural list combinators fold, fold_rev, and
12954fold_map support linear functional transformations and nesting.  For
12955example:
12956
12957  fold f [x1, ..., xN] y =
12958    y |> f x1 |> ... |> f xN
12959
12960  (fold o fold) f [xs1, ..., xsN] y =
12961    y |> fold f xs1 |> ... |> fold f xsN
12962
12963  fold f [x1, ..., xN] =
12964    f x1 #> ... #> f xN
12965
12966  (fold o fold) f [xs1, ..., xsN] =
12967    fold f xs1 #> ... #> fold f xsN
12968
12969* Pure/library.ML: the following selectors on type 'a option are
12970available:
12971
12972  the:               'a option -> 'a  (*partial*)
12973  these:             'a option -> 'a  where 'a = 'b list
12974  the_default: 'a -> 'a option -> 'a
12975  the_list:          'a option -> 'a list
12976
12977* Pure/General: structure AList (cf. Pure/General/alist.ML) provides
12978basic operations for association lists, following natural argument
12979order; moreover the explicit equality predicate passed here avoids
12980potentially expensive polymorphic runtime equality checks.
12981The old functions may be expressed as follows:
12982
12983  assoc = uncurry (AList.lookup (op =))
12984  assocs = these oo AList.lookup (op =)
12985  overwrite = uncurry (AList.update (op =)) o swap
12986
12987* Pure/General: structure AList (cf. Pure/General/alist.ML) provides
12988
12989  val make: ('a -> 'b) -> 'a list -> ('a * 'b) list
12990  val find: ('a * 'b -> bool) -> ('c * 'b) list -> 'a -> 'c list
12991
12992replacing make_keylist and keyfilter (occassionally used)
12993Naive rewrites:
12994
12995  make_keylist = AList.make
12996  keyfilter = AList.find (op =)
12997
12998* eq_fst and eq_snd now take explicit equality parameter, thus
12999  avoiding eqtypes. Naive rewrites:
13000
13001    eq_fst = eq_fst (op =)
13002    eq_snd = eq_snd (op =)
13003
13004* Removed deprecated apl and apr (rarely used).
13005  Naive rewrites:
13006
13007    apl (n, op) =>>= curry op n
13008    apr (op, m) =>>= fn n => op (n, m)
13009
13010* Pure/General: structure OrdList (cf. Pure/General/ord_list.ML)
13011provides a reasonably efficient light-weight implementation of sets as
13012lists.
13013
13014* Pure/General: generic tables (cf. Pure/General/table.ML) provide a
13015few new operations; existing lookup and update are now curried to
13016follow natural argument order (for use with fold etc.);
13017INCOMPATIBILITY, use (uncurry Symtab.lookup) etc. as last resort.
13018
13019* Pure/General: output via the Isabelle channels of
13020writeln/warning/error etc. is now passed through Output.output, with a
13021hook for arbitrary transformations depending on the print_mode
13022(cf. Output.add_mode -- the first active mode that provides a output
13023function wins).  Already formatted output may be embedded into further
13024text via Output.raw; the result of Pretty.string_of/str_of and derived
13025functions (string_of_term/cterm/thm etc.) is already marked raw to
13026accommodate easy composition of diagnostic messages etc.  Programmers
13027rarely need to care about Output.output or Output.raw at all, with
13028some notable exceptions: Output.output is required when bypassing the
13029standard channels (writeln etc.), or in token translations to produce
13030properly formatted results; Output.raw is required when capturing
13031already output material that will eventually be presented to the user
13032a second time.  For the default print mode, both Output.output and
13033Output.raw have no effect.
13034
13035* Pure/General: Output.time_accumulator NAME creates an operator ('a
13036-> 'b) -> 'a -> 'b to measure runtime and count invocations; the
13037cumulative results are displayed at the end of a batch session.
13038
13039* Pure/General: File.sysify_path and File.quote_sysify path have been
13040replaced by File.platform_path and File.shell_path (with appropriate
13041hooks).  This provides a clean interface for unusual systems where the
13042internal and external process view of file names are different.
13043
13044* Pure: more efficient orders for basic syntactic entities: added
13045fast_string_ord, fast_indexname_ord, fast_term_ord; changed sort_ord
13046and typ_ord to use fast_string_ord and fast_indexname_ord (term_ord is
13047NOT affected); structures Symtab, Vartab, Typtab, Termtab use the fast
13048orders now -- potential INCOMPATIBILITY for code that depends on a
13049particular order for Symtab.keys, Symtab.dest, etc. (consider using
13050Library.sort_strings on result).
13051
13052* Pure/term.ML: combinators fold_atyps, fold_aterms, fold_term_types,
13053fold_types traverse types/terms from left to right, observing natural
13054argument order.  Supercedes previous foldl_XXX versions, add_frees,
13055add_vars etc. have been adapted as well: INCOMPATIBILITY.
13056
13057* Pure: name spaces have been refined, with significant changes of the
13058internal interfaces -- INCOMPATIBILITY.  Renamed cond_extern(_table)
13059to extern(_table).  The plain name entry path is superceded by a
13060general 'naming' context, which also includes the 'policy' to produce
13061a fully qualified name and external accesses of a fully qualified
13062name; NameSpace.extend is superceded by context dependent
13063Sign.declare_name.  Several theory and proof context operations modify
13064the naming context.  Especially note Theory.restore_naming and
13065ProofContext.restore_naming to get back to a sane state; note that
13066Theory.add_path is no longer sufficient to recover from
13067Theory.absolute_path in particular.
13068
13069* Pure: new flags short_names (default false) and unique_names
13070(default true) for controlling output of qualified names.  If
13071short_names is set, names are printed unqualified.  If unique_names is
13072reset, the name prefix is reduced to the minimum required to achieve
13073the original result when interning again, even if there is an overlap
13074with earlier declarations.
13075
13076* Pure/TheoryDataFun: change of the argument structure; 'prep_ext' is
13077now 'extend', and 'merge' gets an additional Pretty.pp argument
13078(useful for printing error messages).  INCOMPATIBILITY.
13079
13080* Pure: major reorganization of the theory context.  Type Sign.sg and
13081Theory.theory are now identified, referring to the universal
13082Context.theory (see Pure/context.ML).  Actual signature and theory
13083content is managed as theory data.  The old code and interfaces were
13084spread over many files and structures; the new arrangement introduces
13085considerable INCOMPATIBILITY to gain more clarity:
13086
13087  Context -- theory management operations (name, identity, inclusion,
13088    parents, ancestors, merge, etc.), plus generic theory data;
13089
13090  Sign -- logical signature and syntax operations (declaring consts,
13091    types, etc.), plus certify/read for common entities;
13092
13093  Theory -- logical theory operations (stating axioms, definitions,
13094    oracles), plus a copy of logical signature operations (consts,
13095    types, etc.); also a few basic management operations (Theory.copy,
13096    Theory.merge, etc.)
13097
13098The most basic sign_of operations (Theory.sign_of, Thm.sign_of_thm
13099etc.) as well as the sign field in Thm.rep_thm etc. have been retained
13100for convenience -- they merely return the theory.
13101
13102* Pure: type Type.tsig is superceded by theory in most interfaces.
13103
13104* Pure: the Isar proof context type is already defined early in Pure
13105as Context.proof (note that ProofContext.context and Proof.context are
13106aliases, where the latter is the preferred name).  This enables other
13107Isabelle components to refer to that type even before Isar is present.
13108
13109* Pure/sign/theory: discontinued named name spaces (i.e. classK,
13110typeK, constK, axiomK, oracleK), but provide explicit operations for
13111any of these kinds.  For example, Sign.intern typeK is now
13112Sign.intern_type, Theory.hide_space Sign.typeK is now
13113Theory.hide_types.  Also note that former
13114Theory.hide_classes/types/consts are now
13115Theory.hide_classes_i/types_i/consts_i, while the non '_i' versions
13116internalize their arguments!  INCOMPATIBILITY.
13117
13118* Pure: get_thm interface (of PureThy and ProofContext) expects
13119datatype thmref (with constructors Name and NameSelection) instead of
13120plain string -- INCOMPATIBILITY;
13121
13122* Pure: cases produced by proof methods specify options, where NONE
13123means to remove case bindings -- INCOMPATIBILITY in
13124(RAW_)METHOD_CASES.
13125
13126* Pure: the following operations retrieve axioms or theorems from a
13127theory node or theory hierarchy, respectively:
13128
13129  Theory.axioms_of: theory -> (string * term) list
13130  Theory.all_axioms_of: theory -> (string * term) list
13131  PureThy.thms_of: theory -> (string * thm) list
13132  PureThy.all_thms_of: theory -> (string * thm) list
13133
13134* Pure: print_tac now outputs the goal through the trace channel.
13135
13136* Isar toplevel: improved diagnostics, mostly for Poly/ML only.
13137Reference Toplevel.debug (default false) controls detailed printing
13138and tracing of low-level exceptions; Toplevel.profiling (default 0)
13139controls execution profiling -- set to 1 for time and 2 for space
13140(both increase the runtime).
13141
13142* Isar session: The initial use of ROOT.ML is now always timed,
13143i.e. the log will show the actual process times, in contrast to the
13144elapsed wall-clock time that the outer shell wrapper produces.
13145
13146* Simplifier: improved handling of bound variables (nameless
13147representation, avoid allocating new strings).  Simprocs that invoke
13148the Simplifier recursively should use Simplifier.inherit_bounds to
13149avoid local name clashes.  Failure to do so produces warnings
13150"Simplifier: renamed bound variable ..."; set Simplifier.debug_bounds
13151for further details.
13152
13153* ML functions legacy_bindings and use_legacy_bindings produce ML fact
13154bindings for all theorems stored within a given theory; this may help
13155in porting non-Isar theories to Isar ones, while keeping ML proof
13156scripts for the time being.
13157
13158* ML operator HTML.with_charset specifies the charset begin used for
13159generated HTML files.  For example:
13160
13161  HTML.with_charset "utf-8" use_thy "Hebrew";
13162  HTML.with_charset "utf-8" use_thy "Chinese";
13163
13164
13165*** System ***
13166
13167* Allow symlinks to all proper Isabelle executables (Isabelle,
13168isabelle, isatool etc.).
13169
13170* ISABELLE_DOC_FORMAT setting specifies preferred document format (for
13171isatool doc, isatool mkdir, display_drafts etc.).
13172
13173* isatool usedir: option -f allows specification of the ML file to be
13174used by Isabelle; default is ROOT.ML.
13175
13176* New isatool version outputs the version identifier of the Isabelle
13177distribution being used.
13178
13179* HOL: new isatool dimacs2hol converts files in DIMACS CNF format
13180(containing Boolean satisfiability problems) into Isabelle/HOL
13181theories.
13182
13183
13184
13185New in Isabelle2004 (April 2004)
13186--------------------------------
13187
13188*** General ***
13189
13190* Provers/order.ML:  new efficient reasoner for partial and linear orders.
13191  Replaces linorder.ML.
13192
13193* Pure: Greek letters (except small lambda, \<lambda>), as well as Gothic
13194  (\<aa>...\<zz>\<AA>...\<ZZ>), calligraphic (\<A>...\<Z>), and Euler
13195  (\<a>...\<z>), are now considered normal letters, and can therefore
13196  be used anywhere where an ASCII letter (a...zA...Z) has until
13197  now. COMPATIBILITY: This obviously changes the parsing of some
13198  terms, especially where a symbol has been used as a binder, say
13199  '\<Pi>x. ...', which is now a type error since \<Pi>x will be parsed
13200  as an identifier.  Fix it by inserting a space around former
13201  symbols.  Call 'isatool fixgreek' to try to fix parsing errors in
13202  existing theory and ML files.
13203
13204* Pure: Macintosh and Windows line-breaks are now allowed in theory files.
13205
13206* Pure: single letter sub/superscripts (\<^isub> and \<^isup>) are now
13207  allowed in identifiers. Similar to Greek letters \<^isub> is now considered
13208  a normal (but invisible) letter. For multiple letter subscripts repeat
13209  \<^isub> like this: x\<^isub>1\<^isub>2.
13210
13211* Pure: There are now sub-/superscripts that can span more than one
13212  character. Text between \<^bsub> and \<^esub> is set in subscript in
13213  ProofGeneral and LaTeX, text between \<^bsup> and \<^esup> in
13214  superscript. The new control characters are not identifier parts.
13215
13216* Pure: Control-symbols of the form \<^raw:...> will literally print the
13217  content of "..." to the latex file instead of \isacntrl... . The "..."
13218  may consist of any printable characters excluding the end bracket >.
13219
13220* Pure: Using new Isar command "finalconsts" (or the ML functions
13221  Theory.add_finals or Theory.add_finals_i) it is now possible to
13222  declare constants "final", which prevents their being given a definition
13223  later.  It is useful for constants whose behaviour is fixed axiomatically
13224  rather than definitionally, such as the meta-logic connectives.
13225
13226* Pure: 'instance' now handles general arities with general sorts
13227  (i.e. intersections of classes),
13228
13229* Presentation: generated HTML now uses a CSS style sheet to make layout
13230  (somewhat) independent of content. It is copied from lib/html/isabelle.css.
13231  It can be changed to alter the colors/layout of generated pages.
13232
13233
13234*** Isar ***
13235
13236* Tactic emulation methods rule_tac, erule_tac, drule_tac, frule_tac,
13237  cut_tac, subgoal_tac and thin_tac:
13238  - Now understand static (Isar) contexts.  As a consequence, users of Isar
13239    locales are no longer forced to write Isar proof scripts.
13240    For details see Isar Reference Manual, paragraph 4.3.2: Further tactic
13241    emulations.
13242  - INCOMPATIBILITY: names of variables to be instantiated may no
13243    longer be enclosed in quotes.  Instead, precede variable name with `?'.
13244    This is consistent with the instantiation attribute "where".
13245
13246* Attributes "where" and "of":
13247  - Now take type variables of instantiated theorem into account when reading
13248    the instantiation string.  This fixes a bug that caused instantiated
13249    theorems to have too special types in some circumstances.
13250  - "where" permits explicit instantiations of type variables.
13251
13252* Calculation commands "moreover" and "also" no longer interfere with
13253  current facts ("this"), admitting arbitrary combinations with "then"
13254  and derived forms.
13255
13256* Locales:
13257  - Goal statements involving the context element "includes" no longer
13258    generate theorems with internal delta predicates (those ending on
13259    "_axioms") in the premise.
13260    Resolve particular premise with <locale>.intro to obtain old form.
13261  - Fixed bug in type inference ("unify_frozen") that prevented mix of target
13262    specification and "includes" elements in goal statement.
13263  - Rule sets <locale>.intro and <locale>.axioms no longer declared as
13264    [intro?] and [elim?] (respectively) by default.
13265  - Experimental command for instantiation of locales in proof contexts:
13266        instantiate <label>[<attrs>]: <loc>
13267    Instantiates locale <loc> and adds all its theorems to the current context
13268    taking into account their attributes.  Label and attrs are optional
13269    modifiers, like in theorem declarations.  If present, names of
13270    instantiated theorems are qualified with <label>, and the attributes
13271    <attrs> are applied after any attributes these theorems might have already.
13272      If the locale has assumptions, a chained fact of the form
13273    "<loc> t1 ... tn" is expected from which instantiations of the parameters
13274    are derived.  The command does not support old-style locales declared
13275    with "locale (open)".
13276      A few (very simple) examples can be found in FOL/ex/LocaleInst.thy.
13277
13278* HOL: Tactic emulation methods induct_tac and case_tac understand static
13279  (Isar) contexts.
13280
13281
13282*** HOL ***
13283
13284* Proof import: new image HOL4 contains the imported library from
13285  the HOL4 system with about 2500 theorems. It is imported by
13286  replaying proof terms produced by HOL4 in Isabelle. The HOL4 image
13287  can be used like any other Isabelle image.  See
13288  HOL/Import/HOL/README for more information.
13289
13290* Simplifier:
13291  - Much improved handling of linear and partial orders.
13292    Reasoners for linear and partial orders are set up for type classes
13293    "linorder" and "order" respectively, and are added to the default simpset
13294    as solvers.  This means that the simplifier can build transitivity chains
13295    to solve goals from the assumptions.
13296  - INCOMPATIBILITY: old proofs break occasionally.  Typically, applications
13297    of blast or auto after simplification become unnecessary because the goal
13298    is solved by simplification already.
13299
13300* Numerics: new theory Ring_and_Field contains over 250 basic numerical laws,
13301    all proved in axiomatic type classes for semirings, rings and fields.
13302
13303* Numerics:
13304  - Numeric types (nat, int, and in HOL-Complex rat, real, complex, etc.) are
13305    now formalized using the Ring_and_Field theory mentioned above.
13306  - INCOMPATIBILITY: simplification and arithmetic behaves somewhat differently
13307    than before, because now they are set up once in a generic manner.
13308  - INCOMPATIBILITY: many type-specific arithmetic laws have gone.
13309    Look for the general versions in Ring_and_Field (and Power if they concern
13310    exponentiation).
13311
13312* Type "rat" of the rational numbers is now available in HOL-Complex.
13313
13314* Records:
13315  - Record types are now by default printed with their type abbreviation
13316    instead of the list of all field types. This can be configured via
13317    the reference "print_record_type_abbr".
13318  - Simproc "record_upd_simproc" for simplification of multiple updates added
13319    (not enabled by default).
13320  - Simproc "record_ex_sel_eq_simproc" to simplify EX x. sel r = x resp.
13321    EX x. x = sel r to True (not enabled by default).
13322  - Tactic "record_split_simp_tac" to split and simplify records added.
13323
13324* 'specification' command added, allowing for definition by
13325  specification.  There is also an 'ax_specification' command that
13326  introduces the new constants axiomatically.
13327
13328* arith(_tac) is now able to generate counterexamples for reals as well.
13329
13330* HOL-Algebra: new locale "ring" for non-commutative rings.
13331
13332* HOL-ex: InductiveInvariant_examples illustrates advanced recursive function
13333  definitions, thanks to Sava Krsti\'{c} and John Matthews.
13334
13335* HOL-Matrix: a first theory for matrices in HOL with an application of
13336  matrix theory to linear programming.
13337
13338* Unions and Intersections:
13339  The latex output syntax of UN and INT has been changed
13340  from "\Union x \in A. B" to "\Union_{x \in A} B"
13341  i.e. the index formulae has become a subscript.
13342  Similarly for "\Union x. B", and for \Inter instead of \Union.
13343
13344* Unions and Intersections over Intervals:
13345  There is new short syntax "UN i<=n. A" for "UN i:{0..n}. A". There is
13346  also an x-symbol version with subscripts "\<Union>\<^bsub>i <= n\<^esub>. A"
13347  like in normal math, and corresponding versions for < and for intersection.
13348
13349* HOL/List: Ordering "lexico" is renamed "lenlex" and the standard
13350  lexicographic dictonary ordering has been added as "lexord".
13351
13352* ML: the legacy theory structures Int and List have been removed. They had
13353  conflicted with ML Basis Library structures having the same names.
13354
13355* 'refute' command added to search for (finite) countermodels.  Only works
13356  for a fragment of HOL.  The installation of an external SAT solver is
13357  highly recommended.  See "HOL/Refute.thy" for details.
13358
13359* 'quickcheck' command: Allows to find counterexamples by evaluating
13360  formulae under an assignment of free variables to random values.
13361  In contrast to 'refute', it can deal with inductive datatypes,
13362  but cannot handle quantifiers. See "HOL/ex/Quickcheck_Examples.thy"
13363  for examples.
13364
13365
13366*** HOLCF ***
13367
13368* Streams now come with concatenation and are part of the HOLCF image
13369
13370
13371
13372New in Isabelle2003 (May 2003)
13373------------------------------
13374
13375*** General ***
13376
13377* Provers/simplifier:
13378
13379  - Completely reimplemented method simp (ML: Asm_full_simp_tac):
13380    Assumptions are now subject to complete mutual simplification,
13381    not just from left to right. The simplifier now preserves
13382    the order of assumptions.
13383
13384    Potential INCOMPATIBILITY:
13385
13386    -- simp sometimes diverges where the old version did
13387       not, e.g. invoking simp on the goal
13388
13389        [| P (f x); y = x; f x = f y |] ==> Q
13390
13391       now gives rise to the infinite reduction sequence
13392
13393        P(f x) --(f x = f y)--> P(f y) --(y = x)--> P(f x) --(f x = f y)--> ...
13394
13395       Using "simp (asm_lr)" (ML: Asm_lr_simp_tac) instead often solves this
13396       kind of problem.
13397
13398    -- Tactics combining classical reasoner and simplification (such as auto)
13399       are also affected by this change, because many of them rely on
13400       simp. They may sometimes diverge as well or yield a different numbers
13401       of subgoals. Try to use e.g. force, fastsimp, or safe instead of auto
13402       in case of problems. Sometimes subsequent calls to the classical
13403       reasoner will fail because a preceeding call to the simplifier too
13404       eagerly simplified the goal, e.g. deleted redundant premises.
13405
13406  - The simplifier trace now shows the names of the applied rewrite rules
13407
13408  - You can limit the number of recursive invocations of the simplifier
13409    during conditional rewriting (where the simplifie tries to solve the
13410    conditions before applying the rewrite rule):
13411    ML "simp_depth_limit := n"
13412    where n is an integer. Thus you can force termination where previously
13413    the simplifier would diverge.
13414
13415  - Accepts free variables as head terms in congruence rules.  Useful in Isar.
13416
13417  - No longer aborts on failed congruence proof.  Instead, the
13418    congruence is ignored.
13419
13420* Pure: New generic framework for extracting programs from constructive
13421  proofs. See HOL/Extraction.thy for an example instantiation, as well
13422  as HOL/Extraction for some case studies.
13423
13424* Pure: The main goal of the proof state is no longer shown by default, only
13425the subgoals. This behaviour is controlled by a new flag.
13426   PG menu: Isabelle/Isar -> Settings -> Show Main Goal
13427(ML: Proof.show_main_goal).
13428
13429* Pure: You can find all matching introduction rules for subgoal 1, i.e. all
13430rules whose conclusion matches subgoal 1:
13431      PG menu: Isabelle/Isar -> Show me -> matching rules
13432The rules are ordered by how closely they match the subgoal.
13433In particular, rules that solve a subgoal outright are displayed first
13434(or rather last, the way they are printed).
13435(ML: ProofGeneral.print_intros())
13436
13437* Pure: New flag trace_unify_fail causes unification to print
13438diagnostic information (PG: in trace buffer) when it fails. This is
13439useful for figuring out why single step proofs like rule, erule or
13440assumption failed.
13441
13442* Pure: Locale specifications now produce predicate definitions
13443according to the body of text (covering assumptions modulo local
13444definitions); predicate "loc_axioms" covers newly introduced text,
13445while "loc" is cumulative wrt. all included locale expressions; the
13446latter view is presented only on export into the global theory
13447context; potential INCOMPATIBILITY, use "(open)" option to fall back
13448on the old view without predicates;
13449
13450* Pure: predefined locales "var" and "struct" are useful for sharing
13451parameters (as in CASL, for example); just specify something like
13452``var x + var y + struct M'' as import;
13453
13454* Pure: improved thms_containing: proper indexing of facts instead of
13455raw theorems; check validity of results wrt. current name space;
13456include local facts of proof configuration (also covers active
13457locales), cover fixed variables in index; may use "_" in term
13458specification; an optional limit for the number of printed facts may
13459be given (the default is 40);
13460
13461* Pure: disallow duplicate fact bindings within new-style theory files
13462(batch-mode only);
13463
13464* Provers: improved induct method: assumptions introduced by case
13465"foo" are split into "foo.hyps" (from the rule) and "foo.prems" (from
13466the goal statement); "foo" still refers to all facts collectively;
13467
13468* Provers: the function blast.overloaded has been removed: all constants
13469are regarded as potentially overloaded, which improves robustness in exchange
13470for slight decrease in efficiency;
13471
13472* Provers/linorder: New generic prover for transitivity reasoning over
13473linear orders.  Note: this prover is not efficient!
13474
13475* Isar: preview of problems to finish 'show' now produce an error
13476rather than just a warning (in interactive mode);
13477
13478
13479*** HOL ***
13480
13481* arith(_tac)
13482
13483 - Produces a counter example if it cannot prove a goal.
13484   Note that the counter example may be spurious if the goal is not a formula
13485   of quantifier-free linear arithmetic.
13486   In ProofGeneral the counter example appears in the trace buffer.
13487
13488 - Knows about div k and mod k where k is a numeral of type nat or int.
13489
13490 - Calls full Presburger arithmetic (by Amine Chaieb) if quantifier-free
13491   linear arithmetic fails. This takes account of quantifiers and divisibility.
13492   Presburger arithmetic can also be called explicitly via presburger(_tac).
13493
13494* simp's arithmetic capabilities have been enhanced a bit: it now
13495takes ~= in premises into account (by performing a case split);
13496
13497* simp reduces "m*(n div m) + n mod m" to n, even if the two summands
13498are distributed over a sum of terms;
13499
13500* New tactic "trans_tac" and method "trans" instantiate
13501Provers/linorder.ML for axclasses "order" and "linorder" (predicates
13502"<=", "<" and "=").
13503
13504* function INCOMPATIBILITIES: Pi-sets have been redefined and moved from main
13505HOL to Library/FuncSet; constant "Fun.op o" is now called "Fun.comp";
13506
13507* 'typedef' command has new option "open" to suppress the set
13508definition;
13509
13510* functions Min and Max on finite sets have been introduced (theory
13511Finite_Set);
13512
13513* attribute [symmetric] now works for relations as well; it turns
13514(x,y) : R^-1 into (y,x) : R, and vice versa;
13515
13516* induct over a !!-quantified statement (say !!x1..xn):
13517  each "case" automatically performs "fix x1 .. xn" with exactly those names.
13518
13519* Map: `empty' is no longer a constant but a syntactic abbreviation for
13520%x. None. Warning: empty_def now refers to the previously hidden definition
13521of the empty set.
13522
13523* Algebra: formalization of classical algebra.  Intended as base for
13524any algebraic development in Isabelle.  Currently covers group theory
13525(up to Sylow's theorem) and ring theory (Universal Property of
13526Univariate Polynomials).  Contributions welcome;
13527
13528* GroupTheory: deleted, since its material has been moved to Algebra;
13529
13530* Complex: new directory of the complex numbers with numeric constants,
13531nonstandard complex numbers, and some complex analysis, standard and
13532nonstandard (Jacques Fleuriot);
13533
13534* HOL-Complex: new image for analysis, replacing HOL-Real and HOL-Hyperreal;
13535
13536* Hyperreal: introduced Gauge integration and hyperreal logarithms (Jacques
13537Fleuriot);
13538
13539* Real/HahnBanach: updated and adapted to locales;
13540
13541* NumberTheory: added Gauss's law of quadratic reciprocity (by Avigad,
13542Gray and Kramer);
13543
13544* UNITY: added the Meier-Sanders theory of progress sets;
13545
13546* MicroJava: bytecode verifier and lightweight bytecode verifier
13547as abstract algorithms, instantiated to the JVM;
13548
13549* Bali: Java source language formalization. Type system, operational
13550semantics, axiomatic semantics. Supported language features:
13551classes, interfaces, objects,virtual methods, static methods,
13552static/instance fields, arrays, access modifiers, definite
13553assignment, exceptions.
13554
13555
13556*** ZF ***
13557
13558* ZF/Constructible: consistency proof for AC (Gdel's constructible
13559universe, etc.);
13560
13561* Main ZF: virtually all theories converted to new-style format;
13562
13563
13564*** ML ***
13565
13566* Pure: Tactic.prove provides sane interface for internal proofs;
13567omits the infamous "standard" operation, so this is more appropriate
13568than prove_goalw_cterm in many situations (e.g. in simprocs);
13569
13570* Pure: improved error reporting of simprocs;
13571
13572* Provers: Simplifier.simproc(_i) provides sane interface for setting
13573up simprocs;
13574
13575
13576*** Document preparation ***
13577
13578* uses \par instead of \\ for line breaks in theory text. This may
13579shift some page breaks in large documents. To get the old behaviour
13580use \renewcommand{\isanewline}{\mbox{}\\\mbox{}} in root.tex.
13581
13582* minimized dependencies of isabelle.sty and isabellesym.sty on
13583other packages
13584
13585* \<euro> now needs package babel/greek instead of marvosym (which
13586broke \Rightarrow)
13587
13588* normal size for \<zero>...\<nine> (uses \mathbf instead of
13589textcomp package)
13590
13591
13592
13593New in Isabelle2002 (March 2002)
13594--------------------------------
13595
13596*** Document preparation ***
13597
13598* greatly simplified document preparation setup, including more
13599graceful interpretation of isatool usedir -i/-d/-D options, and more
13600instructive isatool mkdir; users should basically be able to get
13601started with "isatool mkdir HOL Test && isatool make"; alternatively,
13602users may run a separate document processing stage manually like this:
13603"isatool usedir -D output HOL Test && isatool document Test/output";
13604
13605* theory dependency graph may now be incorporated into documents;
13606isatool usedir -g true will produce session_graph.eps/.pdf for use
13607with \includegraphics of LaTeX;
13608
13609* proper spacing of consecutive markup elements, especially text
13610blocks after section headings;
13611
13612* support bold style (for single symbols only), input syntax is like
13613this: "\<^bold>\<alpha>" or "\<^bold>A";
13614
13615* \<bullet> is now output as bold \cdot by default, which looks much
13616better in printed text;
13617
13618* added default LaTeX bindings for \<tturnstile> and \<TTurnstile>;
13619note that these symbols are currently unavailable in Proof General /
13620X-Symbol; new symbols \<zero>, \<one>, ..., \<nine>, and \<euro>;
13621
13622* isatool latex no longer depends on changed TEXINPUTS, instead
13623isatool document copies the Isabelle style files to the target
13624location;
13625
13626
13627*** Isar ***
13628
13629* Pure/Provers: improved proof by cases and induction;
13630  - 'case' command admits impromptu naming of parameters (such as
13631    "case (Suc n)");
13632  - 'induct' method divinates rule instantiation from the inductive
13633    claim; no longer requires excessive ?P bindings for proper
13634    instantiation of cases;
13635  - 'induct' method properly enumerates all possibilities of set/type
13636    rules; as a consequence facts may be also passed through *type*
13637    rules without further ado;
13638  - 'induct' method now derives symbolic cases from the *rulified*
13639    rule (before it used to rulify cases stemming from the internal
13640    atomized version); this means that the context of a non-atomic
13641    statement becomes is included in the hypothesis, avoiding the
13642    slightly cumbersome show "PROP ?case" form;
13643  - 'induct' may now use elim-style induction rules without chaining
13644    facts, using ``missing'' premises from the goal state; this allows
13645    rules stemming from inductive sets to be applied in unstructured
13646    scripts, while still benefitting from proper handling of non-atomic
13647    statements; NB: major inductive premises need to be put first, all
13648    the rest of the goal is passed through the induction;
13649  - 'induct' proper support for mutual induction involving non-atomic
13650    rule statements (uses the new concept of simultaneous goals, see
13651    below);
13652  - append all possible rule selections, but only use the first
13653    success (no backtracking);
13654  - removed obsolete "(simplified)" and "(stripped)" options of methods;
13655  - undeclared rule case names default to numbers 1, 2, 3, ...;
13656  - added 'print_induct_rules' (covered by help item in recent Proof
13657    General versions);
13658  - moved induct/cases attributes to Pure, methods to Provers;
13659  - generic method setup instantiated for FOL and HOL;
13660
13661* Pure: support multiple simultaneous goal statements, for example
13662"have a: A and b: B" (same for 'theorem' etc.); being a pure
13663meta-level mechanism, this acts as if several individual goals had
13664been stated separately; in particular common proof methods need to be
13665repeated in order to cover all claims; note that a single elimination
13666step is *not* sufficient to establish the two conjunctions, so this
13667fails:
13668
13669  assume "A & B" then have A and B ..   (*".." fails*)
13670
13671better use "obtain" in situations as above; alternative refer to
13672multi-step methods like 'auto', 'simp_all', 'blast+' etc.;
13673
13674* Pure: proper integration with ``locales''; unlike the original
13675version by Florian Kammller, Isar locales package high-level proof
13676contexts rather than raw logical ones (e.g. we admit to include
13677attributes everywhere); operations on locales include merge and
13678rename; support for implicit arguments (``structures''); simultaneous
13679type-inference over imports and text; see also HOL/ex/Locales.thy for
13680some examples;
13681
13682* Pure: the following commands have been ``localized'', supporting a
13683target locale specification "(in name)": 'lemma', 'theorem',
13684'corollary', 'lemmas', 'theorems', 'declare'; the results will be
13685stored both within the locale and at the theory level (exported and
13686qualified by the locale name);
13687
13688* Pure: theory goals may now be specified in ``long'' form, with
13689ad-hoc contexts consisting of arbitrary locale elements. for example
13690``lemma foo: fixes x assumes "A x" shows "B x"'' (local syntax and
13691definitions may be given, too); the result is a meta-level rule with
13692the context elements being discharged in the obvious way;
13693
13694* Pure: new proof command 'using' allows to augment currently used
13695facts after a goal statement ('using' is syntactically analogous to
13696'apply', but acts on the goal's facts only); this allows chained facts
13697to be separated into parts given before and after a claim, as in
13698``from a and b have C using d and e <proof>'';
13699
13700* Pure: renamed "antecedent" case to "rule_context";
13701
13702* Pure: new 'judgment' command records explicit information about the
13703object-logic embedding (used by several tools internally); no longer
13704use hard-wired "Trueprop";
13705
13706* Pure: added 'corollary' command;
13707
13708* Pure: fixed 'token_translation' command;
13709
13710* Pure: removed obsolete 'exported' attribute;
13711
13712* Pure: dummy pattern "_" in is/let is now automatically lifted over
13713bound variables: "ALL x. P x --> Q x" (is "ALL x. _ --> ?C x")
13714supersedes more cumbersome ... (is "ALL x. _ x --> ?C x");
13715
13716* Pure: method 'atomize' presents local goal premises as object-level
13717statements (atomic meta-level propositions); setup controlled via
13718rewrite rules declarations of 'atomize' attribute; example
13719application: 'induct' method with proper rule statements in improper
13720proof *scripts*;
13721
13722* Pure: emulation of instantiation tactics (rule_tac, cut_tac, etc.)
13723now consider the syntactic context of assumptions, giving a better
13724chance to get type-inference of the arguments right (this is
13725especially important for locales);
13726
13727* Pure: "sorry" no longer requires quick_and_dirty in interactive
13728mode;
13729
13730* Pure/obtain: the formal conclusion "thesis", being marked as
13731``internal'', may no longer be reference directly in the text;
13732potential INCOMPATIBILITY, may need to use "?thesis" in rare
13733situations;
13734
13735* Pure: generic 'sym' attribute which declares a rule both as pure
13736'elim?' and for the 'symmetric' operation;
13737
13738* Pure: marginal comments ``--'' may now occur just anywhere in the
13739text; the fixed correlation with particular command syntax has been
13740discontinued;
13741
13742* Pure: new method 'rules' is particularly well-suited for proof
13743search in intuitionistic logic; a bit slower than 'blast' or 'fast',
13744but often produces more compact proof terms with less detours;
13745
13746* Pure/Provers/classical: simplified integration with pure rule
13747attributes and methods; the classical "intro?/elim?/dest?"
13748declarations coincide with the pure ones; the "rule" method no longer
13749includes classically swapped intros; "intro" and "elim" methods no
13750longer pick rules from the context; also got rid of ML declarations
13751AddXIs/AddXEs/AddXDs; all of this has some potential for
13752INCOMPATIBILITY;
13753
13754* Provers/classical: attribute 'swapped' produces classical inversions
13755of introduction rules;
13756
13757* Provers/simplifier: 'simplified' attribute may refer to explicit
13758rules instead of full simplifier context; 'iff' attribute handles
13759conditional rules;
13760
13761* HOL: 'typedef' now allows alternative names for Rep/Abs morphisms;
13762
13763* HOL: 'recdef' now fails on unfinished automated proofs, use
13764"(permissive)" option to recover old behavior;
13765
13766* HOL: 'inductive' no longer features separate (collective) attributes
13767for 'intros' (was found too confusing);
13768
13769* HOL: properly declared induction rules less_induct and
13770wf_induct_rule;
13771
13772
13773*** HOL ***
13774
13775* HOL: moved over to sane numeral syntax; the new policy is as
13776follows:
13777
13778  - 0 and 1 are polymorphic constants, which are defined on any
13779  numeric type (nat, int, real etc.);
13780
13781  - 2, 3, 4, ... and -1, -2, -3, ... are polymorphic numerals, based
13782  binary representation internally;
13783
13784  - type nat has special constructor Suc, and generally prefers Suc 0
13785  over 1::nat and Suc (Suc 0) over 2::nat;
13786
13787This change may cause significant problems of INCOMPATIBILITY; here
13788are some hints on converting existing sources:
13789
13790  - due to the new "num" token, "-0" and "-1" etc. are now atomic
13791  entities, so expressions involving "-" (unary or binary minus) need
13792  to be spaced properly;
13793
13794  - existing occurrences of "1" may need to be constraint "1::nat" or
13795  even replaced by Suc 0; similar for old "2";
13796
13797  - replace "#nnn" by "nnn", and "#-nnn" by "-nnn";
13798
13799  - remove all special provisions on numerals in proofs;
13800
13801* HOL: simp rules nat_number expand numerals on nat to Suc/0
13802representation (depends on bin_arith_simps in the default context);
13803
13804* HOL: symbolic syntax for x^2 (numeral 2);
13805
13806* HOL: the class of all HOL types is now called "type" rather than
13807"term"; INCOMPATIBILITY, need to adapt references to this type class
13808in axclass/classes, instance/arities, and (usually rare) occurrences
13809in typings (of consts etc.); internally the class is called
13810"HOL.type", ML programs should refer to HOLogic.typeS;
13811
13812* HOL/record package improvements:
13813  - new derived operations "fields" to build a partial record section,
13814    "extend" to promote a fixed record to a record scheme, and
13815    "truncate" for the reverse; cf. theorems "xxx.defs", which are *not*
13816    declared as simp by default;
13817  - shared operations ("more", "fields", etc.) now need to be always
13818    qualified) --- potential INCOMPATIBILITY;
13819  - removed "make_scheme" operations (use "make" with "extend") --
13820    INCOMPATIBILITY;
13821  - removed "more" class (simply use "term") -- INCOMPATIBILITY;
13822  - provides cases/induct rules for use with corresponding Isar
13823    methods (for concrete records, record schemes, concrete more
13824    parts, and schematic more parts -- in that order);
13825  - internal definitions directly based on a light-weight abstract
13826    theory of product types over typedef rather than datatype;
13827
13828* HOL: generic code generator for generating executable ML code from
13829specifications; specific support for HOL constructs such as inductive
13830datatypes and sets, as well as recursive functions; can be invoked
13831via 'generate_code' theory section;
13832
13833* HOL: canonical cases/induct rules for n-tuples (n = 3..7);
13834
13835* HOL: consolidated and renamed several theories.  In particular:
13836        Ord.thy has been absorbed into HOL.thy
13837        String.thy has been absorbed into List.thy
13838
13839* HOL: concrete setsum syntax "\<Sum>i:A. b" == "setsum (%i. b) A"
13840(beware of argument permutation!);
13841
13842* HOL: linorder_less_split superseded by linorder_cases;
13843
13844* HOL/List: "nodups" renamed to "distinct";
13845
13846* HOL: added "The" definite description operator; move Hilbert's "Eps"
13847to peripheral theory "Hilbert_Choice"; some INCOMPATIBILITIES:
13848  - Ex_def has changed, now need to use some_eq_ex
13849
13850* HOL: made split_all_tac safe; EXISTING PROOFS MAY FAIL OR LOOP, so
13851in this (rare) case use:
13852
13853  delSWrapper "split_all_tac"
13854  addSbefore ("unsafe_split_all_tac", unsafe_split_all_tac)
13855
13856* HOL: added safe wrapper "split_conv_tac" to claset; EXISTING PROOFS
13857MAY FAIL;
13858
13859* HOL: introduced f^n = f o ... o f; warning: due to the limits of
13860Isabelle's type classes, ^ on functions and relations has too general
13861a domain, namely ('a * 'b) set and 'a => 'b; this means that it may be
13862necessary to attach explicit type constraints;
13863
13864* HOL/Relation: the prefix name of the infix "O" has been changed from
13865"comp" to "rel_comp"; INCOMPATIBILITY: a few theorems have been
13866renamed accordingly (eg "compI" -> "rel_compI").
13867
13868* HOL: syntax translations now work properly with numerals and records
13869expressions;
13870
13871* HOL: bounded abstraction now uses syntax "%" / "\<lambda>" instead
13872of "lam" -- INCOMPATIBILITY;
13873
13874* HOL: got rid of some global declarations (potential INCOMPATIBILITY
13875for ML tools): const "()" renamed "Product_Type.Unity", type "unit"
13876renamed "Product_Type.unit";
13877
13878* HOL: renamed rtrancl_into_rtrancl2 to converse_rtrancl_into_rtrancl
13879
13880* HOL: removed obsolete theorem "optionE" (use "option.exhaust", or
13881the "cases" method);
13882
13883* HOL/GroupTheory: group theory examples including Sylow's theorem (by
13884Florian Kammller);
13885
13886* HOL/IMP: updated and converted to new-style theory format; several
13887parts turned into readable document, with proper Isar proof texts and
13888some explanations (by Gerwin Klein);
13889
13890* HOL-Real: added Complex_Numbers (by Gertrud Bauer);
13891
13892* HOL-Hyperreal is now a logic image;
13893
13894
13895*** HOLCF ***
13896
13897* Isar: consts/constdefs supports mixfix syntax for continuous
13898operations;
13899
13900* Isar: domain package adapted to new-style theory format, e.g. see
13901HOLCF/ex/Dnat.thy;
13902
13903* theory Lift: proper use of rep_datatype lift instead of ML hacks --
13904potential INCOMPATIBILITY; now use plain induct_tac instead of former
13905lift.induct_tac, always use UU instead of Undef;
13906
13907* HOLCF/IMP: updated and converted to new-style theory;
13908
13909
13910*** ZF ***
13911
13912* Isar: proper integration of logic-specific tools and packages,
13913including theory commands '(co)inductive', '(co)datatype',
13914'rep_datatype', 'inductive_cases', as well as methods 'ind_cases',
13915'induct_tac', 'case_tac', and 'typecheck' (with attribute 'TC');
13916
13917* theory Main no longer includes AC; for the Axiom of Choice, base
13918your theory on Main_ZFC;
13919
13920* the integer library now covers quotients and remainders, with many
13921laws relating division to addition, multiplication, etc.;
13922
13923* ZF/UNITY: Chandy and Misra's UNITY is now available in ZF, giving a
13924typeless version of the formalism;
13925
13926* ZF/AC, Coind, IMP, Resid: updated and converted to new-style theory
13927format;
13928
13929* ZF/Induct: new directory for examples of inductive definitions,
13930including theory Multiset for multiset orderings; converted to
13931new-style theory format;
13932
13933* ZF: many new theorems about lists, ordinals, etc.;
13934
13935
13936*** General ***
13937
13938* Pure/kernel: meta-level proof terms (by Stefan Berghofer); reference
13939variable proof controls level of detail: 0 = no proofs (only oracle
13940dependencies), 1 = lemma dependencies, 2 = compact proof terms; see
13941also ref manual for further ML interfaces;
13942
13943* Pure/axclass: removed obsolete ML interface
13944goal_subclass/goal_arity;
13945
13946* Pure/syntax: new token syntax "num" for plain numerals (without "#"
13947of "xnum"); potential INCOMPATIBILITY, since -0, -1 etc. are now
13948separate tokens, so expressions involving minus need to be spaced
13949properly;
13950
13951* Pure/syntax: support non-oriented infixes, using keyword "infix"
13952rather than "infixl" or "infixr";
13953
13954* Pure/syntax: concrete syntax for dummy type variables admits genuine
13955sort constraint specifications in type inference; e.g. "x::_::foo"
13956ensures that the type of "x" is of sort "foo" (but not necessarily a
13957type variable);
13958
13959* Pure/syntax: print modes "type_brackets" and "no_type_brackets"
13960control output of nested => (types); the default behavior is
13961"type_brackets";
13962
13963* Pure/syntax: builtin parse translation for "_constify" turns valued
13964tokens into AST constants;
13965
13966* Pure/syntax: prefer later declarations of translations and print
13967translation functions; potential INCOMPATIBILITY: need to reverse
13968multiple declarations for same syntax element constant;
13969
13970* Pure/show_hyps reset by default (in accordance to existing Isar
13971practice);
13972
13973* Provers/classical: renamed addaltern to addafter, addSaltern to
13974addSafter;
13975
13976* Provers/clasimp: ``iff'' declarations now handle conditional rules
13977as well;
13978
13979* system: tested support for MacOS X; should be able to get Isabelle +
13980Proof General to work in a plain Terminal after installing Poly/ML
13981(e.g. from the Isabelle distribution area) and GNU bash alone
13982(e.g. from http://www.apple.com); full X11, XEmacs and X-Symbol
13983support requires further installations, e.g. from
13984http://fink.sourceforge.net/);
13985
13986* system: support Poly/ML 4.1.1 (able to manage larger heaps);
13987
13988* system: reduced base memory usage by Poly/ML (approx. 20 MB instead
13989of 40 MB), cf. ML_OPTIONS;
13990
13991* system: Proof General keywords specification is now part of the
13992Isabelle distribution (see etc/isar-keywords.el);
13993
13994* system: support for persistent Proof General sessions (refrain from
13995outdating all loaded theories on startup); user may create writable
13996logic images like this: ``isabelle -q HOL Test'';
13997
13998* system: smart selection of Isabelle process versus Isabelle
13999interface, accommodates case-insensitive file systems (e.g. HFS+); may
14000run both "isabelle" and "Isabelle" even if file names are badly
14001damaged (executable inspects the case of the first letter of its own
14002name); added separate "isabelle-process" and "isabelle-interface";
14003
14004* system: refrain from any attempt at filtering input streams; no
14005longer support ``8bit'' encoding of old isabelle font, instead proper
14006iso-latin characters may now be used; the related isatools
14007"symbolinput" and "nonascii" have disappeared as well;
14008
14009* system: removed old "xterm" interface (the print modes "xterm" and
14010"xterm_color" are still available for direct use in a suitable
14011terminal);
14012
14013
14014
14015New in Isabelle99-2 (February 2001)
14016-----------------------------------
14017
14018*** Overview of INCOMPATIBILITIES ***
14019
14020* HOL: please note that theories in the Library and elsewhere often use the
14021new-style (Isar) format; to refer to their theorems in an ML script you must
14022bind them to ML identifers by e.g.      val thm_name = thm "thm_name";
14023
14024* HOL: inductive package no longer splits induction rule aggressively,
14025but only as far as specified by the introductions given; the old
14026format may be recovered via ML function complete_split_rule or attribute
14027'split_rule (complete)';
14028
14029* HOL: induct renamed to lfp_induct, lfp_Tarski to lfp_unfold,
14030gfp_Tarski to gfp_unfold;
14031
14032* HOL: contrapos, contrapos2 renamed to contrapos_nn, contrapos_pp;
14033
14034* HOL: infix "dvd" now has priority 50 rather than 70 (because it is a
14035relation); infix "^^" has been renamed "``"; infix "``" has been
14036renamed "`"; "univalent" has been renamed "single_valued";
14037
14038* HOL/Real: "rinv" and "hrinv" replaced by overloaded "inverse"
14039operation;
14040
14041* HOLCF: infix "`" has been renamed "$"; the symbol syntax is \<cdot>;
14042
14043* Isar: 'obtain' no longer declares "that" fact as simp/intro;
14044
14045* Isar/HOL: method 'induct' now handles non-atomic goals; as a
14046consequence, it is no longer monotonic wrt. the local goal context
14047(which is now passed through the inductive cases);
14048
14049* Document preparation: renamed standard symbols \<ll> to \<lless> and
14050\<gg> to \<ggreater>;
14051
14052
14053*** Document preparation ***
14054
14055* \isabellestyle{NAME} selects version of Isabelle output (currently
14056available: are "it" for near math-mode best-style output, "sl" for
14057slanted text style, and "tt" for plain type-writer; if no
14058\isabellestyle command is given, output is according to slanted
14059type-writer);
14060
14061* support sub/super scripts (for single symbols only), input syntax is
14062like this: "A\<^sup>*" or "A\<^sup>\<star>";
14063
14064* some more standard symbols; see Appendix A of the system manual for
14065the complete list of symbols defined in isabellesym.sty;
14066
14067* improved isabelle style files; more abstract symbol implementation
14068(should now use \isamath{...} and \isatext{...} in custom symbol
14069definitions);
14070
14071* antiquotation @{goals} and @{subgoals} for output of *dynamic* goals
14072state; Note that presentation of goal states does not conform to
14073actual human-readable proof documents.  Please do not include goal
14074states into document output unless you really know what you are doing!
14075
14076* proper indentation of antiquoted output with proportional LaTeX
14077fonts;
14078
14079* no_document ML operator temporarily disables LaTeX document
14080generation;
14081
14082* isatool unsymbolize tunes sources for plain ASCII communication;
14083
14084
14085*** Isar ***
14086
14087* Pure: Isar now suffers initial goal statements to contain unbound
14088schematic variables (this does not conform to actual readable proof
14089documents, due to unpredictable outcome and non-compositional proof
14090checking); users who know what they are doing may use schematic goals
14091for Prolog-style synthesis of proven results;
14092
14093* Pure: assumption method (an implicit finishing) now handles actual
14094rules as well;
14095
14096* Pure: improved 'obtain' --- moved to Pure, insert "that" into
14097initial goal, declare "that" only as Pure intro (only for single
14098steps); the "that" rule assumption may now be involved in implicit
14099finishing, thus ".." becomes a feasible for trivial obtains;
14100
14101* Pure: default proof step now includes 'intro_classes'; thus trivial
14102instance proofs may be performed by "..";
14103
14104* Pure: ?thesis / ?this / "..." now work for pure meta-level
14105statements as well;
14106
14107* Pure: more robust selection of calculational rules;
14108
14109* Pure: the builtin notion of 'finished' goal now includes the ==-refl
14110rule (as well as the assumption rule);
14111
14112* Pure: 'thm_deps' command visualizes dependencies of theorems and
14113lemmas, using the graph browser tool;
14114
14115* Pure: predict failure of "show" in interactive mode;
14116
14117* Pure: 'thms_containing' now takes actual terms as arguments;
14118
14119* HOL: improved method 'induct' --- now handles non-atomic goals
14120(potential INCOMPATIBILITY); tuned error handling;
14121
14122* HOL: cases and induct rules now provide explicit hints about the
14123number of facts to be consumed (0 for "type" and 1 for "set" rules);
14124any remaining facts are inserted into the goal verbatim;
14125
14126* HOL: local contexts (aka cases) may now contain term bindings as
14127well; the 'cases' and 'induct' methods new provide a ?case binding for
14128the result to be shown in each case;
14129
14130* HOL: added 'recdef_tc' command;
14131
14132* isatool convert assists in eliminating legacy ML scripts;
14133
14134
14135*** HOL ***
14136
14137* HOL/Library: a collection of generic theories to be used together
14138with main HOL; the theory loader path already includes this directory
14139by default; the following existing theories have been moved here:
14140HOL/Induct/Multiset, HOL/Induct/Acc (as Accessible_Part), HOL/While
14141(as While_Combinator), HOL/Lex/Prefix (as List_Prefix);
14142
14143* HOL/Unix: "Some aspects of Unix file-system security", a typical
14144modelling and verification task performed in Isabelle/HOL +
14145Isabelle/Isar + Isabelle document preparation (by Markus Wenzel).
14146
14147* HOL/Algebra: special summation operator SUM no longer exists, it has
14148been replaced by setsum; infix 'assoc' now has priority 50 (like
14149'dvd'); axiom 'one_not_zero' has been moved from axclass 'ring' to
14150'domain', this makes the theory consistent with mathematical
14151literature;
14152
14153* HOL basics: added overloaded operations "inverse" and "divide"
14154(infix "/"), syntax for generic "abs" operation, generic summation
14155operator \<Sum>;
14156
14157* HOL/typedef: simplified package, provide more useful rules (see also
14158HOL/subset.thy);
14159
14160* HOL/datatype: induction rule for arbitrarily branching datatypes is
14161now expressed as a proper nested rule (old-style tactic scripts may
14162require atomize_strip_tac to cope with non-atomic premises);
14163
14164* HOL: renamed theory "Prod" to "Product_Type", renamed "split" rule
14165to "split_conv" (old name still available for compatibility);
14166
14167* HOL: improved concrete syntax for strings (e.g. allows translation
14168rules with string literals);
14169
14170* HOL-Real-Hyperreal: this extends HOL-Real with the hyperreals
14171 and Fleuriot's mechanization of analysis, including the transcendental
14172 functions for the reals;
14173
14174* HOL/Real, HOL/Hyperreal: improved arithmetic simplification;
14175
14176
14177*** CTT ***
14178
14179* CTT: x-symbol support for Pi, Sigma, -->, : (membership); note that
14180"lam" is displayed as TWO lambda-symbols
14181
14182* CTT: theory Main now available, containing everything (that is, Bool
14183and Arith);
14184
14185
14186*** General ***
14187
14188* Pure: the Simplifier has been implemented properly as a derived rule
14189outside of the actual kernel (at last!); the overall performance
14190penalty in practical applications is about 50%, while reliability of
14191the Isabelle inference kernel has been greatly improved;
14192
14193* print modes "brackets" and "no_brackets" control output of nested =>
14194(types) and ==> (props); the default behaviour is "brackets";
14195
14196* Provers: fast_tac (and friends) now handle actual object-logic rules
14197as assumptions as well;
14198
14199* system: support Poly/ML 4.0;
14200
14201* system: isatool install handles KDE version 1 or 2;
14202
14203
14204
14205New in Isabelle99-1 (October 2000)
14206----------------------------------
14207
14208*** Overview of INCOMPATIBILITIES ***
14209
14210* HOL: simplification of natural numbers is much changed; to partly
14211recover the old behaviour (e.g. to prevent n+n rewriting to #2*n)
14212issue the following ML commands:
14213
14214  Delsimprocs Nat_Numeral_Simprocs.cancel_numerals;
14215  Delsimprocs [Nat_Numeral_Simprocs.combine_numerals];
14216
14217* HOL: simplification no longer dives into case-expressions; this is
14218controlled by "t.weak_case_cong" for each datatype t;
14219
14220* HOL: nat_less_induct renamed to less_induct;
14221
14222* HOL: systematic renaming of the SOME (Eps) rules, may use isatool
14223fixsome to patch .thy and .ML sources automatically;
14224
14225  select_equality  -> some_equality
14226  select_eq_Ex     -> some_eq_ex
14227  selectI2EX       -> someI2_ex
14228  selectI2         -> someI2
14229  selectI          -> someI
14230  select1_equality -> some1_equality
14231  Eps_sym_eq       -> some_sym_eq_trivial
14232  Eps_eq           -> some_eq_trivial
14233
14234* HOL: exhaust_tac on datatypes superceded by new generic case_tac;
14235
14236* HOL: removed obsolete theorem binding expand_if (refer to split_if
14237instead);
14238
14239* HOL: the recursion equations generated by 'recdef' are now called
14240f.simps instead of f.rules;
14241
14242* HOL: qed_spec_mp now also handles bounded ALL as well;
14243
14244* HOL: 0 is now overloaded, so the type constraint ":: nat" may
14245sometimes be needed;
14246
14247* HOL: the constant for "f``x" is now "image" rather than "op ``";
14248
14249* HOL: the constant for "f-``x" is now "vimage" rather than "op -``";
14250
14251* HOL: the disjoint sum is now "<+>" instead of "Plus"; the cartesian
14252product is now "<*>" instead of "Times"; the lexicographic product is
14253now "<*lex*>" instead of "**";
14254
14255* HOL: theory Sexp is now in HOL/Induct examples (it used to be part
14256of main HOL, but was unused); better use HOL's datatype package;
14257
14258* HOL: removed "symbols" syntax for constant "override" of theory Map;
14259the old syntax may be recovered as follows:
14260
14261  syntax (symbols)
14262    override  :: "('a ~=> 'b) => ('a ~=> 'b) => ('a ~=> 'b)"
14263      (infixl "\\<oplus>" 100)
14264
14265* HOL/Real: "rabs" replaced by overloaded "abs" function;
14266
14267* HOL/ML: even fewer consts are declared as global (see theories Ord,
14268Lfp, Gfp, WF); this only affects ML packages that refer to const names
14269internally;
14270
14271* HOL and ZF: syntax for quotienting wrt an equivalence relation
14272changed from A/r to A//r;
14273
14274* ZF: new treatment of arithmetic (nat & int) may break some old
14275proofs;
14276
14277* Isar: renamed some attributes (RS -> THEN, simplify -> simplified,
14278rulify -> rule_format, elimify -> elim_format, ...);
14279
14280* Isar/Provers: intro/elim/dest attributes changed; renamed
14281intro/intro!/intro!! flags to intro!/intro/intro? (in most cases, one
14282should have to change intro!! to intro? only); replaced "delrule" by
14283"rule del";
14284
14285* Isar/HOL: renamed "intrs" to "intros" in inductive definitions;
14286
14287* Provers: strengthened force_tac by using new first_best_tac;
14288
14289* LaTeX document preparation: several changes of isabelle.sty (see
14290lib/texinputs);
14291
14292
14293*** Document preparation ***
14294
14295* formal comments (text blocks etc.) in new-style theories may now
14296contain antiquotations of thm/prop/term/typ/text to be presented
14297according to latex print mode; concrete syntax is like this:
14298@{term[show_types] "f(x) = a + x"};
14299
14300* isatool mkdir provides easy setup of Isabelle session directories,
14301including proper document sources;
14302
14303* generated LaTeX sources are now deleted after successful run
14304(isatool document -c); may retain a copy somewhere else via -D option
14305of isatool usedir;
14306
14307* isatool usedir -D now lets isatool latex -o sty update the Isabelle
14308style files, achieving self-contained LaTeX sources and simplifying
14309LaTeX debugging;
14310
14311* old-style theories now produce (crude) LaTeX output as well;
14312
14313* browser info session directories are now self-contained (may be put
14314on WWW server seperately); improved graphs of nested sessions; removed
14315graph for 'all sessions';
14316
14317* several improvements in isabelle style files; \isabellestyle{it}
14318produces fake math mode output; \isamarkupheader is now \section by
14319default; see lib/texinputs/isabelle.sty etc.;
14320
14321
14322*** Isar ***
14323
14324* Isar/Pure: local results and corresponding term bindings are now
14325subject to Hindley-Milner polymorphism (similar to ML); this
14326accommodates incremental type-inference very nicely;
14327
14328* Isar/Pure: new derived language element 'obtain' supports
14329generalized existence reasoning;
14330
14331* Isar/Pure: new calculational elements 'moreover' and 'ultimately'
14332support accumulation of results, without applying any rules yet;
14333useful to collect intermediate results without explicit name
14334references, and for use with transitivity rules with more than 2
14335premises;
14336
14337* Isar/Pure: scalable support for case-analysis type proofs: new
14338'case' language element refers to local contexts symbolically, as
14339produced by certain proof methods; internally, case names are attached
14340to theorems as "tags";
14341
14342* Isar/Pure: theory command 'hide' removes declarations from
14343class/type/const name spaces;
14344
14345* Isar/Pure: theory command 'defs' supports option "(overloaded)" to
14346indicate potential overloading;
14347
14348* Isar/Pure: changed syntax of local blocks from {{ }} to { };
14349
14350* Isar/Pure: syntax of sorts made 'inner', i.e. have to write
14351"{a,b,c}" instead of {a,b,c};
14352
14353* Isar/Pure now provides its own version of intro/elim/dest
14354attributes; useful for building new logics, but beware of confusion
14355with the version in Provers/classical;
14356
14357* Isar/Pure: the local context of (non-atomic) goals is provided via
14358case name 'antecedent';
14359
14360* Isar/Pure: removed obsolete 'transfer' attribute (transfer of thms
14361to the current context is now done automatically);
14362
14363* Isar/Pure: theory command 'method_setup' provides a simple interface
14364for definining proof methods in ML;
14365
14366* Isar/Provers: intro/elim/dest attributes changed; renamed
14367intro/intro!/intro!! flags to intro!/intro/intro? (INCOMPATIBILITY, in
14368most cases, one should have to change intro!! to intro? only);
14369replaced "delrule" by "rule del";
14370
14371* Isar/Provers: new 'hypsubst' method, plain 'subst' method and
14372'symmetric' attribute (the latter supercedes [RS sym]);
14373
14374* Isar/Provers: splitter support (via 'split' attribute and 'simp'
14375method modifier); 'simp' method: 'only:' modifier removes loopers as
14376well (including splits);
14377
14378* Isar/Provers: Simplifier and Classical methods now support all kind
14379of modifiers used in the past, including 'cong', 'iff', etc.
14380
14381* Isar/Provers: added 'fastsimp' and 'clarsimp' methods (combination
14382of Simplifier and Classical reasoner);
14383
14384* Isar/HOL: new proof method 'cases' and improved version of 'induct'
14385now support named cases; major packages (inductive, datatype, primrec,
14386recdef) support case names and properly name parameters;
14387
14388* Isar/HOL: new transitivity rules for substitution in inequalities --
14389monotonicity conditions are extracted to be proven at end of
14390calculations;
14391
14392* Isar/HOL: removed 'case_split' thm binding, should use 'cases' proof
14393method anyway;
14394
14395* Isar/HOL: removed old expand_if = split_if; theorems if_splits =
14396split_if split_if_asm; datatype package provides theorems foo.splits =
14397foo.split foo.split_asm for each datatype;
14398
14399* Isar/HOL: tuned inductive package, rename "intrs" to "intros"
14400(potential INCOMPATIBILITY), emulation of mk_cases feature for proof
14401scripts: new 'inductive_cases' command and 'ind_cases' method; (Note:
14402use "(cases (simplified))" method in proper proof texts);
14403
14404* Isar/HOL: added global 'arith_split' attribute for 'arith' method;
14405
14406* Isar: names of theorems etc. may be natural numbers as well;
14407
14408* Isar: 'pr' command: optional arguments for goals_limit and
14409ProofContext.prems_limit; no longer prints theory contexts, but only
14410proof states;
14411
14412* Isar: diagnostic commands 'pr', 'thm', 'prop', 'term', 'typ' admit
14413additional print modes to be specified; e.g. "pr(latex)" will print
14414proof state according to the Isabelle LaTeX style;
14415
14416* Isar: improved support for emulating tactic scripts, including proof
14417methods 'rule_tac' etc., 'cut_tac', 'thin_tac', 'subgoal_tac',
14418'rename_tac', 'rotate_tac', 'tactic', and 'case_tac' / 'induct_tac'
14419(for HOL datatypes);
14420
14421* Isar: simplified (more robust) goal selection of proof methods: 1st
14422goal, all goals, or explicit goal specifier (tactic emulation); thus
14423'proof method scripts' have to be in depth-first order;
14424
14425* Isar: tuned 'let' syntax: replaced 'as' keyword by 'and';
14426
14427* Isar: removed 'help' command, which hasn't been too helpful anyway;
14428should instead use individual commands for printing items
14429(print_commands, print_methods etc.);
14430
14431* Isar: added 'nothing' --- the empty list of theorems;
14432
14433
14434*** HOL ***
14435
14436* HOL/MicroJava: formalization of a fragment of Java, together with a
14437corresponding virtual machine and a specification of its bytecode
14438verifier and a lightweight bytecode verifier, including proofs of
14439type-safety; by Gerwin Klein, Tobias Nipkow, David von Oheimb, and
14440Cornelia Pusch (see also the homepage of project Bali at
14441http://isabelle.in.tum.de/Bali/);
14442
14443* HOL/Algebra: new theory of rings and univariate polynomials, by
14444Clemens Ballarin;
14445
14446* HOL/NumberTheory: fundamental Theorem of Arithmetic, Chinese
14447Remainder Theorem, Fermat/Euler Theorem, Wilson's Theorem, by Thomas M
14448Rasmussen;
14449
14450* HOL/Lattice: fundamental concepts of lattice theory and order
14451structures, including duals, properties of bounds versus algebraic
14452laws, lattice operations versus set-theoretic ones, the Knaster-Tarski
14453Theorem for complete lattices etc.; may also serve as a demonstration
14454for abstract algebraic reasoning using axiomatic type classes, and
14455mathematics-style proof in Isabelle/Isar; by Markus Wenzel;
14456
14457* HOL/Prolog: a (bare-bones) implementation of Lambda-Prolog, by David
14458von Oheimb;
14459
14460* HOL/IMPP: extension of IMP with local variables and mutually
14461recursive procedures, by David von Oheimb;
14462
14463* HOL/Lambda: converted into new-style theory and document;
14464
14465* HOL/ex/Multiquote: example of multiple nested quotations and
14466anti-quotations -- basically a generalized version of de-Bruijn
14467representation; very useful in avoiding lifting of operations;
14468
14469* HOL/record: added general record equality rule to simpset; fixed
14470select-update simplification procedure to handle extended records as
14471well; admit "r" as field name;
14472
14473* HOL: 0 is now overloaded over the new sort "zero", allowing its use with
14474other numeric types and also as the identity of groups, rings, etc.;
14475
14476* HOL: new axclass plus_ac0 for addition with the AC-laws and 0 as identity.
14477Types nat and int belong to this axclass;
14478
14479* HOL: greatly improved simplification involving numerals of type nat, int, real:
14480   (i + #8 + j) = Suc k simplifies to  #7 + (i + j) = k
14481   i*j + k + j*#3*i     simplifies to  #4*(i*j) + k
14482  two terms #m*u and #n*u are replaced by #(m+n)*u
14483    (where #m, #n and u can implicitly be 1; this is simproc combine_numerals)
14484  and the term/formula #m*u+x ~~ #n*u+y simplifies simplifies to #(m-n)+x ~~ y
14485    or x ~~ #(n-m)+y, where ~~ is one of = < <= or - (simproc cancel_numerals);
14486
14487* HOL: meson_tac is available (previously in ex/meson.ML); it is a
14488powerful prover for predicate logic but knows nothing of clasets; see
14489ex/mesontest.ML and ex/mesontest2.ML for example applications;
14490
14491* HOL: new version of "case_tac" subsumes both boolean case split and
14492"exhaust_tac" on datatypes; INCOMPATIBILITY: exhaust_tac no longer
14493exists, may define val exhaust_tac = case_tac for ad-hoc portability;
14494
14495* HOL: simplification no longer dives into case-expressions: only the
14496selector expression is simplified, but not the remaining arms; to
14497enable full simplification of case-expressions for datatype t, you may
14498remove t.weak_case_cong from the simpset, either globally (Delcongs
14499[thm"t.weak_case_cong"];) or locally (delcongs [...]).
14500
14501* HOL/recdef: the recursion equations generated by 'recdef' for
14502function 'f' are now called f.simps instead of f.rules; if all
14503termination conditions are proved automatically, these simplification
14504rules are added to the simpset, as in primrec; rules may be named
14505individually as well, resulting in a separate list of theorems for
14506each equation;
14507
14508* HOL/While is a new theory that provides a while-combinator. It
14509permits the definition of tail-recursive functions without the
14510provision of a termination measure. The latter is necessary once the
14511invariant proof rule for while is applied.
14512
14513* HOL: new (overloaded) notation for the set of elements below/above
14514some element: {..u}, {..u(}, {l..}, {)l..}. See theory SetInterval.
14515
14516* HOL: theorems impI, allI, ballI bound as "strip";
14517
14518* HOL: new tactic induct_thm_tac: thm -> string -> int -> tactic
14519induct_tac th "x1 ... xn" expects th to have a conclusion of the form
14520P v1 ... vn and abbreviates res_inst_tac [("v1","x1"),...,("vn","xn")] th;
14521
14522* HOL/Real: "rabs" replaced by overloaded "abs" function;
14523
14524* HOL: theory Sexp now in HOL/Induct examples (it used to be part of
14525main HOL, but was unused);
14526
14527* HOL: fewer consts declared as global (e.g. have to refer to
14528"Lfp.lfp" instead of "lfp" internally; affects ML packages only);
14529
14530* HOL: tuned AST representation of nested pairs, avoiding bogus output
14531in case of overlap with user translations (e.g. judgements over
14532tuples); (note that the underlying logical represenation is still
14533bogus);
14534
14535
14536*** ZF ***
14537
14538* ZF: simplification automatically cancels common terms in arithmetic
14539expressions over nat and int;
14540
14541* ZF: new treatment of nat to minimize type-checking: all operators
14542coerce their operands to a natural number using the function natify,
14543making the algebraic laws unconditional;
14544
14545* ZF: as above, for int: operators coerce their operands to an integer
14546using the function intify;
14547
14548* ZF: the integer library now contains many of the usual laws for the
14549orderings, including $<=, and monotonicity laws for $+ and $*;
14550
14551* ZF: new example ZF/ex/NatSum to demonstrate integer arithmetic
14552simplification;
14553
14554* FOL and ZF: AddIffs now available, giving theorems of the form P<->Q
14555to the simplifier and classical reasoner simultaneously;
14556
14557
14558*** General ***
14559
14560* Provers: blast_tac now handles actual object-logic rules as
14561assumptions; note that auto_tac uses blast_tac internally as well;
14562
14563* Provers: new functions rulify/rulify_no_asm: thm -> thm for turning
14564outer -->/All/Ball into ==>/!!; qed_spec_mp now uses rulify_no_asm;
14565
14566* Provers: delrules now handles destruct rules as well (no longer need
14567explicit make_elim);
14568
14569* Provers: Blast_tac now warns of and ignores "weak elimination rules" e.g.
14570  [| inj ?f;          ?f ?x = ?f ?y; ?x = ?y ==> ?W |] ==> ?W
14571use instead the strong form,
14572  [| inj ?f; ~ ?W ==> ?f ?x = ?f ?y; ?x = ?y ==> ?W |] ==> ?W
14573in HOL, FOL and ZF the function cla_make_elim will create such rules
14574from destruct-rules;
14575
14576* Provers: Simplifier.easy_setup provides a fast path to basic
14577Simplifier setup for new object-logics;
14578
14579* Pure: AST translation rules no longer require constant head on LHS;
14580
14581* Pure: improved name spaces: ambiguous output is qualified; support
14582for hiding of names;
14583
14584* system: smart setup of canonical ML_HOME, ISABELLE_INTERFACE, and
14585XSYMBOL_HOME; no longer need to do manual configuration in most
14586situations;
14587
14588* system: compression of ML heaps images may now be controlled via -c
14589option of isabelle and isatool usedir (currently only observed by
14590Poly/ML);
14591
14592* system: isatool installfonts may handle X-Symbol fonts as well (very
14593useful for remote X11);
14594
14595* system: provide TAGS file for Isabelle sources;
14596
14597* ML: infix 'OF' is a version of 'MRS' with more appropriate argument
14598order;
14599
14600* ML: renamed flags Syntax.trace_norm_ast to Syntax.trace_ast; global
14601timing flag supersedes proof_timing and Toplevel.trace;
14602
14603* ML: new combinators |>> and |>>> for incremental transformations
14604with secondary results (e.g. certain theory extensions):
14605
14606* ML: PureThy.add_defs gets additional argument to indicate potential
14607overloading (usually false);
14608
14609* ML: PureThy.add_thms/add_axioms/add_defs now return theorems as
14610results;
14611
14612
14613
14614New in Isabelle99 (October 1999)
14615--------------------------------
14616
14617*** Overview of INCOMPATIBILITIES (see below for more details) ***
14618
14619* HOL: The THEN and ELSE parts of conditional expressions (if P then x else y)
14620are no longer simplified.  (This allows the simplifier to unfold recursive
14621functional programs.)  To restore the old behaviour, declare
14622
14623    Delcongs [if_weak_cong];
14624
14625* HOL: Removed the obsolete syntax "Compl A"; use -A for set
14626complement;
14627
14628* HOL: the predicate "inj" is now defined by translation to "inj_on";
14629
14630* HOL/datatype: mutual_induct_tac no longer exists --
14631  use induct_tac "x_1 ... x_n" instead of mutual_induct_tac ["x_1", ..., "x_n"]
14632
14633* HOL/typedef: fixed type inference for representing set; type
14634arguments now have to occur explicitly on the rhs as type constraints;
14635
14636* ZF: The con_defs part of an inductive definition may no longer refer
14637to constants declared in the same theory;
14638
14639* HOL, ZF: the function mk_cases, generated by the inductive
14640definition package, has lost an argument.  To simplify its result, it
14641uses the default simpset instead of a supplied list of theorems.
14642
14643* HOL/List: the constructors of type list are now Nil and Cons;
14644
14645* Simplifier: the type of the infix ML functions
14646        setSSolver addSSolver setSolver addSolver
14647is now  simpset * solver -> simpset  where `solver' is a new abstract type
14648for packaging solvers. A solver is created via
14649        mk_solver: string -> (thm list -> int -> tactic) -> solver
14650where the string argument is only a comment.
14651
14652
14653*** Proof tools ***
14654
14655* Provers/Arith/fast_lin_arith.ML contains a functor for creating a
14656decision procedure for linear arithmetic. Currently it is used for
14657types `nat', `int', and `real' in HOL (see below); it can, should and
14658will be instantiated for other types and logics as well.
14659
14660* The simplifier now accepts rewrite rules with flexible heads, eg
14661     hom ?f ==> ?f(?x+?y) = ?f ?x + ?f ?y
14662  They are applied like any rule with a non-pattern lhs, i.e. by first-order
14663  matching.
14664
14665
14666*** General ***
14667
14668* New Isabelle/Isar subsystem provides an alternative to traditional
14669tactical theorem proving; together with the ProofGeneral/isar user
14670interface it offers an interactive environment for developing human
14671readable proof documents (Isar == Intelligible semi-automated
14672reasoning); for further information see isatool doc isar-ref,
14673src/HOL/Isar_examples and http://isabelle.in.tum.de/Isar/
14674
14675* improved and simplified presentation of theories: better HTML markup
14676(including colors), graph views in several sizes; isatool usedir now
14677provides a proper interface for user theories (via -P option); actual
14678document preparation based on (PDF)LaTeX is available as well (for
14679new-style theories only); see isatool doc system for more information;
14680
14681* native support for Proof General, both for classic Isabelle and
14682Isabelle/Isar;
14683
14684* ML function thm_deps visualizes dependencies of theorems and lemmas,
14685using the graph browser tool;
14686
14687* Isabelle manuals now also available as PDF;
14688
14689* theory loader rewritten from scratch (may not be fully
14690bug-compatible); old loadpath variable has been replaced by show_path,
14691add_path, del_path, reset_path functions; new operations such as
14692update_thy, touch_thy, remove_thy, use/update_thy_only (see also
14693isatool doc ref);
14694
14695* improved isatool install: option -k creates KDE application icon,
14696option -p DIR installs standalone binaries;
14697
14698* added ML_PLATFORM setting (useful for cross-platform installations);
14699more robust handling of platform specific ML images for SML/NJ;
14700
14701* the settings environment is now statically scoped, i.e. it is never
14702created again in sub-processes invoked from isabelle, isatool, or
14703Isabelle;
14704
14705* path element specification '~~' refers to '$ISABELLE_HOME';
14706
14707* in locales, the "assumes" and "defines" parts may be omitted if
14708empty;
14709
14710* new print_mode "xsymbols" for extended symbol support (e.g. genuine
14711long arrows);
14712
14713* new print_mode "HTML";
14714
14715* new flag show_tags controls display of tags of theorems (which are
14716basically just comments that may be attached by some tools);
14717
14718* Isamode 2.6 requires patch to accomodate change of Isabelle font
14719mode and goal output format:
14720
14721diff -r Isamode-2.6/elisp/isa-load.el Isamode/elisp/isa-load.el
14722244c244
14723<       (list (isa-getenv "ISABELLE") "-msymbols" logic-name)
14724---
14725>       (list (isa-getenv "ISABELLE") "-misabelle_font" "-msymbols" logic-name)
14726diff -r Isabelle-2.6/elisp/isa-proofstate.el Isamode/elisp/isa-proofstate.el
14727181c181
14728< (defconst proofstate-proofstart-regexp "^Level [0-9]+$"
14729---
14730> (defconst proofstate-proofstart-regexp "^Level [0-9]+"
14731
14732* function bind_thms stores lists of theorems (cf. bind_thm);
14733
14734* new shorthand tactics ftac, eatac, datac, fatac;
14735
14736* qed (and friends) now accept "" as result name; in that case the
14737theorem is not stored, but proper checks and presentation of the
14738result still apply;
14739
14740* theorem database now also indexes constants "Trueprop", "all",
14741"==>", "=="; thus thms_containing, findI etc. may retrieve more rules;
14742
14743
14744*** HOL ***
14745
14746** HOL arithmetic **
14747
14748* There are now decision procedures for linear arithmetic over nat and
14749int:
14750
147511. arith_tac copes with arbitrary formulae involving `=', `<', `<=',
14752`+', `-', `Suc', `min', `max' and numerical constants; other subterms
14753are treated as atomic; subformulae not involving type `nat' or `int'
14754are ignored; quantified subformulae are ignored unless they are
14755positive universal or negative existential. The tactic has to be
14756invoked by hand and can be a little bit slow. In particular, the
14757running time is exponential in the number of occurrences of `min' and
14758`max', and `-' on `nat'.
14759
147602. fast_arith_tac is a cut-down version of arith_tac: it only takes
14761(negated) (in)equalities among the premises and the conclusion into
14762account (i.e. no compound formulae) and does not know about `min' and
14763`max', and `-' on `nat'. It is fast and is used automatically by the
14764simplifier.
14765
14766NB: At the moment, these decision procedures do not cope with mixed
14767nat/int formulae where the two parts interact, such as `m < n ==>
14768int(m) < int(n)'.
14769
14770* HOL/Numeral provides a generic theory of numerals (encoded
14771efficiently as bit strings); setup for types nat/int/real is in place;
14772INCOMPATIBILITY: since numeral syntax is now polymorphic, rather than
14773int, existing theories and proof scripts may require a few additional
14774type constraints;
14775
14776* integer division and remainder can now be performed on constant
14777arguments;
14778
14779* many properties of integer multiplication, division and remainder
14780are now available;
14781
14782* An interface to the Stanford Validity Checker (SVC) is available through the
14783tactic svc_tac.  Propositional tautologies and theorems of linear arithmetic
14784are proved automatically.  SVC must be installed separately, and its results
14785must be TAKEN ON TRUST (Isabelle does not check the proofs, but tags any
14786invocation of the underlying oracle).  For SVC see
14787  http://verify.stanford.edu/SVC
14788
14789* IsaMakefile: the HOL-Real target now builds an actual image;
14790
14791
14792** HOL misc **
14793
14794* HOL/Real/HahnBanach: the Hahn-Banach theorem for real vector spaces
14795(in Isabelle/Isar) -- by Gertrud Bauer;
14796
14797* HOL/BCV: generic model of bytecode verification, i.e. data-flow
14798analysis for assembly languages with subtypes;
14799
14800* HOL/TLA (Lamport's Temporal Logic of Actions): major reorganization
14801-- avoids syntactic ambiguities and treats state, transition, and
14802temporal levels more uniformly; introduces INCOMPATIBILITIES due to
14803changed syntax and (many) tactics;
14804
14805* HOL/inductive: Now also handles more general introduction rules such
14806  as "ALL y. (y, x) : r --> y : acc r ==> x : acc r"; monotonicity
14807  theorems are now maintained within the theory (maintained via the
14808  "mono" attribute);
14809
14810* HOL/datatype: Now also handles arbitrarily branching datatypes
14811  (using function types) such as
14812
14813  datatype 'a tree = Atom 'a | Branch "nat => 'a tree"
14814
14815* HOL/record: record_simproc (part of the default simpset) takes care
14816of selectors applied to updated records; record_split_tac is no longer
14817part of the default claset; update_defs may now be removed from the
14818simpset in many cases; COMPATIBILITY: old behavior achieved by
14819
14820  claset_ref () := claset() addSWrapper record_split_wrapper;
14821  Delsimprocs [record_simproc]
14822
14823* HOL/typedef: fixed type inference for representing set; type
14824arguments now have to occur explicitly on the rhs as type constraints;
14825
14826* HOL/recdef (TFL): 'congs' syntax now expects comma separated list of theorem
14827names rather than an ML expression;
14828
14829* HOL/defer_recdef (TFL): like recdef but the well-founded relation can be
14830supplied later.  Program schemes can be defined, such as
14831    "While B C s = (if B s then While B C (C s) else s)"
14832where the well-founded relation can be chosen after B and C have been given.
14833
14834* HOL/List: the constructors of type list are now Nil and Cons;
14835INCOMPATIBILITY: while [] and infix # syntax is still there, of
14836course, ML tools referring to List.list.op # etc. have to be adapted;
14837
14838* HOL_quantifiers flag superseded by "HOL" print mode, which is
14839disabled by default; run isabelle with option -m HOL to get back to
14840the original Gordon/HOL-style output;
14841
14842* HOL/Ord.thy: new bounded quantifier syntax (input only): ALL x<y. P,
14843ALL x<=y. P, EX x<y. P, EX x<=y. P;
14844
14845* HOL basic syntax simplified (more orthogonal): all variants of
14846All/Ex now support plain / symbolic / HOL notation; plain syntax for
14847Eps operator is provided as well: "SOME x. P[x]";
14848
14849* HOL/Sum.thy: sum_case has been moved to HOL/Datatype;
14850
14851* HOL/Univ.thy: infix syntax <*>, <+>, <**>, <+> eliminated and made
14852thus available for user theories;
14853
14854* HOLCF/IOA/Sequents: renamed 'Cons' to 'Consq' to avoid clash with
14855HOL/List; hardly an INCOMPATIBILITY since '>>' syntax is used all the
14856time;
14857
14858* HOL: new tactic smp_tac: int -> int -> tactic, which applies spec
14859several times and then mp;
14860
14861
14862*** LK ***
14863
14864* the notation <<...>> is now available as a notation for sequences of
14865formulas;
14866
14867* the simplifier is now installed
14868
14869* the axiom system has been generalized (thanks to Soren Heilmann)
14870
14871* the classical reasoner now has a default rule database
14872
14873
14874*** ZF ***
14875
14876* new primrec section allows primitive recursive functions to be given
14877directly (as in HOL) over datatypes and the natural numbers;
14878
14879* new tactics induct_tac and exhaust_tac for induction (or case
14880analysis) over datatypes and the natural numbers;
14881
14882* the datatype declaration of type T now defines the recursor T_rec;
14883
14884* simplification automatically does freeness reasoning for datatype
14885constructors;
14886
14887* automatic type-inference, with AddTCs command to insert new
14888type-checking rules;
14889
14890* datatype introduction rules are now added as Safe Introduction rules
14891to the claset;
14892
14893* the syntax "if P then x else y" is now available in addition to
14894if(P,x,y);
14895
14896
14897*** Internal programming interfaces ***
14898
14899* tuned simplifier trace output; new flag debug_simp;
14900
14901* structures Vartab / Termtab (instances of TableFun) offer efficient
14902tables indexed by indexname_ord / term_ord (compatible with aconv);
14903
14904* AxClass.axclass_tac lost the theory argument;
14905
14906* tuned current_goals_markers semantics: begin / end goal avoids
14907printing empty lines;
14908
14909* removed prs and prs_fn hook, which was broken because it did not
14910include \n in its semantics, forcing writeln to add one
14911uncoditionally; replaced prs_fn by writeln_fn; consider std_output:
14912string -> unit if you really want to output text without newline;
14913
14914* Symbol.output subject to print mode; INCOMPATIBILITY: defaults to
14915plain output, interface builders may have to enable 'isabelle_font'
14916mode to get Isabelle font glyphs as before;
14917
14918* refined token_translation interface; INCOMPATIBILITY: output length
14919now of type real instead of int;
14920
14921* theory loader actions may be traced via new ThyInfo.add_hook
14922interface (see src/Pure/Thy/thy_info.ML); example application: keep
14923your own database of information attached to *whole* theories -- as
14924opposed to intra-theory data slots offered via TheoryDataFun;
14925
14926* proper handling of dangling sort hypotheses (at last!);
14927Thm.strip_shyps and Drule.strip_shyps_warning take care of removing
14928extra sort hypotheses that can be witnessed from the type signature;
14929the force_strip_shyps flag is gone, any remaining shyps are simply
14930left in the theorem (with a warning issued by strip_shyps_warning);
14931
14932
14933
14934New in Isabelle98-1 (October 1998)
14935----------------------------------
14936
14937*** Overview of INCOMPATIBILITIES (see below for more details) ***
14938
14939* several changes of automated proof tools;
14940
14941* HOL: major changes to the inductive and datatype packages, including
14942some minor incompatibilities of theory syntax;
14943
14944* HOL: renamed r^-1 to 'converse' from 'inverse'; 'inj_onto' is now
14945called `inj_on';
14946
14947* HOL: removed duplicate thms in Arith:
14948  less_imp_add_less  should be replaced by  trans_less_add1
14949  le_imp_add_le      should be replaced by  trans_le_add1
14950
14951* HOL: unary minus is now overloaded (new type constraints may be
14952required);
14953
14954* HOL and ZF: unary minus for integers is now #- instead of #~.  In
14955ZF, expressions such as n#-1 must be changed to n#- 1, since #-1 is
14956now taken as an integer constant.
14957
14958* Pure: ML function 'theory_of' renamed to 'theory';
14959
14960
14961*** Proof tools ***
14962
14963* Simplifier:
14964  1. Asm_full_simp_tac is now more aggressive.
14965     1. It will sometimes reorient premises if that increases their power to
14966        simplify.
14967     2. It does no longer proceed strictly from left to right but may also
14968        rotate premises to achieve further simplification.
14969     For compatibility reasons there is now Asm_lr_simp_tac which is like the
14970     old Asm_full_simp_tac in that it does not rotate premises.
14971  2. The simplifier now knows a little bit about nat-arithmetic.
14972
14973* Classical reasoner: wrapper mechanism for the classical reasoner now
14974allows for selected deletion of wrappers, by introduction of names for
14975wrapper functionals.  This implies that addbefore, addSbefore,
14976addaltern, and addSaltern now take a pair (name, tactic) as argument,
14977and that adding two tactics with the same name overwrites the first
14978one (emitting a warning).
14979  type wrapper = (int -> tactic) -> (int -> tactic)
14980  setWrapper, setSWrapper, compWrapper and compSWrapper are replaced by
14981  addWrapper, addSWrapper: claset * (string * wrapper) -> claset
14982  delWrapper, delSWrapper: claset *  string            -> claset
14983  getWrapper is renamed to appWrappers, getSWrapper to appSWrappers;
14984
14985* Classical reasoner: addbefore/addSbefore now have APPEND/ORELSE
14986semantics; addbefore now affects only the unsafe part of step_tac
14987etc.; this affects addss/auto_tac/force_tac, so EXISTING PROOFS MAY
14988FAIL, but proofs should be fixable easily, e.g. by replacing Auto_tac
14989by Force_tac;
14990
14991* Classical reasoner: setwrapper to setWrapper and compwrapper to
14992compWrapper; added safe wrapper (and access functions for it);
14993
14994* HOL/split_all_tac is now much faster and fails if there is nothing
14995to split.  Some EXISTING PROOFS MAY REQUIRE ADAPTION because the order
14996and the names of the automatically generated variables have changed.
14997split_all_tac has moved within claset() from unsafe wrappers to safe
14998wrappers, which means that !!-bound variables are split much more
14999aggressively, and safe_tac and clarify_tac now split such variables.
15000If this splitting is not appropriate, use delSWrapper "split_all_tac".
15001Note: the same holds for record_split_tac, which does the job of
15002split_all_tac for record fields.
15003
15004* HOL/Simplifier: Rewrite rules for case distinctions can now be added
15005permanently to the default simpset using Addsplits just like
15006Addsimps. They can be removed via Delsplits just like
15007Delsimps. Lower-case versions are also available.
15008
15009* HOL/Simplifier: The rule split_if is now part of the default
15010simpset. This means that the simplifier will eliminate all occurrences
15011of if-then-else in the conclusion of a goal. To prevent this, you can
15012either remove split_if completely from the default simpset by
15013`Delsplits [split_if]' or remove it in a specific call of the
15014simplifier using `... delsplits [split_if]'.  You can also add/delete
15015other case splitting rules to/from the default simpset: every datatype
15016generates suitable rules `split_t_case' and `split_t_case_asm' (where
15017t is the name of the datatype).
15018
15019* Classical reasoner / Simplifier combination: new force_tac (and
15020derivatives Force_tac, force) combines rewriting and classical
15021reasoning (and whatever other tools) similarly to auto_tac, but is
15022aimed to solve the given subgoal completely.
15023
15024
15025*** General ***
15026
15027* new top-level commands `Goal' and `Goalw' that improve upon `goal'
15028and `goalw': the theory is no longer needed as an explicit argument -
15029the current theory context is used; assumptions are no longer returned
15030at the ML-level unless one of them starts with ==> or !!; it is
15031recommended to convert to these new commands using isatool fixgoal
15032(backup your sources first!);
15033
15034* new top-level commands 'thm' and 'thms' for retrieving theorems from
15035the current theory context, and 'theory' to lookup stored theories;
15036
15037* new theory section 'locale' for declaring constants, assumptions and
15038definitions that have local scope;
15039
15040* new theory section 'nonterminals' for purely syntactic types;
15041
15042* new theory section 'setup' for generic ML setup functions
15043(e.g. package initialization);
15044
15045* the distribution now includes Isabelle icons: see
15046lib/logo/isabelle-{small,tiny}.xpm;
15047
15048* isatool install - install binaries with absolute references to
15049ISABELLE_HOME/bin;
15050
15051* isatool logo -- create instances of the Isabelle logo (as EPS);
15052
15053* print mode 'emacs' reserved for Isamode;
15054
15055* support multiple print (ast) translations per constant name;
15056
15057* theorems involving oracles are now printed with a suffixed [!];
15058
15059
15060*** HOL ***
15061
15062* there is now a tutorial on Isabelle/HOL (do 'isatool doc tutorial');
15063
15064* HOL/inductive package reorganized and improved: now supports mutual
15065definitions such as
15066
15067  inductive EVEN ODD
15068    intrs
15069      null "0 : EVEN"
15070      oddI "n : EVEN ==> Suc n : ODD"
15071      evenI "n : ODD ==> Suc n : EVEN"
15072
15073new theorem list "elims" contains an elimination rule for each of the
15074recursive sets; inductive definitions now handle disjunctive premises
15075correctly (also ZF);
15076
15077INCOMPATIBILITIES: requires Inductive as an ancestor; component
15078"mutual_induct" no longer exists - the induction rule is always
15079contained in "induct";
15080
15081
15082* HOL/datatype package re-implemented and greatly improved: now
15083supports mutually recursive datatypes such as
15084
15085  datatype
15086    'a aexp = IF_THEN_ELSE ('a bexp) ('a aexp) ('a aexp)
15087            | SUM ('a aexp) ('a aexp)
15088            | DIFF ('a aexp) ('a aexp)
15089            | NUM 'a
15090  and
15091    'a bexp = LESS ('a aexp) ('a aexp)
15092            | AND ('a bexp) ('a bexp)
15093            | OR ('a bexp) ('a bexp)
15094
15095as well as indirectly recursive datatypes such as
15096
15097  datatype
15098    ('a, 'b) term = Var 'a
15099                  | App 'b ((('a, 'b) term) list)
15100
15101The new tactic  mutual_induct_tac [<var_1>, ..., <var_n>] i  performs
15102induction on mutually / indirectly recursive datatypes.
15103
15104Primrec equations are now stored in theory and can be accessed via
15105<function_name>.simps.
15106
15107INCOMPATIBILITIES:
15108
15109  - Theories using datatypes must now have theory Datatype as an
15110    ancestor.
15111  - The specific <typename>.induct_tac no longer exists - use the
15112    generic induct_tac instead.
15113  - natE has been renamed to nat.exhaust - use exhaust_tac
15114    instead of res_inst_tac ... natE. Note that the variable
15115    names in nat.exhaust differ from the names in natE, this
15116    may cause some "fragile" proofs to fail.
15117  - The theorems split_<typename>_case and split_<typename>_case_asm
15118    have been renamed to <typename>.split and <typename>.split_asm.
15119  - Since default sorts of type variables are now handled correctly,
15120    some datatype definitions may have to be annotated with explicit
15121    sort constraints.
15122  - Primrec definitions no longer require function name and type
15123    of recursive argument.
15124
15125Consider using isatool fixdatatype to adapt your theories and proof
15126scripts to the new package (backup your sources first!).
15127
15128
15129* HOL/record package: considerably improved implementation; now
15130includes concrete syntax for record types, terms, updates; theorems
15131for surjective pairing and splitting !!-bound record variables; proof
15132support is as follows:
15133
15134  1) standard conversions (selectors or updates applied to record
15135constructor terms) are part of the standard simpset;
15136
15137  2) inject equations of the form ((x, y) = (x', y')) == x=x' & y=y' are
15138made part of standard simpset and claset via addIffs;
15139
15140  3) a tactic for record field splitting (record_split_tac) is part of
15141the standard claset (addSWrapper);
15142
15143To get a better idea about these rules you may retrieve them via
15144something like 'thms "foo.simps"' or 'thms "foo.iffs"', where "foo" is
15145the name of your record type.
15146
15147The split tactic 3) conceptually simplifies by the following rule:
15148
15149  "(!!x. PROP ?P x) == (!!a b. PROP ?P (a, b))"
15150
15151Thus any record variable that is bound by meta-all will automatically
15152blow up into some record constructor term, consequently the
15153simplifications of 1), 2) apply.  Thus force_tac, auto_tac etc. shall
15154solve record problems automatically.
15155
15156
15157* reorganized the main HOL image: HOL/Integ and String loaded by
15158default; theory Main includes everything;
15159
15160* automatic simplification of integer sums and comparisons, using cancellation;
15161
15162* added option_map_eq_Some and not_Some_eq to the default simpset and claset;
15163
15164* added disj_not1 = "(~P | Q) = (P --> Q)" to the default simpset;
15165
15166* many new identities for unions, intersections, set difference, etc.;
15167
15168* expand_if, expand_split, expand_sum_case and expand_nat_case are now
15169called split_if, split_split, split_sum_case and split_nat_case (to go
15170with add/delsplits);
15171
15172* HOL/Prod introduces simplification procedure unit_eq_proc rewriting
15173(?x::unit) = (); this is made part of the default simpset, which COULD
15174MAKE EXISTING PROOFS FAIL under rare circumstances (consider
15175'Delsimprocs [unit_eq_proc];' as last resort); also note that
15176unit_abs_eta_conv is added in order to counter the effect of
15177unit_eq_proc on (%u::unit. f u), replacing it by f rather than by
15178%u.f();
15179
15180* HOL/Fun INCOMPATIBILITY: `inj_onto' is now called `inj_on' (which
15181makes more sense);
15182
15183* HOL/Set INCOMPATIBILITY: rule `equals0D' is now a well-formed destruct rule;
15184  It and 'sym RS equals0D' are now in the default  claset, giving automatic
15185  disjointness reasoning but breaking a few old proofs.
15186
15187* HOL/Relation INCOMPATIBILITY: renamed the relational operator r^-1
15188to 'converse' from 'inverse' (for compatibility with ZF and some
15189literature);
15190
15191* HOL/recdef can now declare non-recursive functions, with {} supplied as
15192the well-founded relation;
15193
15194* HOL/Set INCOMPATIBILITY: the complement of set A is now written -A instead of
15195    Compl A.  The "Compl" syntax remains available as input syntax for this
15196    release ONLY.
15197
15198* HOL/Update: new theory of function updates:
15199    f(a:=b) == %x. if x=a then b else f x
15200may also be iterated as in f(a:=b,c:=d,...);
15201
15202* HOL/Vimage: new theory for inverse image of a function, syntax f-``B;
15203
15204* HOL/List:
15205  - new function list_update written xs[i:=v] that updates the i-th
15206    list position. May also be iterated as in xs[i:=a,j:=b,...].
15207  - new function `upt' written [i..j(] which generates the list
15208    [i,i+1,...,j-1], i.e. the upper bound is excluded. To include the upper
15209    bound write [i..j], which is a shorthand for [i..j+1(].
15210  - new lexicographic orderings and corresponding wellfoundedness theorems.
15211
15212* HOL/Arith:
15213  - removed 'pred' (predecessor) function;
15214  - generalized some theorems about n-1;
15215  - many new laws about "div" and "mod";
15216  - new laws about greatest common divisors (see theory ex/Primes);
15217
15218* HOL/Relation: renamed the relational operator r^-1 "converse"
15219instead of "inverse";
15220
15221* HOL/Induct/Multiset: a theory of multisets, including the wellfoundedness
15222  of the multiset ordering;
15223
15224* directory HOL/Real: a construction of the reals using Dedekind cuts
15225  (not included by default);
15226
15227* directory HOL/UNITY: Chandy and Misra's UNITY formalism;
15228
15229* directory HOL/Hoare: a new version of Hoare logic which permits many-sorted
15230  programs, i.e. different program variables may have different types.
15231
15232* calling (stac rew i) now fails if "rew" has no effect on the goal
15233  [previously, this check worked only if the rewrite rule was unconditional]
15234  Now rew can involve either definitions or equalities (either == or =).
15235
15236
15237*** ZF ***
15238
15239* theory Main includes everything; INCOMPATIBILITY: theory ZF.thy contains
15240  only the theorems proved on ZF.ML;
15241
15242* ZF INCOMPATIBILITY: rule `equals0D' is now a well-formed destruct rule;
15243  It and 'sym RS equals0D' are now in the default  claset, giving automatic
15244  disjointness reasoning but breaking a few old proofs.
15245
15246* ZF/Update: new theory of function updates
15247    with default rewrite rule  f(x:=y) ` z = if(z=x, y, f`z)
15248  may also be iterated as in f(a:=b,c:=d,...);
15249
15250* in  let x=t in u(x), neither t nor u(x) has to be an FOL term.
15251
15252* calling (stac rew i) now fails if "rew" has no effect on the goal
15253  [previously, this check worked only if the rewrite rule was unconditional]
15254  Now rew can involve either definitions or equalities (either == or =).
15255
15256* case_tac provided for compatibility with HOL
15257    (like the old excluded_middle_tac, but with subgoals swapped)
15258
15259
15260*** Internal programming interfaces ***
15261
15262* Pure: several new basic modules made available for general use, see
15263also src/Pure/README;
15264
15265* improved the theory data mechanism to support encapsulation (data
15266kind name replaced by private Object.kind, acting as authorization
15267key); new type-safe user interface via functor TheoryDataFun; generic
15268print_data function becomes basically useless;
15269
15270* removed global_names compatibility flag -- all theory declarations
15271are qualified by default;
15272
15273* module Pure/Syntax now offers quote / antiquote translation
15274functions (useful for Hoare logic etc. with implicit dependencies);
15275see HOL/ex/Antiquote for an example use;
15276
15277* Simplifier now offers conversions (asm_)(full_)rewrite: simpset ->
15278cterm -> thm;
15279
15280* new tactical CHANGED_GOAL for checking that a tactic modifies a
15281subgoal;
15282
15283* Display.print_goals function moved to Locale.print_goals;
15284
15285* standard print function for goals supports current_goals_markers
15286variable for marking begin of proof, end of proof, start of goal; the
15287default is ("", "", ""); setting current_goals_markers := ("<proof>",
15288"</proof>", "<goal>") causes SGML like tagged proof state printing,
15289for example;
15290
15291
15292
15293New in Isabelle98 (January 1998)
15294--------------------------------
15295
15296*** Overview of INCOMPATIBILITIES (see below for more details) ***
15297
15298* changed lexical syntax of terms / types: dots made part of long
15299identifiers, e.g. "%x.x" no longer possible, should be "%x. x";
15300
15301* simpset (and claset) reference variable replaced by functions
15302simpset / simpset_ref;
15303
15304* no longer supports theory aliases (via merge) and non-trivial
15305implicit merge of thms' signatures;
15306
15307* most internal names of constants changed due to qualified names;
15308
15309* changed Pure/Sequence interface (see Pure/seq.ML);
15310
15311
15312*** General Changes ***
15313
15314* hierachically structured name spaces (for consts, types, axms, thms
15315etc.); new lexical class 'longid' (e.g. Foo.bar.x) may render much of
15316old input syntactically incorrect (e.g. "%x.x"); COMPATIBILITY:
15317isatool fixdots ensures space after dots (e.g. "%x. x"); set
15318long_names for fully qualified output names; NOTE: ML programs
15319(special tactics, packages etc.) referring to internal names may have
15320to be adapted to cope with fully qualified names; in case of severe
15321backward campatibility problems try setting 'global_names' at compile
15322time to have enrything declared within a flat name space; one may also
15323fine tune name declarations in theories via the 'global' and 'local'
15324section;
15325
15326* reimplemented the implicit simpset and claset using the new anytype
15327data filed in signatures; references simpset:simpset ref etc. are
15328replaced by functions simpset:unit->simpset and
15329simpset_ref:unit->simpset ref; COMPATIBILITY: use isatool fixclasimp
15330to patch your ML files accordingly;
15331
15332* HTML output now includes theory graph data for display with Java
15333applet or isatool browser; data generated automatically via isatool
15334usedir (see -i option, ISABELLE_USEDIR_OPTIONS);
15335
15336* defs may now be conditional; improved rewrite_goals_tac to handle
15337conditional equations;
15338
15339* defs now admits additional type arguments, using TYPE('a) syntax;
15340
15341* theory aliases via merge (e.g. M=A+B+C) no longer supported, always
15342creates a new theory node; implicit merge of thms' signatures is
15343restricted to 'trivial' ones; COMPATIBILITY: one may have to use
15344transfer:theory->thm->thm in (rare) cases;
15345
15346* improved handling of draft signatures / theories; draft thms (and
15347ctyps, cterms) are automatically promoted to real ones;
15348
15349* slightly changed interfaces for oracles: admit many per theory, named
15350(e.g. oracle foo = mlfun), additional name argument for invoke_oracle;
15351
15352* print_goals: optional output of const types (set show_consts and
15353show_types);
15354
15355* improved output of warnings (###) and errors (***);
15356
15357* subgoal_tac displays a warning if the new subgoal has type variables;
15358
15359* removed old README and Makefiles;
15360
15361* replaced print_goals_ref hook by print_current_goals_fn and result_error_fn;
15362
15363* removed obsolete init_pps and init_database;
15364
15365* deleted the obsolete tactical STATE, which was declared by
15366    fun STATE tacfun st = tacfun st st;
15367
15368* cd and use now support path variables, e.g. $ISABELLE_HOME, or ~
15369(which abbreviates $HOME);
15370
15371* changed Pure/Sequence interface (see Pure/seq.ML); COMPATIBILITY:
15372use isatool fixseq to adapt your ML programs (this works for fully
15373qualified references to the Sequence structure only!);
15374
15375* use_thy no longer requires writable current directory; it always
15376reloads .ML *and* .thy file, if either one is out of date;
15377
15378
15379*** Classical Reasoner ***
15380
15381* Clarify_tac, clarify_tac, clarify_step_tac, Clarify_step_tac: new
15382tactics that use classical reasoning to simplify a subgoal without
15383splitting it into several subgoals;
15384
15385* Safe_tac: like safe_tac but uses the default claset;
15386
15387
15388*** Simplifier ***
15389
15390* added simplification meta rules:
15391    (asm_)(full_)simplify: simpset -> thm -> thm;
15392
15393* simplifier.ML no longer part of Pure -- has to be loaded by object
15394logics (again);
15395
15396* added prems argument to simplification procedures;
15397
15398* HOL, FOL, ZF: added infix function `addsplits':
15399  instead of `<simpset> setloop (split_tac <thms>)'
15400  you can simply write `<simpset> addsplits <thms>'
15401
15402
15403*** Syntax ***
15404
15405* TYPE('a) syntax for type reflection terms;
15406
15407* no longer handles consts with name "" -- declare as 'syntax' instead;
15408
15409* pretty printer: changed order of mixfix annotation preference (again!);
15410
15411* Pure: fixed idt/idts vs. pttrn/pttrns syntactic categories;
15412
15413
15414*** HOL ***
15415
15416* HOL: there is a new splitter `split_asm_tac' that can be used e.g.
15417  with `addloop' of the simplifier to faciliate case splitting in premises.
15418
15419* HOL/TLA: Stephan Merz's formalization of Lamport's Temporal Logic of Actions;
15420
15421* HOL/Auth: new protocol proofs including some for the Internet
15422  protocol TLS;
15423
15424* HOL/Map: new theory of `maps' a la VDM;
15425
15426* HOL/simplifier: simplification procedures nat_cancel_sums for
15427cancelling out common nat summands from =, <, <= (in)equalities, or
15428differences; simplification procedures nat_cancel_factor for
15429cancelling common factor from =, <, <= (in)equalities over natural
15430sums; nat_cancel contains both kinds of procedures, it is installed by
15431default in Arith.thy -- this COULD MAKE EXISTING PROOFS FAIL;
15432
15433* HOL/simplifier: terms of the form
15434  `? x. P1(x) & ... & Pn(x) & x=t & Q1(x) & ... Qn(x)'  (or t=x)
15435  are rewritten to
15436  `P1(t) & ... & Pn(t) & Q1(t) & ... Qn(t)',
15437  and those of the form
15438  `! x. P1(x) & ... & Pn(x) & x=t & Q1(x) & ... Qn(x) --> R(x)'  (or t=x)
15439  are rewritten to
15440  `P1(t) & ... & Pn(t) & Q1(t) & ... Qn(t) --> R(t)',
15441
15442* HOL/datatype
15443  Each datatype `t' now comes with a theorem `split_t_case' of the form
15444
15445  P(t_case f1 ... fn x) =
15446     ( (!y1 ... ym1. x = C1 y1 ... ym1 --> P(f1 y1 ... ym1)) &
15447        ...
15448       (!y1 ... ymn. x = Cn y1 ... ymn --> P(f1 y1 ... ymn))
15449     )
15450
15451  and a theorem `split_t_case_asm' of the form
15452
15453  P(t_case f1 ... fn x) =
15454    ~( (? y1 ... ym1. x = C1 y1 ... ym1 & ~P(f1 y1 ... ym1)) |
15455        ...
15456       (? y1 ... ymn. x = Cn y1 ... ymn & ~P(f1 y1 ... ymn))
15457     )
15458  which can be added to a simpset via `addsplits'. The existing theorems
15459  expand_list_case and expand_option_case have been renamed to
15460  split_list_case and split_option_case.
15461
15462* HOL/Arithmetic:
15463  - `pred n' is automatically converted to `n-1'.
15464    Users are strongly encouraged not to use `pred' any longer,
15465    because it will disappear altogether at some point.
15466  - Users are strongly encouraged to write "0 < n" rather than
15467    "n ~= 0". Theorems and proof tools have been modified towards this
15468    `standard'.
15469
15470* HOL/Lists:
15471  the function "set_of_list" has been renamed "set" (and its theorems too);
15472  the function "nth" now takes its arguments in the reverse order and
15473  has acquired the infix notation "!" as in "xs!n".
15474
15475* HOL/Set: UNIV is now a constant and is no longer translated to Compl{};
15476
15477* HOL/Set: The operator (UN x.B x) now abbreviates (UN x:UNIV. B x) and its
15478  specialist theorems (like UN1_I) are gone.  Similarly for (INT x.B x);
15479
15480* HOL/record: extensible records with schematic structural subtyping
15481(single inheritance); EXPERIMENTAL version demonstrating the encoding,
15482still lacks various theorems and concrete record syntax;
15483
15484
15485*** HOLCF ***
15486
15487* removed "axioms" and "generated by" sections;
15488
15489* replaced "ops" section by extended "consts" section, which is capable of
15490  handling the continuous function space "->" directly;
15491
15492* domain package:
15493  . proves theorems immediately and stores them in the theory,
15494  . creates hierachical name space,
15495  . now uses normal mixfix annotations (instead of cinfix...),
15496  . minor changes to some names and values (for consistency),
15497  . e.g. cases -> casedist, dists_eq -> dist_eqs, [take_lemma] -> take_lemmas,
15498  . separator between mutual domain defs: changed "," to "and",
15499  . improved handling of sort constraints;  now they have to
15500    appear on the left-hand side of the equations only;
15501
15502* fixed LAM <x,y,zs>.b syntax;
15503
15504* added extended adm_tac to simplifier in HOLCF -- can now discharge
15505adm (%x. P (t x)), where P is chainfinite and t continuous;
15506
15507
15508*** FOL and ZF ***
15509
15510* FOL: there is a new splitter `split_asm_tac' that can be used e.g.
15511  with `addloop' of the simplifier to faciliate case splitting in premises.
15512
15513* qed_spec_mp, qed_goal_spec_mp, qed_goalw_spec_mp are available, as
15514in HOL, they strip ALL and --> from proved theorems;
15515
15516
15517
15518New in Isabelle94-8 (May 1997)
15519------------------------------
15520
15521*** General Changes ***
15522
15523* new utilities to build / run / maintain Isabelle etc. (in parts
15524still somewhat experimental); old Makefiles etc. still functional;
15525
15526* new 'Isabelle System Manual';
15527
15528* INSTALL text, together with ./configure and ./build scripts;
15529
15530* reimplemented type inference for greater efficiency, better error
15531messages and clean internal interface;
15532
15533* prlim command for dealing with lots of subgoals (an easier way of
15534setting goals_limit);
15535
15536
15537*** Syntax ***
15538
15539* supports alternative (named) syntax tables (parser and pretty
15540printer); internal interface is provided by add_modesyntax(_i);
15541
15542* Pure, FOL, ZF, HOL, HOLCF now support symbolic input and output; to
15543be used in conjunction with the Isabelle symbol font; uses the
15544"symbols" syntax table;
15545
15546* added token_translation interface (may translate name tokens in
15547arbitrary ways, dependent on their type (free, bound, tfree, ...) and
15548the current print_mode); IMPORTANT: user print translation functions
15549are responsible for marking newly introduced bounds
15550(Syntax.mark_boundT);
15551
15552* token translations for modes "xterm" and "xterm_color" that display
15553names in bold, underline etc. or colors (which requires a color
15554version of xterm);
15555
15556* infixes may now be declared with names independent of their syntax;
15557
15558* added typed_print_translation (like print_translation, but may
15559access type of constant);
15560
15561
15562*** Classical Reasoner ***
15563
15564Blast_tac: a new tactic!  It is often more powerful than fast_tac, but has
15565some limitations.  Blast_tac...
15566  + ignores addss, addbefore, addafter; this restriction is intrinsic
15567  + ignores elimination rules that don't have the correct format
15568        (the conclusion MUST be a formula variable)
15569  + ignores types, which can make HOL proofs fail
15570  + rules must not require higher-order unification, e.g. apply_type in ZF
15571    [message "Function Var's argument not a bound variable" relates to this]
15572  + its proof strategy is more general but can actually be slower
15573
15574* substitution with equality assumptions no longer permutes other
15575assumptions;
15576
15577* minor changes in semantics of addafter (now called addaltern); renamed
15578setwrapper to setWrapper and compwrapper to compWrapper; added safe wrapper
15579(and access functions for it);
15580
15581* improved combination of classical reasoner and simplifier:
15582  + functions for handling clasimpsets
15583  + improvement of addss: now the simplifier is called _after_ the
15584    safe steps.
15585  + safe variant of addss called addSss: uses safe simplifications
15586    _during_ the safe steps. It is more complete as it allows multiple
15587    instantiations of unknowns (e.g. with slow_tac).
15588
15589*** Simplifier ***
15590
15591* added interface for simplification procedures (functions that
15592produce *proven* rewrite rules on the fly, depending on current
15593redex);
15594
15595* ordering on terms as parameter (used for ordered rewriting);
15596
15597* new functions delcongs, deleqcongs, and Delcongs. richer rep_ss;
15598
15599* the solver is now split into a safe and an unsafe part.
15600This should be invisible for the normal user, except that the
15601functions setsolver and addsolver have been renamed to setSolver and
15602addSolver; added safe_asm_full_simp_tac;
15603
15604
15605*** HOL ***
15606
15607* a generic induction tactic `induct_tac' which works for all datatypes and
15608also for type `nat';
15609
15610* a generic case distinction tactic `exhaust_tac' which works for all
15611datatypes and also for type `nat';
15612
15613* each datatype comes with a function `size';
15614
15615* patterns in case expressions allow tuple patterns as arguments to
15616constructors, for example `case x of [] => ... | (x,y,z)#ps => ...';
15617
15618* primrec now also works with type nat;
15619
15620* recdef: a new declaration form, allows general recursive functions to be
15621defined in theory files.  See HOL/ex/Fib, HOL/ex/Primes, HOL/Subst/Unify.
15622
15623* the constant for negation has been renamed from "not" to "Not" to
15624harmonize with FOL, ZF, LK, etc.;
15625
15626* HOL/ex/LFilter theory of a corecursive "filter" functional for
15627infinite lists;
15628
15629* HOL/Modelcheck demonstrates invocation of model checker oracle;
15630
15631* HOL/ex/Ring.thy declares cring_simp, which solves equational
15632problems in commutative rings, using axiomatic type classes for + and *;
15633
15634* more examples in HOL/MiniML and HOL/Auth;
15635
15636* more default rewrite rules for quantifiers, union/intersection;
15637
15638* a new constant `arbitrary == @x.False';
15639
15640* HOLCF/IOA replaces old HOL/IOA;
15641
15642* HOLCF changes: derived all rules and arities
15643  + axiomatic type classes instead of classes
15644  + typedef instead of faking type definitions
15645  + eliminated the internal constants less_fun, less_cfun, UU_fun, UU_cfun etc.
15646  + new axclasses cpo, chfin, flat with flat < chfin < pcpo < cpo < po
15647  + eliminated the types void, one, tr
15648  + use unit lift and bool lift (with translations) instead of one and tr
15649  + eliminated blift from Lift3.thy (use Def instead of blift)
15650  all eliminated rules are derived as theorems --> no visible changes ;
15651
15652
15653*** ZF ***
15654
15655* ZF now has Fast_tac, Simp_tac and Auto_tac.  Union_iff is a now a default
15656rewrite rule; this may affect some proofs.  eq_cs is gone but can be put back
15657as ZF_cs addSIs [equalityI];
15658
15659
15660
15661New in Isabelle94-7 (November 96)
15662---------------------------------
15663
15664* allowing negative levels (as offsets) in prlev and choplev;
15665
15666* super-linear speedup for large simplifications;
15667
15668* FOL, ZF and HOL now use miniscoping: rewriting pushes
15669quantifications in as far as possible (COULD MAKE EXISTING PROOFS
15670FAIL); can suppress it using the command Delsimps (ex_simps @
15671all_simps); De Morgan laws are also now included, by default;
15672
15673* improved printing of ==>  :  ~:
15674
15675* new object-logic "Sequents" adds linear logic, while replacing LK
15676and Modal (thanks to Sara Kalvala);
15677
15678* HOL/Auth: correctness proofs for authentication protocols;
15679
15680* HOL: new auto_tac combines rewriting and classical reasoning (many
15681examples on HOL/Auth);
15682
15683* HOL: new command AddIffs for declaring theorems of the form P=Q to
15684the rewriter and classical reasoner simultaneously;
15685
15686* function uresult no longer returns theorems in "standard" format;
15687regain previous version by: val uresult = standard o uresult;
15688
15689
15690
15691New in Isabelle94-6
15692-------------------
15693
15694* oracles -- these establish an interface between Isabelle and trusted
15695external reasoners, which may deliver results as theorems;
15696
15697* proof objects (in particular record all uses of oracles);
15698
15699* Simp_tac, Fast_tac, etc. that refer to implicit simpset / claset;
15700
15701* "constdefs" section in theory files;
15702
15703* "primrec" section (HOL) no longer requires names;
15704
15705* internal type "tactic" now simply "thm -> thm Sequence.seq";
15706
15707
15708
15709New in Isabelle94-5
15710-------------------
15711
15712* reduced space requirements;
15713
15714* automatic HTML generation from theories;
15715
15716* theory files no longer require "..." (quotes) around most types;
15717
15718* new examples, including two proofs of the Church-Rosser theorem;
15719
15720* non-curried (1994) version of HOL is no longer distributed;
15721
15722
15723
15724New in Isabelle94-4
15725-------------------
15726
15727* greatly reduced space requirements;
15728
15729* theory files (.thy) no longer require \...\ escapes at line breaks;
15730
15731* searchable theorem database (see the section "Retrieving theorems" on
15732page 8 of the Reference Manual);
15733
15734* new examples, including Grabczewski's monumental case study of the
15735Axiom of Choice;
15736
15737* The previous version of HOL renamed to Old_HOL;
15738
15739* The new version of HOL (previously called CHOL) uses a curried syntax
15740for functions.  Application looks like f a b instead of f(a,b);
15741
15742* Mutually recursive inductive definitions finally work in HOL;
15743
15744* In ZF, pattern-matching on tuples is now available in all abstractions and
15745translates to the operator "split";
15746
15747
15748
15749New in Isabelle94-3
15750-------------------
15751
15752* new infix operator, addss, allowing the classical reasoner to
15753perform simplification at each step of its search.  Example:
15754        fast_tac (cs addss ss)
15755
15756* a new logic, CHOL, the same as HOL, but with a curried syntax
15757for functions.  Application looks like f a b instead of f(a,b).  Also pairs
15758look like (a,b) instead of <a,b>;
15759
15760* PLEASE NOTE: CHOL will eventually replace HOL!
15761
15762* In CHOL, pattern-matching on tuples is now available in all abstractions.
15763It translates to the operator "split".  A new theory of integers is available;
15764
15765* In ZF, integer numerals now denote two's-complement binary integers.
15766Arithmetic operations can be performed by rewriting.  See ZF/ex/Bin.ML;
15767
15768* Many new examples: I/O automata, Church-Rosser theorem, equivalents
15769of the Axiom of Choice;
15770
15771
15772
15773New in Isabelle94-2
15774-------------------
15775
15776* Significantly faster resolution;
15777
15778* the different sections in a .thy file can now be mixed and repeated
15779freely;
15780
15781* Database of theorems for FOL, HOL and ZF.  New
15782commands including qed, qed_goal and bind_thm store theorems in the database.
15783
15784* Simple database queries: return a named theorem (get_thm) or all theorems of
15785a given theory (thms_of), or find out what theory a theorem was proved in
15786(theory_of_thm);
15787
15788* Bugs fixed in the inductive definition and datatype packages;
15789
15790* The classical reasoner provides deepen_tac and depth_tac, making FOL_dup_cs
15791and HOL_dup_cs obsolete;
15792
15793* Syntactic ambiguities caused by the new treatment of syntax in Isabelle94-1
15794have been removed;
15795
15796* Simpler definition of function space in ZF;
15797
15798* new results about cardinal and ordinal arithmetic in ZF;
15799
15800* 'subtype' facility in HOL for introducing new types as subsets of existing
15801types;
15802
15803:mode=isabelle-news:wrap=hard:maxLineLen=72:
15804