1 Isabelle NEWS -- history of user-relevant changes
2 =================================================
4 (Note: Isabelle/jEdit shows a tree-view of the NEWS file in Sidekick.)
7 New in Isabelle2021 (February 2021)
8 -----------------------------------
12 * On macOS, the IsabelleXYZ.app directory layout now follows the other
13 platforms, without indirection via Contents/Resources/. INCOMPATIBILITY,
14 use e.g. IsabelleXYZ.app/bin/isabelle instead of former
15 IsabelleXYZ.app/Isabelle/bin/isabelle or
16 IsabelleXYZ.app/Isabelle/Contents/Resources/IsabelleXYZ/bin/isabelle.
18 * HTML presentation uses rich markup produced by Isabelle/PIDE,
19 resulting in more colors and links.
21 * HTML presentation includes auxiliary files (e.g. ML) for each theory.
23 * Proof method "subst" is confined to the original subgoal range: its
24 included distinct_subgoals_tac no longer affects unrelated subgoals.
27 * Theory_Data extend operation is obsolete and needs to be the identity
28 function; merge should be conservative and not reset to the empty value.
29 Subtle INCOMPATIBILITY and change of semantics (due to
30 Theory.join_theory from Isabelle2020). Special extend/merge behaviour at
31 the begin of a new theory can be achieved via Theory.at_begin.
34 *** Isabelle/jEdit Prover IDE ***
36 * Improved GUI look-and-feel: the portable and scalable "FlatLaf Light"
37 is used by default on all platforms (appearance similar to IntelliJ
40 * Improved markup for theory header imports: hyperlinks for theory files
41 work without formal checking of content.
43 * The prover process can download auxiliary files (e.g. 'ML_file') for
44 theories with remote URL. This requires the external "curl" program.
46 * Action "isabelle.goto-entity" (shortcut CS+d) jumps to the definition
47 of the formal entity at the caret position.
49 * The visual feedback on caret entity focus is normally restricted to
50 definitions within the visible text area. The keyboard modifier "CS"
51 overrides this: then all defining and referencing positions are shown.
52 See also option "jedit_focus_modifier".
54 * The jEdit status line includes widgets both for JVM and ML heap usage.
55 Ongoing ML ongoing garbage collection is shown as "ML cleanup".
57 * The Monitor dockable provides buttons to request a full garbage
58 collection and sharing of live data on the ML heap. It also includes
59 information about the Java Runtime system.
61 * PIDE support for session ROOTS: markup for directories.
63 * Update to jedit-5.6.0, the latest release. This version works properly
64 on macOS by default, without the special MacOSX plugin.
66 * Action "full-screen-mode" (shortcut F11 or S+F11) has been modified
67 for better approximate window size on macOS and Linux/X11.
69 * Improved GUI support for macOS 11.1 Big Sur: native fullscreen mode,
70 but non-native look-and-feel (FlatLaf).
72 * Hyperlinks to various file-formats (.pdf, .png, etc.) open an external
73 viewer, instead of re-using the jEdit text editor.
75 * IDE support for Naproche-SAD: Proof Checking of Natural Mathematical
76 Documents. See also $NAPROCHE_HOME/examples for files with .ftl or
77 .ftl.tex extension. The corresponding Naproche-SAD server process can be
78 disabled by setting the system option naproche_server=false and
79 restarting the Isabelle application.
82 *** Document preparation ***
84 * Keyword 'document_theories' within ROOT specifies theories from other
85 sessions that should be included in the generated document source
86 directory. This does not affect the generated session.tex: \input{...}
87 needs to be used separately.
89 * The standard LaTeX engine is now lualatex, according to settings
90 variable ISABELLE_PDFLATEX. This is mostly upwards compatible with old
91 pdflatex, but text encoding needs to conform strictly to utf8. Rare
94 * Discontinued obsolete DVI format and ISABELLE_LATEX settings variable:
95 document output is always PDF.
97 * Antiquotation @{tool} refers to Isabelle command-line tools, with
98 completion and formal reference to the source (external script or
99 internal Scala function).
101 * Antiquotation @{bash_function} refers to GNU bash functions that are
102 checked within the Isabelle settings environment.
104 * Antiquotations @{scala}, @{scala_object}, @{scala_type},
105 @{scala_method} refer to checked Isabelle/Scala entities.
110 * Session Pure-Examples contains notable examples for Isabelle/Pure
111 (former entries of HOL-Isar_Examples).
113 * Named contexts (locale and class specifications, locale and class
114 context blocks) allow bundle mixins for the surface context. This allows
115 syntax notations to be organized within bundles conveniently. See theory
116 "HOL-ex.Specifications_with_bundle_mixins" for examples and the isar-ref
117 manual for syntax descriptions.
119 * Definitions in locales produce rule which can be added as congruence
120 rule to protect foundational terms during simplification.
122 * Consolidated terminology and function signatures for nested targets:
124 - Local_Theory.begin_nested replaces Local_Theory.open_target
126 - Local_Theory.end_nested replaces Local_Theory.close_target
128 - Combination of Local_Theory.begin_nested and
129 Local_Theory.end_nested(_result) replaces
130 Local_Theory.subtarget(_result)
134 * Local_Theory.init replaces Generic_Target.init. Minor INCOMPATIBILITY.
139 * Session HOL-Examples contains notable examples for Isabelle/HOL
140 (former entries of HOL-Isar_Examples, HOL-ex etc.).
142 * An updated version of the veriT solver is now included as Isabelle
143 component. It can be used in the "smt" proof method via "smt (verit)" or
144 via "declare [[smt_solver = verit]]" in the context; see also session
145 HOL-Word-SMT_Examples.
147 * Zipperposition 2.0 is now included as Isabelle component for
148 experimentation, e.g. in "sledgehammer [prover = zipperposition]".
151 - support veriT in proof preplay
152 - take adventage of more cores in proof preplay
154 * Updated the Metis prover underlying the "metis" proof method to
155 version 2.4 (release 20180810). The new version fixes one soundness
156 defect and two incompleteness defects. Very slight INCOMPATIBILITY.
158 * Nitpick/Kodkod may be invoked directly within the running
159 Isabelle/Scala session (instead of an external Java process): this
160 improves reactivity and saves resources. This experimental feature is
161 guarded by system option "kodkod_scala" (default: true in PIDE
162 interaction, false in batch builds).
164 * Simproc "defined_all" and rewrite rule "subst_all" perform more
165 aggressive substitution with variables from assumptions.
166 INCOMPATIBILITY, consider repairing proofs locally like this:
168 supply subst_all [simp del] [[simproc del: defined_all]]
170 * Simproc "datatype_no_proper_subterm" rewrites equalities "lhs = rhs"
171 on datatypes to "False" if either side is a proper subexpression of the
172 other (for any datatype with a reasonable size function).
174 * Syntax for state monad combinators fcomp and scomp is organized in
175 bundle state_combinator_syntax. Minor INCOMPATIBILITY.
177 * Syntax for reflected term syntax is organized in bundle term_syntax,
178 discontinuing previous locale term_syntax. Minor INCOMPATIBILITY.
180 * New constant "power_int" for exponentiation with integer exponent,
181 written as "x powi n".
183 * Added the "at most 1" quantifier, Uniq.
185 * For the natural numbers, "Sup {} = 0".
187 * New constant semiring_char gives the characteristic of any type of
188 class semiring_1, with the convenient notation CHAR('a). For example,
189 CHAR(nat) = CHAR(int) = CHAR(real) = 0, CHAR(17) = 17.
191 * HOL-Computational_Algebra.Polynomial: Definition and basic properties
192 of algebraic integers.
194 * Library theory "Bit_Operations" with generic bit operations.
196 * Library theory "Signed_Division" provides operations for signed
197 division, instantiated for type int.
199 * Theory "Multiset": removed misleading notation \<Union># for sum_mset;
200 replaced with \<Sum>\<^sub>#. Analogous notation for prod_mset also exists now.
202 * New theory "HOL-Library.Word" takes over material from former session
203 "HOL-Word". INCOMPATIBILITY: need to adjust imports.
205 * Theory "HOL-Library.Word": Type word is restricted to bit strings
206 consisting of at least one bit. INCOMPATIBILITY.
208 * Theory "HOL-Library.Word": Bit operations NOT, AND, OR, XOR are based
209 on generic algebraic bit operations from theory
210 "HOL-Library.Bit_Operations". INCOMPATIBILITY.
212 * Theory "HOL-Library.Word": Most operations on type word are set up for
213 transfer and lifting. INCOMPATIBILITY.
215 * Theory "HOL-Library.Word": Generic type conversions. INCOMPATIBILITY,
216 sometimes additional rewrite rules must be added to applications to get
217 a confluent system again.
219 * Theory "HOL-Library.Word": Uniform polymorphic "mask" operation for
220 both types int and word. INCOMPATIBILITY.
222 * Theory "HOL-Library.Word": Syntax for signed compare operators has
223 been consolidated with syntax of regular compare operators. Minor
226 * Former session "HOL-Word": Various operations dealing with bit values
227 represented as reversed lists of bools are separated into theory
228 Reversed_Bit_Lists in session Word_Lib in the AFP. INCOMPATIBILITY.
230 * Former session "HOL-Word": Theory "Word_Bitwise" has been moved to AFP
231 entry Word_Lib as theory "Bitwise". INCOMPATIBILITY.
233 * Former session "HOL-Word": Compound operation "bin_split" simplifies
234 by default into its components "drop_bit" and "take_bit".
237 * Former session "HOL-Word": Operations lsb, msb and set_bit are
238 separated into theories Least_significant_bit, Most_significant_bit and
239 Generic_set_bit respectively in session Word_Lib in the AFP.
242 * Former session "HOL-Word": Ancient int numeral representation has been
243 factored out in separate theory "Ancient_Numeral" in session Word_Lib in
244 the AFP. INCOMPATIBILITY.
246 * Former session "HOL-Word": Operations "bin_last", "bin_rest",
247 "bin_nth", "bintrunc", "sbintrunc", "norm_sint", "bin_cat" and
248 "max_word" are now mere input abbreviations. Minor INCOMPATIBILITY.
250 * Former session "HOL-Word": Misc ancient material has been factored out
251 into separate theories and moved to session Word_Lib in the AFP. See
252 theory "Guide" there for further information. INCOMPATIBILITY.
254 * Session HOL-TPTP: The "tptp_isabelle" and "tptp_sledgehammer" commands
255 are in working order again, as opposed to outputting "GaveUp" on nearly
258 * Session "HOL-Hoare": concrete syntax only for Hoare triples, not
259 abstract language constructors.
261 * Session "HOL-Hoare": now provides a total correctness logic as well.
266 * Added the "at most 1" quantifier, Uniq, as in HOL.
268 * Simproc "defined_all" and rewrite rule "subst_all" have been changed
274 * Antiquotations @{scala_function}, @{scala}, @{scala_thread} refer to
275 registered Isabelle/Scala functions (of type String => String):
276 invocation works via the PIDE protocol.
278 * Path.append is available as overloaded "+" operator, similar to
279 corresponding Isabelle/Scala operation.
281 * ML statistics via an external Poly/ML process: this allows monitoring
282 the runtime system while the ML program sleeps.
287 * Isabelle server allows user-defined commands via
288 isabelle_scala_service.
290 * Update/rebuild external provers on currently supported OS platforms,
291 notably CVC4 1.8, E prover 2.5, SPASS 3.8ds, CSDP 6.1.1.
293 * The command-line tool "isabelle log" prints prover messages from the
294 build database of the given session, following the the order of theory
295 sources, instead of erratic parallel evaluation. Consequently, the
296 session log file is restricted to system messages of the overall build
297 process, and thus becomes more informative.
299 * Discontinued obsolete isabelle display tool, and DVI_VIEWER settings
302 * The command-line tool "isabelle logo" only outputs PDF; obsolete EPS
303 (for DVI documents) has been discontinued. Former option -n has been
304 turned into -o with explicit file name. Minor INCOMPATIBILITY.
306 * The command-line tool "isabelle components" supports new options -u
307 and -x to manage $ISABELLE_HOME_USER/etc/components without manual
308 editing of Isabelle configuration files.
310 * The shell function "isabelle_directory" (within etc/settings of
311 components) augments the list of special directories for persistent
312 symbolic path names. This improves portability of heap images and
313 session databases. It used to be hard-wired for Isabelle + AFP, but
314 other projects may now participate on equal terms.
316 * The command-line tool "isabelle process" now prints output to
317 stdout/stderr separately and incrementally, instead of just one bulk to
318 stdout after termination. Potential INCOMPATIBILITY for external tools.
320 * The command-line tool "isabelle console" now supports interrupts
321 properly (on Linux and macOS).
323 * Batch-builds via "isabelle build" use a PIDE session with special
324 protocol: this allows to invoke Isabelle/Scala operations from
325 Isabelle/ML. Big build jobs (e.g. AFP) require extra heap space for the
326 java process, e.g. like this in $ISABELLE_HOME_USER/etc/settings:
328 ISABELLE_TOOL_JAVA_OPTIONS="$ISABELLE_TOOL_JAVA_OPTIONS -Xmx8g"
330 This includes full PIDE markup, if option "build_pide_reports" is
333 * The command-line tool "isabelle build" provides option -P DIR to
334 produce PDF/HTML presentation in the specified directory; -P: refers to
335 the standard directory according to ISABELLE_BROWSER_INFO /
336 ISABELLE_BROWSER_INFO_SYSTEM settings. Generated PDF documents are taken
337 from the build database -- from this or earlier builds with option
340 * The command-line tool "isabelle document" generates theory documents
341 on the spot, using the underlying session build database (exported
342 LaTeX sources or existing PDF files). INCOMPATIBILITY, the former
343 "isabelle document" tool was rather different and has been discontinued.
345 * The command-line tool "isabelle sessions" explores the structure of
346 Isabelle sessions and prints result names in topological order (on
349 * The Isabelle/Scala "Progress" interface changed slightly and
350 "No_Progress" has been discontinued. INCOMPATIBILITY, use "new Progress"
353 * General support for Isabelle/Scala system services, configured via the
354 shell function "isabelle_scala_service" in etc/settings (e.g. of an
355 Isabelle component); see implementations of class
356 Isabelle_System.Service in Isabelle/Scala. This supersedes former
357 "isabelle_scala_tools" and "isabelle_file_format": minor
360 * The syntax of theory load commands (for auxiliary files) is now
361 specified in Isabelle/Scala, as instance of class
362 isabelle.Command_Span.Load_Command registered via isabelle_scala_service
363 in etc/settings. This allows more flexible schemes than just a list of
364 file extensions. Minor INCOMPATIBILITY, e.g. see theory
365 HOL-SPARK.SPARK_Setup to emulate the old behaviour.
367 * JVM system property "isabelle.laf" has been discontinued; the default
368 Swing look-and-feel is ""FlatLaf Light".
370 * Isabelle/Phabricator supports Ubuntu 20.04 LTS.
372 * Isabelle/Phabricator setup has been updated to follow ongoing
373 development: libphutil has been discontinued. Minor INCOMPATIBILITY:
374 existing server installations should remove libphutil from
375 /usr/local/bin/isabelle-phabricator-upgrade and each installation root
376 directory (e.g. /var/www/phabricator-vcs/libphutil).
378 * Experimental support for arm64-linux platform. The reference platform
379 is Raspberry Pi 4 with 8 GB RAM running Pi OS (64 bit).
381 * Support for Apple Silicon, using mostly x86_64-darwin runtime
382 translation via Rosetta 2 (e.g. Poly/ML and external provers), but also
383 some native arm64-darwin executables (e.g. Java).
387 New in Isabelle2020 (April 2020)
388 --------------------------------
392 * Session ROOT files need to specify explicit 'directories' for import
393 of theory files. Directories cannot be shared by different sessions.
394 (Recall that import of theories from other sessions works via
395 session-qualified theory names, together with suitable 'sessions'
396 declarations in the ROOT.)
398 * Internal derivations record dependencies on oracles and other theorems
399 accurately, including the implicit type-class reasoning wrt. proven
400 class relations and type arities. In particular, the formal tagging with
401 "Pure.skip_proofs" of results stemming from "instance ... sorry" is now
402 propagated properly to theorems depending on such type instances.
404 * Command 'sorry' (oracle "Pure.skip_proofs") is more precise about the
405 actual proposition that is assumed in the goal and proof context. This
406 requires at least Proofterm.proofs = 1 to show up in theorem
409 * Command 'thm_oracles' prints all oracles used in given theorems,
410 covering the full graph of transitive dependencies.
412 * Command 'thm_deps' prints immediate theorem dependencies of the given
413 facts. The former graph visualization has been discontinued, because it
416 * Refined treatment of proof terms, including type-class proofs for
417 minor object-logics (FOL, FOLP, Sequents).
419 * The inference kernel is now confined to one main module: structure
420 Thm, without the former circular dependency on structure Axclass.
422 * Mixfix annotations may use "' " (single quote followed by space) to
423 separate delimiters (as documented in the isar-ref manual), without
424 requiring an auxiliary empty block. A literal single quote needs to be
425 escaped properly. Minor INCOMPATIBILITY.
430 * The proof method combinator (subproofs m) applies the method
431 expression m consecutively to each subgoal, constructing individual
432 subproofs internally. This impacts the internal construction of proof
433 terms: it makes a cascade of let-expressions within the derivation tree
434 and may thus improve scalability.
436 * Attribute "trace_locales" activates tracing of locale instances during
437 roundup. It replaces the diagnostic command 'print_dependencies', which
438 has been discontinued.
441 *** Isabelle/jEdit Prover IDE ***
443 * Prover IDE startup is now much faster, because theory dependencies are
444 no longer explored in advance. The overall session structure with its
445 declarations of 'directories' is sufficient to locate theory files. Thus
446 the "session focus" of option "isabelle jedit -S" has become obsolete
447 (likewise for "isabelle vscode_server -S"). Existing option "-R" is both
448 sufficient and more convenient to start editing a particular session.
450 * Actions isabelle.tooltip (CS+b) and isabelle.message (CS+m) display
451 tooltip message popups, corresponding to mouse hovering with/without the
452 CONTROL/COMMAND key pressed.
454 * The following actions allow to navigate errors within the current
457 isabelle.first-error (CS+a)
458 isabelle.last-error (CS+z)
459 isabelle.next-error (CS+n)
460 isabelle.prev-error (CS+p)
462 * Support more brackets: \<llangle> \<rrangle> (intended for implicit argument syntax).
464 * Action isabelle.jconsole (menu item Plugins / Isabelle / Java/VM
465 Monitor) applies the jconsole tool on the running Isabelle/jEdit
466 process. This allows to monitor resource usage etc.
468 * More adequate default font sizes for Linux on HD / UHD displays:
469 automatic font scaling is usually absent on Linux, in contrast to
472 * The default value for the jEdit property "view.antiAlias" (menu item
473 Utilities / Global Options / Text Area / Anti Aliased smooth text) is
474 now "subpixel HRGB", instead of former "standard". Especially on Linux
475 this often leads to faster text rendering, but can also cause problems
476 with odd color shades. An alternative is to switch back to "standard"
477 here, and set the following Java system property:
479 isabelle jedit -Dsun.java2d.opengl=true
481 This can be made persistent via JEDIT_JAVA_OPTIONS in
482 $ISABELLE_HOME_USER/etc/settings. For the "Isabelle2020" desktop
483 application there is a corresponding options file in the same directory.
486 *** Isabelle/VSCode Prover IDE ***
488 * Update of State and Preview panels to use new WebviewPanel API of
494 * Improvements of the 'lift_bnf' command:
495 - Add support for quotient types.
496 - Generate transfer rules for the lifted map/set/rel/pred constants
497 (theorems "<type>.<constant>_transfer_raw").
499 * Term_XML.Encode/Decode.term uses compact representation of Const
500 "typargs" from the given declaration environment. This also makes more
501 sense for translations to lambda-calculi with explicit polymorphism.
502 INCOMPATIBILITY, use Term_XML.Encode/Decode.term_raw in special
505 * ASCII membership syntax concerning big operators for infimum and
506 supremum has been discontinued. INCOMPATIBILITY.
508 * Removed multiplicativity assumption from class
509 "normalization_semidom". Introduced various new intermediate classes
510 with the multiplicativity assumption; many theorem statements
511 (especially involving GCD/LCM) had to be adapted. This allows for a more
512 natural instantiation of the algebraic typeclasses for e.g. Gaussian
513 integers. INCOMPATIBILITY.
515 * Clear distinction between types for bits (False / True) and Z2 (0 /
516 1): theory HOL-Library.Bit has been renamed accordingly.
519 * Dynamic facts "algebra_split_simps" and "field_split_simps" correspond
520 to algebra_simps and field_simps but contain more aggressive rules
521 potentially splitting goals; algebra_split_simps roughly replaces
522 sign_simps and field_split_simps can be used instead of divide_simps.
525 * Theory HOL.Complete_Lattices:
526 renamed Inf_Sup -> Inf_eq_Sup and Sup_Inf -> Sup_eq_Inf
528 * Theory HOL-Library.Monad_Syntax: infix operation "bind" (\<bind>)
529 associates to the left now as is customary.
531 * Theory HOL-Library.Ramsey: full finite Ramsey's theorem with
532 multiple colours and arbitrary exponents.
534 * Session HOL-Proofs: build faster thanks to better treatment of proof
535 terms in Isabelle/Pure.
537 * Session HOL-Word: bitwise NOT-operator has proper prefix syntax. Minor
540 * Session HOL-Analysis: proof method "metric" implements a decision
541 procedure for simple linear statements in metric spaces.
543 * Session HOL-Complex_Analysis has been split off from HOL-Analysis.
548 * Theory construction may be forked internally, the operation
549 Theory.join_theory recovers a single result theory. See also the example
550 in theory "HOL-ex.Join_Theory".
552 * Antiquotation @{oracle_name} inlines a formally checked oracle name.
554 * Minimal support for a soft-type system within the Isabelle logical
555 framework (module Soft_Type_System).
557 * Former Variable.auto_fixes has been replaced by slightly more general
558 Proof_Context.augment: it is subject to an optional soft-type system of
559 the underlying object-logic. Minor INCOMPATIBILITY.
561 * More scalable Export.export using XML.tree to avoid premature string
562 allocations, with convenient shortcut XML.blob. Minor INCOMPATIBILITY.
564 * Prover IDE support for the underlying Poly/ML compiler (not the basis
565 library). Open $ML_SOURCES/ROOT.ML in Isabelle/jEdit to browse the
566 implementation with full markup.
571 * Standard rendering for more Isabelle symbols: \<llangle> \<rrangle> \<bbar> \<sqdot>
573 * The command-line tool "isabelle scala_project" creates a Gradle
574 project configuration for Isabelle/Scala/jEdit, to support Scala IDEs
575 such as IntelliJ IDEA.
577 * The command-line tool "isabelle phabricator_setup" facilitates
578 self-hosting of the Phabricator software-development platform, with
579 support for Git, Mercurial, Subversion repositories. This helps to avoid
580 monoculture and to escape the gravity of centralized version control by
581 Github and/or Bitbucket. For further documentation, see chapter
582 "Phabricator server administration" in the "system" manual. A notable
583 example installation is https://isabelle-dev.sketis.net/.
585 * The command-line tool "isabelle hg_setup" simplifies the setup of
586 Mercurial repositories, with hosting via Phabricator or SSH file server
589 * The command-line tool "isabelle imports" has been discontinued: strict
590 checking of session directories enforces session-qualified theory names
591 in applications -- users are responsible to specify session ROOT entries
594 * The command-line tool "isabelle dump" and its underlying
595 Isabelle/Scala module isabelle.Dump has become more scalable, by
596 splitting sessions and supporting a base logic image. Minor
597 INCOMPATIBILITY in options and parameters.
599 * The command-line tool "isabelle build_docker" has been slightly
600 improved: it is now properly documented in the "system" manual.
602 * Isabelle/Scala support for the Linux platform (Ubuntu): packages,
603 users, system services.
605 * Isabelle/Scala support for proof terms (with full type/term
606 information) in module isabelle.Term.
608 * Isabelle/Scala: more scalable output of YXML files, e.g. relevant for
611 * Theory export via Isabelle/Scala has been reworked. The former "fact"
612 name space is now split into individual "thm" items: names are
613 potentially indexed, such as "foo" for singleton facts, or "bar(1)",
614 "bar(2)", "bar(3)" for multi-facts. Theorem dependencies are now
615 exported as well: this spans an overall dependency graph of internal
616 inferences; it might help to reconstruct the formal structure of theory
617 libraries. See also the module isabelle.Export_Theory in Isabelle/Scala.
619 * Theory export of structured specifications, based on internal
620 declarations of Spec_Rules by packages like 'definition', 'inductive',
621 'primrec', 'function'.
623 * Old settings variables ISABELLE_PLATFORM and ISABELLE_WINDOWS_PLATFORM
624 have been discontinued -- deprecated since Isabelle2018.
626 * More complete x86_64 platform support on macOS, notably Catalina where
627 old x86 has been discontinued.
629 * Update to GHC stack 2.1.3 with stackage lts-13.19/ghc-8.6.4.
631 * Update to OCaml Opam 2.0.6 (using ocaml 4.05.0 as before).
635 New in Isabelle2019 (June 2019)
636 -------------------------------
640 * The font collection "Isabelle DejaVu" is systematically derived from
641 the existing "DejaVu" fonts, with variants "Sans Mono", "Sans", "Serif"
642 and styles "Normal", "Bold", "Italic/Oblique", "Bold-Italic/Oblique".
643 The DejaVu base fonts are retricted to well-defined Unicode ranges and
644 augmented by special Isabelle symbols, taken from the former
645 "IsabelleText" font (which is no longer provided separately). The line
646 metrics and overall rendering quality is closer to original DejaVu.
647 INCOMPATIBILITY with display configuration expecting the old
648 "IsabelleText" font: use e.g. "Isabelle DejaVu Sans Mono" instead.
650 * The Isabelle fonts render "\<inverse>" properly as superscript "-1".
652 * Old-style inner comments (* ... *) within the term language are no
653 longer supported (legacy feature in Isabelle2018).
655 * Old-style {* verbatim *} tokens are explicitly marked as legacy
656 feature and will be removed soon. Use \<open>cartouche\<close> syntax instead, e.g.
657 via "isabelle update_cartouches -t" (available since Isabelle2015).
659 * Infix operators that begin or end with a "*" are now parenthesized
660 without additional spaces, e.g. "(*)" instead of "( * )". Minor
663 * Mixfix annotations may use cartouches instead of old-style double
664 quotes, e.g. (infixl \<open>+\<close> 60). The command-line tool "isabelle update -u
665 mixfix_cartouches" allows to update existing theory sources
668 * ML setup commands (e.g. 'setup', 'method_setup', 'parse_translation')
669 need to provide a closed expression -- without trailing semicolon. Minor
672 * Commands 'generate_file', 'export_generated_files', and
673 'compile_generated_files' support a stateless (PIDE-conformant) model
674 for generated sources and compiled binaries of other languages. The
675 compilation process is managed in Isabelle/ML, and results exported to
676 the session database for further use (e.g. with "isabelle export" or
677 "isabelle build -e").
680 *** Isabelle/jEdit Prover IDE ***
682 * Fonts for the text area, gutter, GUI elements etc. use the "Isabelle
683 DejaVu" collection by default, which provides uniform rendering quality
684 with the usual Isabelle symbols. Line spacing no longer needs to be
685 adjusted: properties for the old IsabelleText font had "Global Options /
686 Text Area / Extra vertical line spacing (in pixels): -2", it now
687 defaults to 1, but 0 works as well.
689 * The jEdit File Browser is more prominent in the default GUI layout of
690 Isabelle/jEdit: various virtual file-systems provide access to Isabelle
691 resources, notably via "favorites:" (or "Edit Favorites").
693 * Further markup and rendering for "plain text" (e.g. informal prose)
694 and "raw text" (e.g. verbatim sources). This improves the visual
695 appearance of formal comments inside the term language, or in general
696 for repeated alternation of formal and informal text.
698 * Action "isabelle-export-browser" points the File Browser to the theory
699 exports of the current buffer, based on the "isabelle-export:" virtual
700 file-system. The directory view needs to be reloaded manually to follow
701 ongoing document processing.
703 * Action "isabelle-session-browser" points the File Browser to session
704 information, based on the "isabelle-session:" virtual file-system. Its
705 entries are structured according to chapter / session names, the open
706 operation is redirected to the session ROOT file.
708 * Support for user-defined file-formats via class isabelle.File_Format
709 in Isabelle/Scala (e.g. see isabelle.Bibtex.File_Format), configured via
710 the shell function "isabelle_file_format" in etc/settings (e.g. of an
713 * System option "jedit_text_overview" allows to disable the text
716 * Command-line options "-s" and "-u" of "isabelle jedit" override the
717 default for system option "system_heaps" that determines the heap
718 storage directory for "isabelle build". Option "-n" is now clearly
719 separated from option "-s".
721 * The Isabelle/jEdit desktop application uses the same options as
722 "isabelle jedit" for its internal "isabelle build" process: the implicit
723 option "-o system_heaps" (or "-s") has been discontinued. This reduces
724 the potential for surprise wrt. command-line tools.
726 * The official download of the Isabelle/jEdit application already
727 contains heap images for Isabelle/HOL within its main directory: thus
728 the first encounter becomes faster and more robust (e.g. when run from a
729 read-only directory).
731 * Isabelle DejaVu fonts are available with hinting by default, which is
732 relevant for low-resolution displays. This may be disabled via system
733 option "isabelle_fonts_hinted = false" in
734 $ISABELLE_HOME_USER/etc/preferences -- it occasionally yields better
737 * OpenJDK 11 has quite different font rendering, with better glyph
738 shapes and improved sub-pixel anti-aliasing. In some situations results
739 might be *worse* than Oracle Java 8, though -- a proper HiDPI / UHD
740 display is recommended.
742 * OpenJDK 11 supports GTK version 2.2 and 3 (according to system
743 property jdk.gtk.version). The factory default is version 3, but
744 ISABELLE_JAVA_SYSTEM_OPTIONS includes "-Djdk.gtk.version=2.2" to make
745 this more conservative (as in Java 8). Depending on the GTK theme
746 configuration, "-Djdk.gtk.version=3" might work better or worse.
749 *** Document preparation ***
751 * Document markers are formal comments of the form \<^marker>\<open>marker_body\<close> that
752 are stripped from document output: the effect is to modify the semantic
753 presentation context or to emit markup to the PIDE document. Some
754 predefined markers are taken from the Dublin Core Metadata Initiative,
755 e.g. \<^marker>\<open>contributor arg\<close> or \<^marker>\<open>license arg\<close> and produce PIDE markup that
756 can be retrieved from the document database.
758 * Old-style command tags %name are re-interpreted as markers with
759 proof-scope \<^marker>\<open>tag (proof) name\<close> and produce LaTeX environments as
760 before. Potential INCOMPATIBILITY: multiple markers are composed in
761 canonical order, resulting in a reversed list of tags in the
762 presentation context.
764 * Marker \<^marker>\<open>tag name\<close> does not apply to the proof of a top-level goal
765 statement by default (e.g. 'theorem', 'lemma'). This is a subtle change
766 of semantics wrt. old-style %name.
768 * In Isabelle/jEdit, the string "\tag" may be completed to a "\<^marker>\<open>tag \<close>"
771 * Document antiquotation option "cartouche" indicates if the output
772 should be delimited as cartouche; this takes precedence over the
773 analogous option "quotes".
775 * Many document antiquotations are internally categorized as "embedded"
776 and expect one cartouche argument, which is typically used with the
777 \<^control>\<open>cartouche\<close> notation (e.g. \<^term>\<open>\<lambda>x y. x\<close>). The cartouche
778 delimiters are stripped in output of the source (antiquotation option
779 "source"), but it is possible to enforce delimiters via option
780 "source_cartouche", e.g. @{term [source_cartouche] \<open>\<lambda>x y. x\<close>}.
785 * Implicit cases goal1, goal2, goal3, etc. have been discontinued
786 (legacy feature since Isabelle2016).
788 * More robust treatment of structural errors: begin/end blocks take
789 precedence over goal/proof. This is particularly relevant for the
790 headless PIDE session and server.
792 * Command keywords of kind thy_decl / thy_goal may be more specifically
793 fit into the traditional document model of "definition-statement-proof"
794 via thy_defn / thy_stmt / thy_goal_defn / thy_goal_stmt.
799 * Command 'export_code' produces output as logical files within the
800 theory context, as well as formal session exports that can be
801 materialized via command-line tools "isabelle export" or "isabelle build
802 -e" (with 'export_files' in the session ROOT). Isabelle/jEdit also
803 provides a virtual file-system "isabelle-export:" that can be explored
804 in the regular file-browser. A 'file_prefix' argument allows to specify
805 an explicit name prefix for the target file (SML, OCaml, Scala) or
806 directory (Haskell); the default is "export" with a consecutive number
809 * Command 'export_code': the 'file' argument is now legacy and will be
810 removed soon: writing to the physical file-system is not well-defined in
811 a reactive/parallel application like Isabelle. The empty 'file' argument
812 has been discontinued already: it is superseded by the file-browser in
813 Isabelle/jEdit on "isabelle-export:". Minor INCOMPATIBILITY.
815 * Command 'code_reflect' no longer supports the 'file' argument: it has
816 been superseded by 'file_prefix' for stateless file management as in
817 'export_code'. Minor INCOMPATIBILITY.
819 * Code generation for OCaml: proper strings are used for literals.
820 Minor INCOMPATIBILITY.
822 * Code generation for OCaml: Zarith supersedes Nums as library for
823 proper integer arithmetic. The library is located via standard
824 invocations of "ocamlfind" (via ISABELLE_OCAMLFIND settings variable).
825 The environment provided by "isabelle ocaml_setup" already contains this
826 tool and the required packages. Minor INCOMPATIBILITY.
828 * Code generation for Haskell: code includes for Haskell must contain
829 proper module frame, nothing is added magically any longer.
832 * Code generation: slightly more conventional syntax for 'code_stmts'
833 antiquotation. Minor INCOMPATIBILITY.
835 * Theory List: the precedence of the list_update operator has changed:
836 "f a [n := x]" now needs to be written "(f a)[n := x]".
838 * The functions \<Union>, \<Inter>, \<Squnion>, \<Sqinter> (not the corresponding binding operators)
839 now have the same precedence as any other prefix function symbol. Minor
842 * Simplified syntax setup for big operators under image. In rare
843 situations, type conversions are not inserted implicitly any longer
844 and need to be given explicitly. Auxiliary abbreviations INFIMUM,
845 SUPREMUM, UNION, INTER should now rarely occur in output and are just
846 retained as migration auxiliary. Abbreviations MINIMUM and MAXIMUM
847 are gone INCOMPATIBILITY.
849 * The simplifier uses image_cong_simp as a congruence rule. The historic
850 and not really well-formed congruence rules INF_cong*, SUP_cong*, are
851 not used by default any longer. INCOMPATIBILITY; consider using declare
852 image_cong_simp [cong del] in extreme situations.
854 * INF_image and SUP_image are no default simp rules any longer.
855 INCOMPATIBILITY, prefer image_comp as simp rule if needed.
857 * Strong congruence rules (with =simp=> in the premises) for constant f
858 are now uniformly called f_cong_simp, in accordance with congruence
859 rules produced for mappers by the datatype package. INCOMPATIBILITY.
861 * Retired lemma card_Union_image; use the simpler card_UN_disjoint
862 instead. INCOMPATIBILITY.
864 * Facts sum_mset.commute and prod_mset.commute have been renamed to
865 sum_mset.swap and prod_mset.swap, similarly to sum.swap and prod.swap.
868 * ML structure Inductive: slightly more conventional naming schema.
869 Minor INCOMPATIBILITY.
871 * ML: Various _global variants of specification tools have been removed.
872 Minor INCOMPATIBILITY, prefer combinators
873 Named_Target.theory_map[_result] to lift specifications to the global
876 * Theory HOL-Library.Simps_Case_Conv: 'case_of_simps' now supports
877 overlapping and non-exhaustive patterns and handles arbitrarily nested
878 patterns. It uses on the same algorithm as HOL-Library.Code_Lazy, which
879 assumes sequential left-to-right pattern matching. The generated
880 equation no longer tuples the arguments on the right-hand side.
883 * Theory HOL-Library.Multiset: the \<Union># operator now has the same
884 precedence as any other prefix function symbol.
886 * Theory HOL-Library.Cardinal_Notations has been discontinued in favor
887 of the bundle cardinal_syntax (available in theory Main). Minor
890 * Session HOL-Library and HOL-Number_Theory: Exponentiation by squaring,
891 used for computing powers in class "monoid_mult" and modular
894 * Session HOL-Computational_Algebra: Formal Laurent series and overhaul
895 of Formal power series.
897 * Session HOL-Number_Theory: More material on residue rings in
898 Carmichael's function, primitive roots, more properties for "ord".
900 * Session HOL-Analysis: Better organization and much more material
901 at the level of abstract topological spaces.
903 * Session HOL-Algebra: Free abelian groups, etc., ported from HOL Light;
904 algebraic closure of a field by de Vilhena and Baillon.
906 * Session HOL-Homology has been added. It is a port of HOL Light's
907 homology library, with new proofs of "invariance of domain" and related
910 * Session HOL-SPARK: .prv files are no longer written to the
911 file-system, but exported to the session database. Results may be
912 retrieved via "isabelle build -e HOL-SPARK-Examples" on the
916 - The URL for SystemOnTPTP, which is used by remote provers, has been
918 - The machine-learning-based filter MaSh has been optimized to take
919 less time (in most cases).
921 * SMT: reconstruction is now possible using the SMT solver veriT.
924 * New theory More_Word as comprehensive entrance point.
925 * Merged type class bitss into type class bits.
931 * Command 'generate_file' allows to produce sources for other languages,
932 with antiquotations in the Isabelle context (only the control-cartouche
933 form). The default "cartouche" antiquotation evaluates an ML expression
934 of type string and inlines the result as a string literal of the target
935 language. For example, this works for Haskell as follows:
937 generate_file "Pure.hs" = \<open>
938 module Isabelle.Pure where
939 allConst, impConst, eqConst :: String
940 allConst = \<open>\<^const_name>\<open>Pure.all\<close>\<close>
941 impConst = \<open>\<^const_name>\<open>Pure.imp\<close>\<close>
942 eqConst = \<open>\<^const_name>\<open>Pure.eq\<close>\<close>
945 See also commands 'export_generated_files' and 'compile_generated_files'
948 * ML evaluation (notably via command 'ML' or 'ML_file') is subject to
949 option ML_environment to select a named environment, such as "Isabelle"
950 for Isabelle/ML, or "SML" for official Standard ML.
952 * ML antiquotation @{master_dir} refers to the master directory of the
953 underlying theory, i.e. the directory of the theory file.
955 * ML antiquotation @{verbatim} inlines its argument as string literal,
956 preserving newlines literally. The short form \<^verbatim>\<open>abc\<close> is particularly
959 * Local_Theory.reset is no longer available in user space. Regular
960 definitional packages should use balanced blocks of
961 Local_Theory.open_target versus Local_Theory.close_target instead, or
962 the Local_Theory.subtarget(_result) combinator. Rare INCOMPATIBILITY.
964 * Original PolyML.pointerEq is retained as a convenience for tools that
965 don't use Isabelle/ML (where this is called "pointer_eq").
970 * Update to OpenJDK 11: the current long-term support version of Java.
972 * Update to Poly/ML 5.8 allows to use the native x86_64 platform without
973 the full overhead of 64-bit values everywhere. This special x86_64_32
974 mode provides up to 16GB ML heap, while program code and stacks are
975 allocated elsewhere. Thus approx. 5 times more memory is available for
976 applications compared to old x86 mode (which is no longer used by
977 Isabelle). The switch to the x86_64 CPU architecture also avoids
978 compatibility problems with Linux and macOS, where 32-bit applications
979 are gradually phased out.
981 * System option "checkpoint" has been discontinued: obsolete thanks to
982 improved memory management in Poly/ML.
984 * System option "system_heaps" determines where to store the session
985 image of "isabelle build" (and other tools using that internally).
986 Former option "-s" is superseded by option "-o system_heaps".
987 INCOMPATIBILITY in command-line syntax.
989 * Session directory $ISABELLE_HOME/src/Tools/Haskell provides some
990 source modules for Isabelle tools implemented in Haskell, notably for
993 * The command-line tool "isabelle build -e" retrieves theory exports
994 from the session build database, using 'export_files' in session ROOT
997 * The command-line tool "isabelle update" uses Isabelle/PIDE in
998 batch-mode to update theory sources based on semantic markup produced in
999 Isabelle/ML. Actual updates depend on system options that may be enabled
1000 via "-u OPT" (for "update_OPT"), see also $ISABELLE_HOME/etc/options
1001 section "Theory update". Theory sessions are specified as in "isabelle
1004 * The command-line tool "isabelle update -u control_cartouches" changes
1005 antiquotations into control-symbol format (where possible): @{NAME}
1006 becomes \<^NAME> and @{NAME ARG} becomes \<^NAME>\<open>ARG\<close>.
1008 * Support for Isabelle command-line tools defined in Isabelle/Scala.
1009 Instances of class Isabelle_Scala_Tools may be configured via the shell
1010 function "isabelle_scala_tools" in etc/settings (e.g. of an Isabelle
1013 * Isabelle Server command "use_theories" supports "nodes_status_delay"
1014 for continuous output of node status information. The time interval is
1015 specified in seconds; a negative value means it is disabled (default).
1017 * Isabelle Server command "use_theories" terminates more robustly in the
1018 presence of structurally broken sources: full consolidation of theories
1019 is no longer required.
1021 * OCaml tools and libraries are now accesed via ISABELLE_OCAMLFIND,
1022 which needs to point to a suitable version of "ocamlfind" (e.g. via
1023 OPAM, see below). INCOMPATIBILITY: settings variables ISABELLE_OCAML and
1024 ISABELLE_OCAMLC are no longer supported.
1026 * Support for managed installations of Glasgow Haskell Compiler and
1027 OCaml via the following command-line tools:
1032 isabelle ocaml_setup
1035 The global installation state is determined by the following settings
1036 (and corresponding directory contents):
1039 ISABELLE_STACK_RESOLVER
1040 ISABELLE_GHC_VERSION
1043 ISABELLE_OCAML_VERSION
1045 After setup, the following Isabelle settings are automatically
1046 redirected (overriding existing user settings):
1052 The old meaning of these settings as locally installed executables may
1053 be recovered by purging the directories ISABELLE_STACK_ROOT /
1054 ISABELLE_OPAM_ROOT, or by resetting these variables in
1055 $ISABELLE_HOME_USER/etc/settings.
1059 New in Isabelle2018 (August 2018)
1060 ---------------------------------
1064 * Session-qualified theory names are mandatory: it is no longer possible
1065 to refer to unqualified theories from the parent session.
1066 INCOMPATIBILITY for old developments that have not been updated to
1067 Isabelle2017 yet (using the "isabelle imports" tool).
1069 * Only the most fundamental theory names are global, usually the entry
1070 points to major logic sessions: Pure, Main, Complex_Main, HOLCF, IFOL,
1071 FOL, ZF, ZFC etc. INCOMPATIBILITY, need to use qualified names for
1072 formerly global "HOL-Probability.Probability" and "HOL-SPARK.SPARK".
1074 * Global facts need to be closed: no free variables and no hypotheses.
1075 Rare INCOMPATIBILITY.
1077 * Facts stemming from locale interpretation are subject to lazy
1078 evaluation for improved performance. Rare INCOMPATIBILITY: errors
1079 stemming from interpretation morphisms might be deferred and thus
1080 difficult to locate; enable system option "strict_facts" temporarily to
1083 * Marginal comments need to be written exclusively in the new-style form
1084 "\<comment> \<open>text\<close>", old ASCII variants like "-- {* ... *}" are no longer
1085 supported. INCOMPATIBILITY, use the command-line tool "isabelle
1086 update_comments" to update existing theory files.
1088 * Old-style inner comments (* ... *) within the term language are legacy
1089 and will be discontinued soon: use formal comments "\<comment> \<open>...\<close>" or "\<^cancel>\<open>...\<close>"
1092 * The "op <infix-op>" syntax for infix operators has been replaced by
1093 "(<infix-op>)". If <infix-op> begins or ends with a "*", there needs to
1094 be a space between the "*" and the corresponding parenthesis.
1095 INCOMPATIBILITY, use the command-line tool "isabelle update_op" to
1096 convert theory and ML files to the new syntax. Because it is based on
1097 regular expression matching, the result may need a bit of manual
1098 postprocessing. Invoking "isabelle update_op" converts all files in the
1099 current directory (recursively). In case you want to exclude conversion
1100 of ML files (because the tool frequently also converts ML's "op"
1101 syntax), use option "-m".
1103 * Theory header 'abbrevs' specifications need to be separated by 'and'.
1106 * Command 'external_file' declares the formal dependency on the given
1107 file name, such that the Isabelle build process knows about it, but
1108 without specific Prover IDE management.
1110 * Session ROOT entries no longer allow specification of 'files'. Rare
1111 INCOMPATIBILITY, use command 'external_file' within a proper theory
1114 * Session root directories may be specified multiple times: each
1115 accessible ROOT file is processed only once. This facilitates
1116 specification of $ISABELLE_HOME_USER/ROOTS or command-line options like
1117 -d or -D for "isabelle build" and "isabelle jedit". Example:
1119 isabelle build -D '~~/src/ZF'
1121 * The command 'display_drafts' has been discontinued. INCOMPATIBILITY,
1122 use action "isabelle.draft" (or "print") in Isabelle/jEdit instead.
1124 * In HTML output, the Isabelle symbol "\<hyphen>" is rendered as explicit
1125 Unicode hyphen U+2010, to avoid unclear meaning of the old "soft hyphen"
1126 U+00AD. Rare INCOMPATIBILITY, e.g. copy-paste of historic Isabelle HTML
1130 *** Isabelle/jEdit Prover IDE ***
1132 * The command-line tool "isabelle jedit" provides more flexible options
1133 for session management:
1135 - option -R builds an auxiliary logic image with all theories from
1136 other sessions that are not already present in its parent
1138 - option -S is like -R, with a focus on the selected session and its
1139 descendants (this reduces startup time for big projects like AFP)
1141 - option -A specifies an alternative ancestor session for options -R
1144 - option -i includes additional sessions into the name-space of
1148 isabelle jedit -R HOL-Number_Theory
1149 isabelle jedit -R HOL-Number_Theory -A HOL
1150 isabelle jedit -d '$AFP' -S Formal_SSA -A HOL
1151 isabelle jedit -d '$AFP' -S Formal_SSA -A HOL-Analysis
1152 isabelle jedit -d '$AFP' -S Formal_SSA -A HOL-Analysis -i CryptHOL
1154 * PIDE markup for session ROOT files: allows to complete session names,
1155 follow links to theories and document files etc.
1157 * Completion supports theory header imports, using theory base name.
1158 E.g. "Prob" may be completed to "HOL-Probability.Probability".
1160 * Named control symbols (without special Unicode rendering) are shown as
1161 bold-italic keyword. This is particularly useful for the short form of
1162 antiquotations with control symbol: \<^name>\<open>argument\<close>. The action
1163 "isabelle.antiquoted_cartouche" turns an antiquotation with 0 or 1
1164 arguments into this format.
1166 * Completion provides templates for named symbols with arguments,
1167 e.g. "\<comment> \<open>ARGUMENT\<close>" or "\<^emph>\<open>ARGUMENT\<close>".
1169 * Slightly more parallel checking, notably for high priority print
1170 functions (e.g. State output).
1172 * The view title is set dynamically, according to the Isabelle
1173 distribution and the logic session name. The user can override this via
1174 set-view-title (stored persistently in $JEDIT_SETTINGS/perspective.xml).
1176 * System options "spell_checker_include" and "spell_checker_exclude"
1177 supersede former "spell_checker_elements" to determine regions of text
1178 that are subject to spell-checking. Minor INCOMPATIBILITY.
1180 * Action "isabelle.preview" is able to present more file formats,
1181 notably bibtex database files and ML files.
1183 * Action "isabelle.draft" is similar to "isabelle.preview", but shows a
1184 plain-text document draft. Both are available via the menu "Plugins /
1187 * When loading text files, the Isabelle symbols encoding UTF-8-Isabelle
1188 is only used if there is no conflict with existing Unicode sequences in
1189 the file. Otherwise, the fallback encoding is plain UTF-8 and Isabelle
1190 symbols remain in literal \<symbol> form. This avoids accidental loss of
1191 Unicode content when saving the file.
1193 * Bibtex database files (.bib) are semantically checked.
1195 * Update to jedit-5.5.0, the latest release.
1198 *** Isabelle/VSCode Prover IDE ***
1200 * HTML preview of theories and other file-formats similar to
1203 * Command-line tool "isabelle vscode_server" accepts the same options
1204 -A, -R, -S, -i for session selection as "isabelle jedit". This is
1205 relevant for isabelle.args configuration settings in VSCode. The former
1206 option -A (explore all known session files) has been discontinued: it is
1207 enabled by default, unless option -S is used to focus on a particular
1208 spot in the session structure. INCOMPATIBILITY.
1211 *** Document preparation ***
1213 * Formal comments work uniformly in outer syntax, inner syntax (term
1214 language), Isabelle/ML and some other embedded languages of Isabelle.
1215 See also "Document comments" in the isar-ref manual. The following forms
1218 - marginal text comment: \<comment> \<open>\<dots>\<close>
1219 - canceled source: \<^cancel>\<open>\<dots>\<close>
1220 - raw LaTeX: \<^latex>\<open>\<dots>\<close>
1222 * Outside of the inner theory body, the default presentation context is
1223 theory Pure. Thus elementary antiquotations may be used in markup
1224 commands (e.g. 'chapter', 'section', 'text') and formal comments.
1226 * System option "document_tags" specifies alternative command tags. This
1227 is occasionally useful to control the global visibility of commands via
1228 session options (e.g. in ROOT).
1230 * Document markup commands ('section', 'text' etc.) are implicitly
1231 tagged as "document" and visible by default. This avoids the application
1232 of option "document_tags" to these commands.
1234 * Isabelle names are mangled into LaTeX macro names to allow the full
1235 identifier syntax with underscore, prime, digits. This is relevant for
1236 antiquotations in control symbol notation, e.g. \<^const_name> becomes
1237 \isactrlconstUNDERSCOREname.
1239 * Document preparation with skip_proofs option now preserves the content
1240 more accurately: only terminal proof steps ('by' etc.) are skipped.
1242 * Document antiquotation @{theory name} requires the long
1243 session-qualified theory name: this is what users reading the text
1244 normally need to import.
1246 * Document antiquotation @{session name} checks and prints the given
1247 session name verbatim.
1249 * Document antiquotation @{cite} now checks the given Bibtex entries
1250 against the Bibtex database files -- only in batch-mode session builds.
1252 * Command-line tool "isabelle document" has been re-implemented in
1253 Isabelle/Scala, with simplified arguments and explicit errors from the
1254 latex and bibtex process. Minor INCOMPATIBILITY.
1256 * Session ROOT entry: empty 'document_files' means there is no document
1257 for this session. There is no need to specify options [document = false]
1263 * Command 'interpret' no longer exposes resulting theorems as literal
1264 facts, notably for the \<open>prop\<close> notation or the "fact" proof method. This
1265 improves modularity of proofs and scalability of locale interpretation.
1266 Rare INCOMPATIBILITY, need to refer to explicitly named facts instead
1267 (e.g. use 'find_theorems' or 'try' to figure this out).
1269 * The old 'def' command has been discontinued (legacy since
1270 Isbelle2016-1). INCOMPATIBILITY, use 'define' instead -- usually with
1271 object-logic equality or equivalence.
1276 * The inner syntax category "sort" now includes notation "_" for the
1277 dummy sort: it is effectively ignored in type-inference.
1279 * Rewrites clauses (keyword 'rewrites') were moved into the locale
1280 expression syntax, where they are part of locale instances. In
1281 interpretation commands rewrites clauses now need to occur before 'for'
1282 and 'defines'. Rare INCOMPATIBILITY; definitions immediately subject to
1283 rewriting may need to be pulled up into the surrounding theory.
1285 * For 'rewrites' clauses, if activating a locale instance fails, fall
1286 back to reading the clause first. This helps avoid qualification of
1287 locale instances where the qualifier's sole purpose is avoiding
1288 duplicate constant declarations.
1290 * Proof method "simp" now supports a new modifier "flip:" followed by a
1291 list of theorems. Each of these theorems is removed from the simpset
1292 (without warning if it is not there) and the symmetric version of the
1293 theorem (i.e. lhs and rhs exchanged) is added to the simpset. For "auto"
1294 and friends the modifier is "simp flip:".
1299 * Sledgehammer: bundled version of "vampire" (for non-commercial users)
1300 helps to avoid fragility of "remote_vampire" service.
1302 * Clarified relationship of characters, strings and code generation:
1304 - Type "char" is now a proper datatype of 8-bit values.
1306 - Conversions "nat_of_char" and "char_of_nat" are gone; use more
1307 general conversions "of_char" and "char_of" with suitable type
1308 constraints instead.
1310 - The zero character is just written "CHR 0x00", not "0" any longer.
1312 - Type "String.literal" (for code generation) is now isomorphic to
1313 lists of 7-bit (ASCII) values; concrete values can be written as
1314 "STR ''...''" for sequences of printable characters and "STR 0x..."
1315 for one single ASCII code point given as hexadecimal numeral.
1317 - Type "String.literal" supports concatenation "... + ..." for all
1318 standard target languages.
1320 - Theory HOL-Library.Code_Char is gone; study the explanations
1321 concerning "String.literal" in the tutorial on code generation to
1322 get an idea how target-language string literals can be converted to
1323 HOL string values and vice versa.
1325 - Session Imperative-HOL: operation "raise" directly takes a value of
1326 type "String.literal" as argument, not type "string".
1330 * Code generation: Code generation takes an explicit option
1331 "case_insensitive" to accomodate case-insensitive file systems.
1333 * Abstract bit operations as part of Main: push_bit, take_bit, drop_bit.
1335 * New, more general, axiomatization of complete_distrib_lattice. The
1338 "sup x (Inf X) = Inf (sup x ` X)" and "inf x (Sup X) = Sup (inf x ` X)"
1342 "Inf (Sup ` A) <= Sup (Inf ` {f ` A | f . (! Y \<in> A . f Y \<in> Y)})"
1344 The instantiations of sets and functions as complete_distrib_lattice are
1345 moved to Hilbert_Choice.thy because their proofs need the Hilbert choice
1346 operator. The dual of this property is also proved in theory
1349 * New syntax for the minimum/maximum of a function over a finite set:
1350 MIN x\<in>A. B and even MIN x. B (only useful for finite types), also MAX.
1352 * Clarifed theorem names:
1354 Min.antimono ~> Min.subset_imp
1355 Max.antimono ~> Max.subset_imp
1357 Minor INCOMPATIBILITY.
1361 - The 'smt_oracle' option is now necessary when using the 'smt' method
1362 with a solver other than Z3. INCOMPATIBILITY.
1364 - The encoding to first-order logic is now more complete in the
1365 presence of higher-order quantifiers. An 'smt_explicit_application'
1366 option has been added to control this. INCOMPATIBILITY.
1368 * Facts sum.commute(_restrict) and prod.commute(_restrict) renamed to
1369 sum.swap(_restrict) and prod.swap(_restrict), to avoid name clashes on
1370 interpretation of abstract locales. INCOMPATIBILITY.
1372 * Predicate coprime is now a real definition, not a mere abbreviation.
1375 * Predicate pairwise_coprime abolished, use "pairwise coprime" instead.
1378 * The relator rel_filter on filters has been strengthened to its
1379 canonical categorical definition with better properties.
1382 * Generalized linear algebra involving linear, span, dependent, dim
1383 from type class real_vector to locales module and vector_space.
1386 span_inc ~> span_superset
1387 span_superset ~> span_base
1388 span_eq ~> span_eq_iff
1392 * Class linordered_semiring_1 covers zero_less_one also, ruling out
1393 pathologic instances. Minor INCOMPATIBILITY.
1395 * Theory HOL.List: functions "sorted_wrt" and "sorted" now compare every
1396 element in a list to all following elements, not just the next one.
1398 * Theory HOL.List syntax:
1400 - filter-syntax "[x <- xs. P]" is no longer output syntax, but only
1403 - list comprehension syntax now supports tuple patterns in "pat <- xs"
1405 * Theory Map: "empty" must now be qualified as "Map.empty".
1407 * Removed nat-int transfer machinery. Rare INCOMPATIBILITY.
1409 * Fact mod_mult_self4 (on nat) renamed to Suc_mod_mult_self3, to avoid
1410 clash with fact mod_mult_self4 (on more generic semirings).
1413 * Eliminated some theorem aliasses:
1414 even_times_iff ~> even_mult_iff
1415 mod_2_not_eq_zero_eq_one_nat ~> not_mod_2_eq_0_eq_1
1416 even_of_nat ~> even_int_iff
1420 * Eliminated some theorem duplicate variations:
1422 - dvd_eq_mod_eq_0_numeral can be replaced by dvd_eq_mod_eq_0
1423 - mod_Suc_eq_Suc_mod can be replaced by mod_Suc
1424 - mod_Suc_eq_Suc_mod [symmetrict] can be replaced by mod_simps
1425 - mod_eq_0_iff can be replaced by mod_eq_0_iff_dvd and dvd_def
1426 - the witness of mod_eqD can be given directly as "_ div _"
1430 * Classical setup: Assumption "m mod d = 0" (for m d :: nat) is no
1431 longer aggresively destroyed to "\<exists>q. m = d * q". INCOMPATIBILITY, adding
1432 "elim!: dvd" to classical proof methods in most situations restores
1435 * Theory HOL-Library.Conditional_Parametricity provides command
1436 'parametric_constant' for proving parametricity of non-recursive
1437 definitions. For constants that are not fully parametric the command
1438 will infer conditions on relations (e.g., bi_unique, bi_total, or type
1439 class conditions such as "respects 0") sufficient for parametricity. See
1440 theory HOL-ex.Conditional_Parametricity_Examples for some examples.
1442 * Theory HOL-Library.Code_Lazy provides a new preprocessor for the code
1443 generator to generate code for algebraic types with lazy evaluation
1444 semantics even in call-by-value target languages. See the theories
1445 HOL-ex.Code_Lazy_Demo and HOL-Codegenerator_Test.Code_Lazy_Test for some
1448 * Theory HOL-Library.Landau_Symbols has been moved here from AFP.
1450 * Theory HOL-Library.Old_Datatype no longer provides the legacy command
1451 'old_datatype'. INCOMPATIBILITY.
1453 * Theory HOL-Computational_Algebra.Polynomial_Factorial does not provide
1454 instances of rat, real, complex as factorial rings etc. Import
1455 HOL-Computational_Algebra.Field_as_Ring explicitly in case of need.
1458 * Session HOL-Algebra: renamed (^) to [^] to avoid conflict with new
1459 infix/prefix notation.
1461 * Session HOL-Algebra: revamped with much new material. The set of
1462 isomorphisms between two groups is now denoted iso rather than iso_set.
1465 * Session HOL-Analysis: the Arg function now respects the same interval
1466 as Ln, namely (-pi,pi]; the old Arg function has been renamed Arg2pi.
1469 * Session HOL-Analysis: the functions zorder, zer_poly, porder and
1470 pol_poly have been redefined. All related lemmas have been reworked.
1473 * Session HOL-Analysis: infinite products, Moebius functions, the
1474 Riemann mapping theorem, the Vitali covering theorem,
1475 change-of-variables results for integration and measures.
1477 * Session HOL-Real_Asymp: proof method "real_asymp" proves asymptotics
1478 or real-valued functions (limits, "Big-O", etc.) automatically.
1479 See also ~~/src/HOL/Real_Asymp/Manual for some documentation.
1481 * Session HOL-Types_To_Sets: more tool support (unoverload_type combines
1482 internalize_sorts and unoverload) and larger experimental application
1483 (type based linear algebra transferred to linear algebra on subspaces).
1488 * Operation Export.export emits theory exports (arbitrary blobs), which
1489 are stored persistently in the session build database.
1491 * Command 'ML_export' exports ML toplevel bindings to the global
1492 bootstrap environment of the ML process. This allows ML evaluation
1493 without a formal theory context, e.g. in command-line tools like
1499 * Mac OS X 10.10 Yosemite is now the baseline version; Mavericks is no
1502 * Linux and Windows/Cygwin is for x86_64 only, old 32bit platform
1503 support has been discontinued.
1505 * Java runtime is for x86_64 only. Corresponding Isabelle settings have
1506 been renamed to ISABELLE_TOOL_JAVA_OPTIONS and JEDIT_JAVA_OPTIONS,
1507 instead of former 32/64 variants. INCOMPATIBILITY.
1509 * Old settings ISABELLE_PLATFORM and ISABELLE_WINDOWS_PLATFORM should be
1510 phased out due to unclear preference of 32bit vs. 64bit architecture.
1511 Explicit GNU bash expressions are now preferred, for example (with
1514 #Posix executables (Unix or Cygwin), with preference for 64bit
1515 "${ISABELLE_PLATFORM64:-$ISABELLE_PLATFORM32}"
1517 #native Windows or Unix executables, with preference for 64bit
1518 "${ISABELLE_WINDOWS_PLATFORM64:-${ISABELLE_WINDOWS_PLATFORM32:-${ISABELLE_PLATFORM64:-$ISABELLE_PLATFORM32}}}"
1520 #native Windows (32bit) or Unix executables (preference for 64bit)
1521 "${ISABELLE_WINDOWS_PLATFORM32:-${ISABELLE_PLATFORM64:-$ISABELLE_PLATFORM32}}"
1523 * Command-line tool "isabelle build" supports new options:
1524 - option -B NAME: include session NAME and all descendants
1525 - option -S: only observe changes of sources, not heap images
1526 - option -f: forces a fresh build
1528 * Command-line tool "isabelle build" options -c -x -B refer to
1529 descendants wrt. the session parent or import graph. Subtle
1530 INCOMPATIBILITY: options -c -x used to refer to the session parent graph
1533 * Command-line tool "isabelle build" takes "condition" options with the
1534 corresponding environment values into account, when determining the
1535 up-to-date status of a session.
1537 * The command-line tool "dump" dumps information from the cumulative
1538 PIDE session database: many sessions may be loaded into a given logic
1539 image, results from all loaded theories are written to the output
1542 * Command-line tool "isabelle imports -I" also reports actual session
1543 imports. This helps to minimize the session dependency graph.
1545 * The command-line tool "export" and 'export_files' in session ROOT
1546 entries retrieve theory exports from the session build database.
1548 * The command-line tools "isabelle server" and "isabelle client" provide
1549 access to the Isabelle Server: it supports responsive session management
1550 and concurrent use of theories, based on Isabelle/PIDE infrastructure.
1551 See also the "system" manual.
1553 * The command-line tool "isabelle update_comments" normalizes formal
1554 comments in outer syntax as follows: \<comment> \<open>text\<close> (whith a single space to
1555 approximate the appearance in document output). This is more specific
1556 than former "isabelle update_cartouches -c": the latter tool option has
1559 * The command-line tool "isabelle mkroot" now always produces a document
1560 outline: its options have been adapted accordingly. INCOMPATIBILITY.
1562 * The command-line tool "isabelle mkroot -I" initializes a Mercurial
1563 repository for the generated session files.
1565 * Settings ISABELLE_HEAPS + ISABELLE_BROWSER_INFO (or
1566 ISABELLE_HEAPS_SYSTEM + ISABELLE_BROWSER_INFO_SYSTEM in "system build
1567 mode") determine the directory locations of the main build artefacts --
1568 instead of hard-wired directories in ISABELLE_HOME_USER (or
1571 * Settings ISABELLE_PATH and ISABELLE_OUTPUT have been discontinued:
1572 heap images and session databases are always stored in
1573 $ISABELLE_HEAPS/$ML_IDENTIFIER (command-line default) or
1574 $ISABELLE_HEAPS_SYSTEM/$ML_IDENTIFIER (main Isabelle application or
1575 "isabelle jedit -s" or "isabelle build -s").
1577 * ISABELLE_LATEX and ISABELLE_PDFLATEX now include platform-specific
1578 options for improved error reporting. Potential INCOMPATIBILITY with
1579 unusual LaTeX installations, may have to adapt these settings.
1581 * Update to Poly/ML 5.7.1 with slightly improved performance and PIDE
1582 markup for identifier bindings. It now uses The GNU Multiple Precision
1583 Arithmetic Library (libgmp) on all platforms, notably Mac OS X with
1588 New in Isabelle2017 (October 2017)
1589 ----------------------------------
1593 * Experimental support for Visual Studio Code (VSCode) as alternative
1594 Isabelle/PIDE front-end, see also
1595 https://marketplace.visualstudio.com/items?itemName=makarius.Isabelle2017
1597 VSCode is a new type of application that continues the concepts of
1598 "programmer's editor" and "integrated development environment" towards
1599 fully semantic editing and debugging -- in a relatively light-weight
1600 manner. Thus it fits nicely on top of the Isabelle/PIDE infrastructure.
1601 Technically, VSCode is based on the Electron application framework
1602 (Node.js + Chromium browser + V8), which is implemented in JavaScript
1603 and TypeScript, while Isabelle/VSCode mainly consists of Isabelle/Scala
1604 modules around a Language Server implementation.
1606 * Theory names are qualified by the session name that they belong to.
1607 This affects imports, but not the theory name space prefix (which is
1608 just the theory base name as before).
1610 In order to import theories from other sessions, the ROOT file format
1611 provides a new 'sessions' keyword. In contrast, a theory that is
1612 imported in the old-fashioned manner via an explicit file-system path
1613 belongs to the current session, and might cause theory name conflicts
1614 later on. Theories that are imported from other sessions are excluded
1615 from the current session document. The command-line tool "isabelle
1616 imports" helps to update theory imports.
1618 * The main theory entry points for some non-HOL sessions have changed,
1619 to avoid confusion with the global name "Main" of the session HOL. This
1620 leads to the follow renamings:
1622 CTT/Main.thy ~> CTT/CTT.thy
1623 ZF/Main.thy ~> ZF/ZF.thy
1624 ZF/Main_ZF.thy ~> ZF/ZF.thy
1625 ZF/Main_ZFC.thy ~> ZF/ZFC.thy
1626 ZF/ZF.thy ~> ZF/ZF_Base.thy
1630 * Commands 'alias' and 'type_alias' introduce aliases for constants and
1631 type constructors, respectively. This allows adhoc changes to name-space
1632 accesses within global or local theory contexts, e.g. within a 'bundle'.
1634 * Document antiquotations @{prf} and @{full_prf} output proof terms
1635 (again) in the same way as commands 'prf' and 'full_prf'.
1637 * Computations generated by the code generator can be embedded directly
1638 into ML, alongside with @{code} antiquotations, using the following
1641 @{computation ... terms: ... datatypes: ...} :
1642 ((term -> term) -> 'ml option -> 'a) -> Proof.context -> term -> 'a
1643 @{computation_conv ... terms: ... datatypes: ...} :
1644 (Proof.context -> 'ml -> conv) -> Proof.context -> conv
1645 @{computation_check terms: ... datatypes: ...} : Proof.context -> conv
1647 See src/HOL/ex/Computations.thy,
1648 src/HOL/Decision_Procs/Commutative_Ring.thy and
1649 src/HOL/Decision_Procs/Reflective_Field.thy for examples and the
1650 tutorial on code generation.
1653 *** Prover IDE -- Isabelle/Scala/jEdit ***
1655 * Session-qualified theory imports allow the Prover IDE to process
1656 arbitrary theory hierarchies independently of the underlying logic
1657 session image (e.g. option "isabelle jedit -l"), but the directory
1658 structure needs to be known in advance (e.g. option "isabelle jedit -d"
1659 or a line in the file $ISABELLE_HOME_USER/ROOTS).
1661 * The PIDE document model maintains file content independently of the
1662 status of jEdit editor buffers. Reloading jEdit buffers no longer causes
1663 changes of formal document content. Theory dependencies are always
1664 resolved internally, without the need for corresponding editor buffers.
1665 The system option "jedit_auto_load" has been discontinued: it is
1666 effectively always enabled.
1668 * The Theories dockable provides a "Purge" button, in order to restrict
1669 the document model to theories that are required for open editor
1672 * The Theories dockable indicates the overall status of checking of each
1673 entry. When all forked tasks of a theory are finished, the border is
1674 painted with thick lines; remaining errors in this situation are
1675 represented by a different border color.
1677 * Automatic indentation is more careful to avoid redundant spaces in
1678 intermediate situations. Keywords are indented after input (via typed
1679 characters or completion); see also option "jedit_indent_input".
1681 * Action "isabelle.preview" opens an HTML preview of the current theory
1682 document in the default web browser.
1684 * Command-line invocation "isabelle jedit -R -l LOGIC" opens the ROOT
1685 entry of the specified logic session in the editor, while its parent is
1686 used for formal checking.
1688 * The main Isabelle/jEdit plugin may be restarted manually (using the
1689 jEdit Plugin Manager), as long as the "Isabelle Base" plugin remains
1690 enabled at all times.
1692 * Update to current jedit-5.4.0.
1697 * Deleting the last code equations for a particular function using
1698 [code del] results in function with no equations (runtime abort) rather
1699 than an unimplemented function (generation time abort). Use explicit
1700 [[code drop:]] to enforce the latter. Minor INCOMPATIBILITY.
1702 * Proper concept of code declarations in code.ML:
1703 - Regular code declarations act only on the global theory level, being
1704 ignored with warnings if syntactically malformed.
1705 - Explicitly global code declarations yield errors if syntactically
1707 - Default code declarations are silently ignored if syntactically
1709 Minor INCOMPATIBILITY.
1711 * Clarified and standardized internal data bookkeeping of code
1712 declarations: history of serials allows to track potentially
1713 non-monotonous declarations appropriately. Minor INCOMPATIBILITY.
1718 * The Nunchaku model finder is now part of "Main".
1721 - A new option, 'smt_nat_as_int', has been added to translate 'nat' to
1722 'int' and benefit from the SMT solver's theory reasoning. It is
1723 disabled by default.
1724 - The legacy module "src/HOL/Library/Old_SMT.thy" has been removed.
1725 - Several small issues have been rectified in the 'smt' command.
1727 * (Co)datatype package: The 'size_gen_o_map' lemma is no longer
1728 generated for datatypes with type class annotations. As a result, the
1729 tactic that derives it no longer fails on nested datatypes. Slight
1732 * Command and antiquotation "value" with modified default strategy:
1733 terms without free variables are always evaluated using plain evaluation
1734 only, with no fallback on normalization by evaluation. Minor
1737 * Theories "GCD" and "Binomial" are already included in "Main" (instead
1740 * Constant "surj" is a full input/output abbreviation (again).
1741 Minor INCOMPATIBILITY.
1743 * Dropped aliasses RangeP, DomainP for Rangep, Domainp respectively.
1746 * Renamed ii to imaginary_unit in order to free up ii as a variable
1747 name. The syntax \<i> remains available. INCOMPATIBILITY.
1749 * Dropped abbreviations transP, antisymP, single_valuedP; use constants
1750 transp, antisymp, single_valuedp instead. INCOMPATIBILITY.
1752 * Constant "subseq" in Topological_Spaces has been removed -- it is
1753 subsumed by "strict_mono". Some basic lemmas specific to "subseq" have
1754 been renamed accordingly, e.g. "subseq_o" -> "strict_mono_o" etc.
1756 * Theory List: "sublist" renamed to "nths" in analogy with "nth", and
1757 "sublisteq" renamed to "subseq". Minor INCOMPATIBILITY.
1759 * Theory List: new generic function "sorted_wrt".
1761 * Named theorems mod_simps covers various congruence rules concerning
1762 mod, replacing former zmod_simps. INCOMPATIBILITY.
1764 * Swapped orientation of congruence rules mod_add_left_eq,
1765 mod_add_right_eq, mod_add_eq, mod_mult_left_eq, mod_mult_right_eq,
1766 mod_mult_eq, mod_minus_eq, mod_diff_left_eq, mod_diff_right_eq,
1767 mod_diff_eq. INCOMPATIBILITY.
1769 * Generalized some facts:
1772 zminus_zmod ~> mod_minus_eq
1773 zdiff_zmod_left ~> mod_diff_left_eq
1774 zdiff_zmod_right ~> mod_diff_right_eq
1775 zmod_eq_dvd_iff ~> mod_eq_dvd_iff
1778 * Algebraic type class hierarchy of euclidean (semi)rings in HOL:
1779 euclidean_(semi)ring, euclidean_(semi)ring_cancel,
1780 unique_euclidean_(semi)ring; instantiation requires provision of a
1783 * Theory "HOL-Number_Theory.Euclidean_Algorithm" has been reworked:
1784 - Euclidean induction is available as rule eucl_induct.
1785 - Constants Euclidean_Algorithm.gcd, Euclidean_Algorithm.lcm,
1786 Euclidean_Algorithm.Gcd and Euclidean_Algorithm.Lcm allow
1787 easy instantiation of euclidean (semi)rings as GCD (semi)rings.
1788 - Coefficients obtained by extended euclidean algorithm are
1789 available as "bezout_coefficients".
1792 * Theory "Number_Theory.Totient" introduces basic notions about Euler's
1793 totient function previously hidden as solitary example in theory
1794 Residues. Definition changed so that "totient 1 = 1" in agreement with
1795 the literature. Minor INCOMPATIBILITY.
1797 * New styles in theory "HOL-Library.LaTeXsugar":
1798 - "dummy_pats" for printing equations with "_" on the lhs;
1799 - "eta_expand" for printing eta-expanded terms.
1801 * Theory "HOL-Library.Permutations": theorem bij_swap_ompose_bij has
1802 been renamed to bij_swap_compose_bij. INCOMPATIBILITY.
1804 * New theory "HOL-Library.Going_To_Filter" providing the "f going_to F"
1805 filter for describing points x such that f(x) is in the filter F.
1807 * Theory "HOL-Library.Formal_Power_Series": constants X/E/L/F have been
1808 renamed to fps_X/fps_exp/fps_ln/fps_hypergeo to avoid polluting the name
1809 space. INCOMPATIBILITY.
1811 * Theory "HOL-Library.FinFun" has been moved to AFP (again).
1814 * Theory "HOL-Library.FuncSet": some old and rarely used ASCII
1815 replacement syntax has been removed. INCOMPATIBILITY, standard syntax
1816 with symbols should be used instead. The subsequent commands help to
1817 reproduce the old forms, e.g. to simplify porting old theories:
1820 "_PiE" :: "pttrn \<Rightarrow> 'a set \<Rightarrow> 'b set \<Rightarrow> ('a \<Rightarrow> 'b) set" ("(3PIE _:_./ _)" 10)
1821 "_Pi" :: "pttrn \<Rightarrow> 'a set \<Rightarrow> 'b set \<Rightarrow> ('a \<Rightarrow> 'b) set" ("(3PI _:_./ _)" 10)
1822 "_lam" :: "pttrn \<Rightarrow> 'a set \<Rightarrow> 'a \<Rightarrow> 'b \<Rightarrow> ('a \<Rightarrow> 'b)" ("(3%_:_./ _)" [0,0,3] 3)
1824 * Theory "HOL-Library.Multiset": the simprocs on subsets operators of
1825 multisets have been renamed:
1827 msetless_cancel_numerals ~> msetsubset_cancel
1828 msetle_cancel_numerals ~> msetsubset_eq_cancel
1832 * Theory "HOL-Library.Pattern_Aliases" provides input and output syntax
1833 for pattern aliases as known from Haskell, Scala and ML.
1835 * Theory "HOL-Library.Uprod" formalizes the type of unordered pairs.
1837 * Session HOL-Analysis: more material involving arcs, paths, covering
1838 spaces, innessential maps, retracts, infinite products, simplicial
1839 complexes. Baire Category theorem. Major results include the Jordan
1840 Curve Theorem and the Great Picard Theorem.
1842 * Session HOL-Algebra has been extended by additional lattice theory:
1843 the Knaster-Tarski fixed point theorem and Galois Connections.
1845 * Sessions HOL-Computational_Algebra and HOL-Number_Theory: new notions
1846 of squarefreeness, n-th powers, and prime powers.
1848 * Session "HOL-Computional_Algebra" covers many previously scattered
1849 theories, notably Euclidean_Algorithm, Factorial_Ring,
1850 Formal_Power_Series, Fraction_Field, Fundamental_Theorem_Algebra,
1851 Normalized_Fraction, Polynomial_FPS, Polynomial, Primes. Minor
1857 * Isabelle/Scala: the SQL module supports access to relational
1858 databases, either as plain file (SQLite) or full-scale server
1859 (PostgreSQL via local port or remote ssh connection).
1861 * Results of "isabelle build" are recorded as SQLite database (i.e.
1862 "Application File Format" in the sense of
1863 https://www.sqlite.org/appfileformat.html). This allows systematic
1864 access via operations from module Sessions.Store in Isabelle/Scala.
1866 * System option "parallel_proofs" is 1 by default (instead of more
1867 aggressive 2). This requires less heap space and avoids burning parallel
1868 CPU cycles, while full subproof parallelization is enabled for repeated
1869 builds (according to parallel_subproofs_threshold).
1871 * System option "record_proofs" allows to change the global
1872 Proofterm.proofs variable for a session. Regular values are are 0, 1, 2;
1873 a negative value means the current state in the ML heap image remains
1876 * Isabelle settings variable ISABELLE_SCALA_BUILD_OPTIONS has been
1877 renamed to ISABELLE_SCALAC_OPTIONS. Rare INCOMPATIBILITY.
1879 * Isabelle settings variables ISABELLE_WINDOWS_PLATFORM,
1880 ISABELLE_WINDOWS_PLATFORM32, ISABELLE_WINDOWS_PLATFORM64 indicate the
1881 native Windows platform (independently of the Cygwin installation). This
1882 is analogous to ISABELLE_PLATFORM, ISABELLE_PLATFORM32,
1883 ISABELLE_PLATFORM64.
1885 * Command-line tool "isabelle build_docker" builds a Docker image from
1886 the Isabelle application bundle for Linux. See also
1887 https://hub.docker.com/r/makarius/isabelle
1889 * Command-line tool "isabelle vscode_server" provides a Language Server
1890 Protocol implementation, e.g. for the Visual Studio Code editor. It
1891 serves as example for alternative PIDE front-ends.
1893 * Command-line tool "isabelle imports" helps to maintain theory imports
1894 wrt. session structure. Examples for the main Isabelle distribution:
1896 isabelle imports -I -a
1897 isabelle imports -U -a
1898 isabelle imports -U -i -a
1899 isabelle imports -M -a -d '~~/src/Benchmarks'
1903 New in Isabelle2016-1 (December 2016)
1904 -------------------------------------
1908 * Splitter in proof methods "simp", "auto" and friends:
1909 - The syntax "split add" has been discontinued, use plain "split",
1911 - For situations with many conditional or case expressions, there is
1912 an alternative splitting strategy that can be much faster. It is
1913 selected by writing "split!" instead of "split". It applies safe
1914 introduction and elimination rules after each split rule. As a
1915 result the subgoal may be split into several subgoals.
1917 * Command 'bundle' provides a local theory target to define a bundle
1918 from the body of specification commands (such as 'declare',
1919 'declaration', 'notation', 'lemmas', 'lemma'). For example:
1927 * Command 'unbundle' is like 'include', but works within a local theory
1928 context. Unlike "context includes ... begin", the effect of 'unbundle'
1929 on the target context persists, until different declarations are given.
1931 * Simplified outer syntax: uniform category "name" includes long
1932 identifiers. Former "xname" / "nameref" / "name reference" has been
1935 * Embedded content (e.g. the inner syntax of types, terms, props) may be
1936 delimited uniformly via cartouches. This works better than old-fashioned
1937 quotes when sub-languages are nested.
1939 * Mixfix annotations support general block properties, with syntax
1940 "(\<open>x=a y=b z \<dots>\<close>". Notable property names are "indent", "consistent",
1941 "unbreakable", "markup". The existing notation "(DIGITS" is equivalent
1942 to "(\<open>indent=DIGITS\<close>". The former notation "(00" for unbreakable blocks
1943 is superseded by "(\<open>unbreabable\<close>" --- rare INCOMPATIBILITY.
1945 * Proof method "blast" is more robust wrt. corner cases of Pure
1946 statements without object-logic judgment.
1948 * Commands 'prf' and 'full_prf' are somewhat more informative (again):
1949 proof terms are reconstructed and cleaned from administrative thm nodes.
1951 * Code generator: config option "code_timing" triggers measurements of
1952 different phases of code generation. See src/HOL/ex/Code_Timing.thy for
1955 * Code generator: implicits in Scala (stemming from type class
1956 instances) are generated into companion object of corresponding type
1957 class, to resolve some situations where ambiguities may occur.
1959 * Solve direct: option "solve_direct_strict_warnings" gives explicit
1960 warnings for lemma statements with trivial proofs.
1963 *** Prover IDE -- Isabelle/Scala/jEdit ***
1965 * More aggressive flushing of machine-generated input, according to
1966 system option editor_generated_input_delay (in addition to existing
1967 editor_input_delay for regular user edits). This may affect overall PIDE
1968 reactivity and CPU usage.
1970 * Syntactic indentation according to Isabelle outer syntax. Action
1971 "indent-lines" (shortcut C+i) indents the current line according to
1972 command keywords and some command substructure. Action
1973 "isabelle.newline" (shortcut ENTER) indents the old and the new line
1974 according to command keywords only; see also option
1975 "jedit_indent_newline".
1977 * Semantic indentation for unstructured proof scripts ('apply' etc.) via
1978 number of subgoals. This requires information of ongoing document
1979 processing and may thus lag behind, when the user is editing too
1980 quickly; see also option "jedit_script_indent" and
1981 "jedit_script_indent_limit".
1983 * Refined folding mode "isabelle" based on Isar syntax: 'next' and 'qed'
1984 are treated as delimiters for fold structure; 'begin' and 'end'
1985 structure of theory specifications is treated as well.
1987 * Command 'proof' provides information about proof outline with cases,
1988 e.g. for proof methods "cases", "induct", "goal_cases".
1990 * Completion templates for commands involving "begin ... end" blocks,
1991 e.g. 'context', 'notepad'.
1993 * Sidekick parser "isabelle-context" shows nesting of context blocks
1994 according to 'begin' and 'end' structure.
1996 * Highlighting of entity def/ref positions wrt. cursor.
1998 * Action "isabelle.select-entity" (shortcut CS+ENTER) selects all
1999 occurrences of the formal entity at the caret position. This facilitates
2000 systematic renaming.
2002 * PIDE document markup works across multiple Isar commands, e.g. the
2003 results established at the end of a proof are properly identified in the
2006 * Cartouche abbreviations work both for " and ` to accomodate typical
2007 situations where old ASCII notation may be updated.
2009 * Dockable window "Symbols" also provides access to 'abbrevs' from the
2010 outer syntax of the current theory buffer. This provides clickable
2011 syntax templates, including entries with empty abbrevs name (which are
2012 inaccessible via keyboard completion).
2014 * IDE support for the Isabelle/Pure bootstrap process, with the
2015 following independent stages:
2020 src/Pure/ML_Bootstrap.thy
2022 The ML ROOT files act like quasi-theories in the context of theory
2023 ML_Bootstrap: this allows continuous checking of all loaded ML files.
2024 The theory files are presented with a modified header to import Pure
2025 from the running Isabelle instance. Results from changed versions of
2026 each stage are *not* propagated to the next stage, and isolated from the
2027 actual Isabelle/Pure that runs the IDE itself. The sequential
2028 dependencies of the above files are only observed for batch build.
2030 * Isabelle/ML and Standard ML files are presented in Sidekick with the
2031 tree structure of section headings: this special comment format is
2032 described in "implementation" chapter 0, e.g. (*** section ***).
2034 * Additional abbreviations for syntactic completion may be specified
2035 within the theory header as 'abbrevs'. The theory syntax for 'keywords'
2036 has been simplified accordingly: optional abbrevs need to go into the
2037 new 'abbrevs' section.
2039 * Global abbreviations via $ISABELLE_HOME/etc/abbrevs and
2040 $ISABELLE_HOME_USER/etc/abbrevs are no longer supported. Minor
2041 INCOMPATIBILITY, use 'abbrevs' within theory header instead.
2043 * Action "isabelle.keymap-merge" asks the user to resolve pending
2044 Isabelle keymap changes that are in conflict with the current jEdit
2045 keymap; non-conflicting changes are always applied implicitly. This
2046 action is automatically invoked on Isabelle/jEdit startup and thus
2047 increases chances that users see new keyboard shortcuts when re-using
2050 * ML and document antiquotations for file-systems paths are more uniform
2053 @{path NAME} -- no file-system check
2054 @{file NAME} -- check for plain file
2055 @{dir NAME} -- check for directory
2057 Minor INCOMPATIBILITY, former uses of @{file} and @{file_unchecked} may
2061 *** Document preparation ***
2063 * New symbol \<circle>, e.g. for temporal operator.
2065 * New document and ML antiquotation @{locale} for locales, similar to
2066 existing antiquotation @{class}.
2068 * Mixfix annotations support delimiters like \<^control>\<open>cartouche\<close> --
2069 this allows special forms of document output.
2071 * Raw LaTeX output now works via \<^latex>\<open>...\<close> instead of raw control
2072 symbol \<^raw:...>. INCOMPATIBILITY, notably for LaTeXsugar.thy and its
2075 * \<^raw:...> symbols are no longer supported.
2077 * Old 'header' command is no longer supported (legacy since
2083 * Many specification elements support structured statements with 'if' /
2084 'for' eigen-context, e.g. 'axiomatization', 'abbreviation',
2085 'definition', 'inductive', 'function'.
2087 * Toplevel theorem statements support eigen-context notation with 'if' /
2088 'for' (in postfix), which corresponds to 'assumes' / 'fixes' in the
2089 traditional long statement form (in prefix). Local premises are called
2090 "that" or "assms", respectively. Empty premises are *not* bound in the
2091 context: INCOMPATIBILITY.
2093 * Command 'define' introduces a local (non-polymorphic) definition, with
2094 optional abstraction over local parameters. The syntax resembles
2095 'definition' and 'obtain'. It fits better into the Isar language than
2096 old 'def', which is now a legacy feature.
2098 * Command 'obtain' supports structured statements with 'if' / 'for'
2101 * Command '\<proof>' is an alias for 'sorry', with different
2102 typesetting. E.g. to produce proof holes in examples and documentation.
2104 * The defining position of a literal fact \<open>prop\<close> is maintained more
2105 carefully, and made accessible as hyperlink in the Prover IDE.
2107 * Commands 'finally' and 'ultimately' used to expose the result as
2108 literal fact: this accidental behaviour has been discontinued. Rare
2109 INCOMPATIBILITY, use more explicit means to refer to facts in Isar.
2111 * Command 'axiomatization' has become more restrictive to correspond
2112 better to internal axioms as singleton facts with mandatory name. Minor
2115 * Proof methods may refer to the main facts via the dynamic fact
2116 "method_facts". This is particularly useful for Eisbach method
2119 * Proof method "use" allows to modify the main facts of a given method
2123 (use facts in \<open>simp add: ...\<close>)
2125 * The old proof method "default" has been removed (legacy since
2126 Isabelle2016). INCOMPATIBILITY, use "standard" instead.
2131 * Pure provides basic versions of proof methods "simp" and "simp_all"
2132 that only know about meta-equality (==). Potential INCOMPATIBILITY in
2133 theory imports that merge Pure with e.g. Main of Isabelle/HOL: the order
2134 is relevant to avoid confusion of Pure.simp vs. HOL.simp.
2136 * The command 'unfolding' and proof method "unfold" include a second
2137 stage where given equations are passed through the attribute "abs_def"
2138 before rewriting. This ensures that definitions are fully expanded,
2139 regardless of the actual parameters that are provided. Rare
2140 INCOMPATIBILITY in some corner cases: use proof method (simp only:)
2141 instead, or declare [[unfold_abs_def = false]] in the proof context.
2143 * Type-inference improves sorts of newly introduced type variables for
2144 the object-logic, using its base sort (i.e. HOL.type for Isabelle/HOL).
2145 Thus terms like "f x" or "\<And>x. P x" without any further syntactic context
2146 produce x::'a::type in HOL instead of x::'a::{} in Pure. Rare
2147 INCOMPATIBILITY, need to provide explicit type constraints for Pure
2148 types where this is really intended.
2153 * New proof method "argo" using the built-in Argo solver based on SMT
2154 technology. The method can be used to prove goals of quantifier-free
2155 propositional logic, goals based on a combination of quantifier-free
2156 propositional logic with equality, and goals based on a combination of
2157 quantifier-free propositional logic with linear real arithmetic
2158 including min/max/abs. See HOL/ex/Argo_Examples.thy for examples.
2160 * The new "nunchaku" command integrates the Nunchaku model finder. The
2161 tool is experimental. See ~~/src/HOL/Nunchaku/Nunchaku.thy for details.
2163 * Metis: The problem encoding has changed very slightly. This might
2164 break existing proofs. INCOMPATIBILITY.
2167 - The MaSh relevance filter is now faster than before.
2168 - Produce syntactically correct Vampire 4.0 problem files.
2170 * (Co)datatype package:
2171 - New commands for defining corecursive functions and reasoning about
2172 them in "~~/src/HOL/Library/BNF_Corec.thy": 'corec', 'corecursive',
2173 'friend_of_corec', and 'corecursion_upto'; and 'corec_unique' proof
2174 method. See 'isabelle doc corec'.
2175 - The predicator :: ('a \<Rightarrow> bool) \<Rightarrow> 'a F \<Rightarrow> bool is now a first-class
2176 citizen in bounded natural functors.
2177 - 'primrec' now allows nested calls through the predicator in addition
2178 to the map function.
2179 - 'bnf' automatically discharges reflexive proof obligations.
2180 - 'bnf' outputs a slightly modified proof obligation expressing rel in
2181 terms of map and set
2182 (not giving a specification for rel makes this one reflexive).
2183 - 'bnf' outputs a new proof obligation expressing pred in terms of set
2184 (not giving a specification for pred makes this one reflexive).
2185 INCOMPATIBILITY: manual 'bnf' declarations may need adjustment.
2187 rel_prod_apply ~> rel_prod_inject
2188 pred_prod_apply ~> pred_prod_inject
2190 - The "size" plugin has been made compatible again with locales.
2191 - The theorems about "rel" and "set" may have a slightly different (but
2195 * The 'coinductive' command produces a proper coinduction rule for
2196 mutual coinductive predicates. This new rule replaces the old rule,
2197 which exposed details of the internal fixpoint construction and was
2198 hard to use. INCOMPATIBILITY.
2200 * New abbreviations for negated existence (but not bounded existence):
2202 \<nexists>x. P x \<equiv> \<not> (\<exists>x. P x)
2203 \<nexists>!x. P x \<equiv> \<not> (\<exists>!x. P x)
2205 * The print mode "HOL" for ASCII syntax of binders "!", "?", "?!", "@"
2206 has been removed for output. It is retained for input only, until it is
2207 eliminated altogether.
2209 * The unique existence quantifier no longer provides 'binder' syntax,
2210 but uses syntax translations (as for bounded unique existence). Thus
2211 iterated quantification \<exists>!x y. P x y with its slightly confusing
2212 sequential meaning \<exists>!x. \<exists>!y. P x y is no longer possible. Instead,
2213 pattern abstraction admits simultaneous unique existence \<exists>!(x, y). P x y
2214 (analogous to existing notation \<exists>!(x, y)\<in>A. P x y). Potential
2215 INCOMPATIBILITY in rare situations.
2217 * Conventional syntax "%(). t" for unit abstractions. Slight syntactic
2220 * Renamed constants and corresponding theorems:
2225 listprod ~> prod_list
2229 * Sligthly more standardized theorem names:
2230 sgn_times ~> sgn_mult
2231 sgn_mult' ~> Real_Vector_Spaces.sgn_mult
2232 divide_zero_left ~> div_0
2233 zero_mod_left ~> mod_0
2234 divide_zero ~> div_by_0
2235 divide_1 ~> div_by_1
2236 nonzero_mult_divide_cancel_left ~> nonzero_mult_div_cancel_left
2237 div_mult_self1_is_id ~> nonzero_mult_div_cancel_left
2238 nonzero_mult_divide_cancel_right ~> nonzero_mult_div_cancel_right
2239 div_mult_self2_is_id ~> nonzero_mult_div_cancel_right
2240 is_unit_divide_mult_cancel_left ~> is_unit_div_mult_cancel_left
2241 is_unit_divide_mult_cancel_right ~> is_unit_div_mult_cancel_right
2242 mod_div_equality ~> div_mult_mod_eq
2243 mod_div_equality2 ~> mult_div_mod_eq
2244 mod_div_equality3 ~> mod_div_mult_eq
2245 mod_div_equality4 ~> mod_mult_div_eq
2246 minus_div_eq_mod ~> minus_div_mult_eq_mod
2247 minus_div_eq_mod2 ~> minus_mult_div_eq_mod
2248 minus_mod_eq_div ~> minus_mod_eq_div_mult
2249 minus_mod_eq_div2 ~> minus_mod_eq_mult_div
2250 div_mod_equality' ~> minus_mod_eq_div_mult [symmetric]
2251 mod_div_equality' ~> minus_div_mult_eq_mod [symmetric]
2252 zmod_zdiv_equality ~> mult_div_mod_eq [symmetric]
2253 zmod_zdiv_equality' ~> minus_div_mult_eq_mod [symmetric]
2254 Divides.mult_div_cancel ~> minus_mod_eq_mult_div [symmetric]
2255 mult_div_cancel ~> minus_mod_eq_mult_div [symmetric]
2256 zmult_div_cancel ~> minus_mod_eq_mult_div [symmetric]
2257 div_1 ~> div_by_Suc_0
2258 mod_1 ~> mod_by_Suc_0
2261 * New type class "idom_abs_sgn" specifies algebraic properties
2262 of sign and absolute value functions. Type class "sgn_if" has
2263 disappeared. Slight INCOMPATIBILITY.
2265 * Dedicated syntax LENGTH('a) for length of types.
2267 * Characters (type char) are modelled as finite algebraic type
2268 corresponding to {0..255}.
2270 - Logical representation:
2271 * 0 is instantiated to the ASCII zero character.
2272 * All other characters are represented as "Char n"
2273 with n being a raw numeral expression less than 256.
2274 * Expressions of the form "Char n" with n greater than 255
2276 - Printing and parsing:
2277 * Printable characters are printed and parsed as "CHR ''\<dots>''"
2279 * The ASCII zero character is printed and parsed as "0".
2280 * All other canonical characters are printed as "CHR 0xXX"
2281 with XX being the hexadecimal character code. "CHR n"
2282 is parsable for every numeral expression n.
2283 * Non-canonical characters have no special syntax and are
2284 printed as their logical representation.
2285 - Explicit conversions from and to the natural numbers are
2286 provided as char_of_nat, nat_of_char (as before).
2287 - The auxiliary nibble type has been discontinued.
2291 * Type class "div" with operation "mod" renamed to type class "modulo"
2292 with operation "modulo", analogously to type class "divide". This
2293 eliminates the need to qualify any of those names in the presence of
2294 infix "mod" syntax. INCOMPATIBILITY.
2296 * Statements and proofs of Knaster-Tarski fixpoint combinators lfp/gfp
2297 have been clarified. The fixpoint properties are lfp_fixpoint, its
2298 symmetric lfp_unfold (as before), and the duals for gfp. Auxiliary items
2299 for the proof (lfp_lemma2 etc.) are no longer exported, but can be
2300 easily recovered by composition with eq_refl. Minor INCOMPATIBILITY.
2302 * Constant "surj" is a mere input abbreviation, to avoid hiding an
2303 equation in term output. Minor INCOMPATIBILITY.
2305 * Command 'code_reflect' accepts empty constructor lists for datatypes,
2306 which renders those abstract effectively.
2308 * Command 'export_code' checks given constants for abstraction
2309 violations: a small guarantee that given constants specify a safe
2310 interface for the generated code.
2312 * Code generation for Scala: ambiguous implicts in class diagrams are
2313 spelt out explicitly.
2315 * Static evaluators (Code_Evaluation.static_* in Isabelle/ML) rely on
2316 explicitly provided auxiliary definitions for required type class
2317 dictionaries rather than half-working magic. INCOMPATIBILITY, see the
2318 tutorial on code generation for details.
2320 * Theory Set_Interval: substantial new theorems on indexed sums and
2323 * Locale bijection establishes convenient default simp rules such as
2324 "inv f (f a) = a" for total bijections.
2326 * Abstract locales semigroup, abel_semigroup, semilattice,
2327 semilattice_neutr, ordering, ordering_top, semilattice_order,
2328 semilattice_neutr_order, comm_monoid_set, semilattice_set,
2329 semilattice_neutr_set, semilattice_order_set,
2330 semilattice_order_neutr_set monoid_list, comm_monoid_list,
2331 comm_monoid_list_set, comm_monoid_mset, comm_monoid_fun use boldified
2332 syntax uniformly that does not clash with corresponding global syntax.
2335 * Former locale lifting_syntax is now a bundle, which is easier to
2336 include in a local context or theorem statement, e.g. "context includes
2337 lifting_syntax begin ... end". Minor INCOMPATIBILITY.
2339 * Some old / obsolete theorems have been renamed / removed, potential
2342 nat_less_cases -- removed, use linorder_cases instead
2343 inv_image_comp -- removed, use image_inv_f_f instead
2344 image_surj_f_inv_f ~> image_f_inv_f
2346 * Some theorems about groups and orders have been generalised from
2347 groups to semi-groups that are also monoids:
2350 less_add_same_cancel1
2351 less_add_same_cancel2
2354 add_less_same_cancel1
2355 add_less_same_cancel2
2357 * Some simplifications theorems about rings have been removed, since
2358 superseeded by a more general version:
2359 less_add_cancel_left_greater_zero ~> less_add_same_cancel1
2360 less_add_cancel_right_greater_zero ~> less_add_same_cancel2
2361 less_eq_add_cancel_left_greater_eq_zero ~> le_add_same_cancel1
2362 less_eq_add_cancel_right_greater_eq_zero ~> le_add_same_cancel2
2363 less_eq_add_cancel_left_less_eq_zero ~> add_le_same_cancel1
2364 less_eq_add_cancel_right_less_eq_zero ~> add_le_same_cancel2
2365 less_add_cancel_left_less_zero ~> add_less_same_cancel1
2366 less_add_cancel_right_less_zero ~> add_less_same_cancel2
2369 * Renamed split_if -> if_split and split_if_asm -> if_split_asm to
2370 resemble the f.split naming convention, INCOMPATIBILITY.
2372 * Added class topological_monoid.
2374 * The following theorems have been renamed:
2376 setsum_left_distrib ~> sum_distrib_right
2377 setsum_right_distrib ~> sum_distrib_left
2381 * Compound constants INFIMUM and SUPREMUM are mere abbreviations now.
2384 * "Gcd (f ` A)" and "Lcm (f ` A)" are printed with optional
2385 comprehension-like syntax analogously to "Inf (f ` A)" and "Sup (f `
2388 * Class semiring_Lcd merged into semiring_Gcd. INCOMPATIBILITY.
2390 * The type class ordered_comm_monoid_add is now called
2391 ordered_cancel_comm_monoid_add. A new type class ordered_comm_monoid_add
2392 is introduced as the combination of ordered_ab_semigroup_add +
2393 comm_monoid_add. INCOMPATIBILITY.
2395 * Introduced the type classes canonically_ordered_comm_monoid_add and
2398 * Introduced the type class ordered_ab_semigroup_monoid_add_imp_le. When
2399 instantiating linordered_semiring_strict and ordered_ab_group_add, an
2400 explicit instantiation of ordered_ab_semigroup_monoid_add_imp_le might
2401 be required. INCOMPATIBILITY.
2403 * Dropped various legacy fact bindings, whose replacements are often
2404 of a more general type also:
2405 lcm_left_commute_nat ~> lcm.left_commute
2406 lcm_left_commute_int ~> lcm.left_commute
2407 gcd_left_commute_nat ~> gcd.left_commute
2408 gcd_left_commute_int ~> gcd.left_commute
2409 gcd_greatest_iff_nat ~> gcd_greatest_iff
2410 gcd_greatest_iff_int ~> gcd_greatest_iff
2411 coprime_dvd_mult_nat ~> coprime_dvd_mult
2412 coprime_dvd_mult_int ~> coprime_dvd_mult
2413 zpower_numeral_even ~> power_numeral_even
2414 gcd_mult_cancel_nat ~> gcd_mult_cancel
2415 gcd_mult_cancel_int ~> gcd_mult_cancel
2416 div_gcd_coprime_nat ~> div_gcd_coprime
2417 div_gcd_coprime_int ~> div_gcd_coprime
2418 zpower_numeral_odd ~> power_numeral_odd
2419 zero_less_int_conv ~> of_nat_0_less_iff
2420 gcd_greatest_nat ~> gcd_greatest
2421 gcd_greatest_int ~> gcd_greatest
2422 coprime_mult_nat ~> coprime_mult
2423 coprime_mult_int ~> coprime_mult
2424 lcm_commute_nat ~> lcm.commute
2425 lcm_commute_int ~> lcm.commute
2426 int_less_0_conv ~> of_nat_less_0_iff
2427 gcd_commute_nat ~> gcd.commute
2428 gcd_commute_int ~> gcd.commute
2429 Gcd_insert_nat ~> Gcd_insert
2430 Gcd_insert_int ~> Gcd_insert
2431 of_int_int_eq ~> of_int_of_nat_eq
2432 lcm_least_nat ~> lcm_least
2433 lcm_least_int ~> lcm_least
2434 lcm_assoc_nat ~> lcm.assoc
2435 lcm_assoc_int ~> lcm.assoc
2436 int_le_0_conv ~> of_nat_le_0_iff
2437 int_eq_0_conv ~> of_nat_eq_0_iff
2438 Gcd_empty_nat ~> Gcd_empty
2439 Gcd_empty_int ~> Gcd_empty
2440 gcd_assoc_nat ~> gcd.assoc
2441 gcd_assoc_int ~> gcd.assoc
2442 zero_zle_int ~> of_nat_0_le_iff
2443 lcm_dvd2_nat ~> dvd_lcm2
2444 lcm_dvd2_int ~> dvd_lcm2
2445 lcm_dvd1_nat ~> dvd_lcm1
2446 lcm_dvd1_int ~> dvd_lcm1
2447 gcd_zero_nat ~> gcd_eq_0_iff
2448 gcd_zero_int ~> gcd_eq_0_iff
2449 gcd_dvd2_nat ~> gcd_dvd2
2450 gcd_dvd2_int ~> gcd_dvd2
2451 gcd_dvd1_nat ~> gcd_dvd1
2452 gcd_dvd1_int ~> gcd_dvd1
2453 int_numeral ~> of_nat_numeral
2454 lcm_ac_nat ~> ac_simps
2455 lcm_ac_int ~> ac_simps
2456 gcd_ac_nat ~> ac_simps
2457 gcd_ac_int ~> ac_simps
2458 abs_int_eq ~> abs_of_nat
2459 zless_int ~> of_nat_less_iff
2460 zdiff_int ~> of_nat_diff
2461 zadd_int ~> of_nat_add
2462 int_mult ~> of_nat_mult
2463 int_Suc ~> of_nat_Suc
2464 inj_int ~> inj_of_nat
2467 Lcm_empty_nat ~> Lcm_empty
2468 Lcm_empty_int ~> Lcm_empty
2469 Lcm_insert_nat ~> Lcm_insert
2470 Lcm_insert_int ~> Lcm_insert
2471 comp_fun_idem_gcd_nat ~> comp_fun_idem_gcd
2472 comp_fun_idem_gcd_int ~> comp_fun_idem_gcd
2473 comp_fun_idem_lcm_nat ~> comp_fun_idem_lcm
2474 comp_fun_idem_lcm_int ~> comp_fun_idem_lcm
2475 Lcm_eq_0 ~> Lcm_eq_0_I
2476 Lcm0_iff ~> Lcm_0_iff
2477 Lcm_dvd_int ~> Lcm_least
2478 divides_mult_nat ~> divides_mult
2479 divides_mult_int ~> divides_mult
2480 lcm_0_nat ~> lcm_0_right
2481 lcm_0_int ~> lcm_0_right
2482 lcm_0_left_nat ~> lcm_0_left
2483 lcm_0_left_int ~> lcm_0_left
2484 dvd_gcd_D1_nat ~> dvd_gcdD1
2485 dvd_gcd_D1_int ~> dvd_gcdD1
2486 dvd_gcd_D2_nat ~> dvd_gcdD2
2487 dvd_gcd_D2_int ~> dvd_gcdD2
2488 coprime_dvd_mult_iff_nat ~> coprime_dvd_mult_iff
2489 coprime_dvd_mult_iff_int ~> coprime_dvd_mult_iff
2490 realpow_minus_mult ~> power_minus_mult
2491 realpow_Suc_le_self ~> power_Suc_le_self
2492 dvd_Gcd, dvd_Gcd_nat, dvd_Gcd_int removed in favour of Gcd_greatest
2495 * Renamed HOL/Quotient_Examples/FSet.thy to
2496 HOL/Quotient_Examples/Quotient_FSet.thy INCOMPATIBILITY.
2498 * Session HOL-Library: theory FinFun bundles "finfun_syntax" and
2499 "no_finfun_syntax" allow to control optional syntax in local contexts;
2500 this supersedes former theory FinFun_Syntax. INCOMPATIBILITY, e.g. use
2501 "unbundle finfun_syntax" to imitate import of
2502 "~~/src/HOL/Library/FinFun_Syntax".
2504 * Session HOL-Library: theory Multiset_Permutations (executably) defines
2505 the set of permutations of a given set or multiset, i.e. the set of all
2506 lists that contain every element of the carrier (multi-)set exactly
2509 * Session HOL-Library: multiset membership is now expressed using
2510 set_mset rather than count.
2512 - Expressions "count M a > 0" and similar simplify to membership
2515 - Converting between "count M a = 0" and non-membership happens using
2516 equations count_eq_zero_iff and not_in_iff.
2518 - Rules count_inI and in_countE obtain facts of the form
2519 "count M a = n" from membership.
2521 - Rules count_in_diffI and in_diff_countE obtain facts of the form
2522 "count M a = n + count N a" from membership on difference sets.
2526 * Session HOL-Library: theory LaTeXsugar uses new-style "dummy_pats" for
2527 displaying equations in functional programming style --- variables
2528 present on the left-hand but not on the righ-hand side are replaced by
2531 * Session HOL-Library: theory Combinator_PER provides combinator to
2532 build partial equivalence relations from a predicate and an equivalence
2535 * Session HOL-Library: theory Perm provides basic facts about almost
2536 everywhere fix bijections.
2538 * Session HOL-Library: theory Normalized_Fraction allows viewing an
2539 element of a field of fractions as a normalized fraction (i.e. a pair of
2540 numerator and denominator such that the two are coprime and the
2541 denominator is normalized wrt. unit factors).
2543 * Session HOL-NSA has been renamed to HOL-Nonstandard_Analysis.
2545 * Session HOL-Multivariate_Analysis has been renamed to HOL-Analysis.
2547 * Session HOL-Analysis: measure theory has been moved here from
2548 HOL-Probability. When importing HOL-Analysis some theorems need
2549 additional name spaces prefixes due to name clashes. INCOMPATIBILITY.
2551 * Session HOL-Analysis: more complex analysis including Cauchy's
2552 inequality, Liouville theorem, open mapping theorem, maximum modulus
2553 principle, Residue theorem, Schwarz Lemma.
2555 * Session HOL-Analysis: Theory of polyhedra: faces, extreme points,
2556 polytopes, and the Krein–Milman Minkowski theorem.
2558 * Session HOL-Analysis: Numerous results ported from the HOL Light
2559 libraries: homeomorphisms, continuous function extensions, invariance of
2562 * Session HOL-Probability: the type of emeasure and nn_integral was
2563 changed from ereal to ennreal, INCOMPATIBILITY.
2565 emeasure :: 'a measure \<Rightarrow> 'a set \<Rightarrow> ennreal
2566 nn_integral :: 'a measure \<Rightarrow> ('a \<Rightarrow> ennreal) \<Rightarrow> ennreal
2568 * Session HOL-Probability: Code generation and QuickCheck for
2569 Probability Mass Functions.
2571 * Session HOL-Probability: theory Random_Permutations contains some
2572 theory about choosing a permutation of a set uniformly at random and
2573 folding over a list in random order.
2575 * Session HOL-Probability: theory SPMF formalises discrete
2576 subprobability distributions.
2578 * Session HOL-Library: the names of multiset theorems have been
2579 normalised to distinguish which ordering the theorems are about
2581 mset_less_eqI ~> mset_subset_eqI
2582 mset_less_insertD ~> mset_subset_insertD
2583 mset_less_eq_count ~> mset_subset_eq_count
2584 mset_less_diff_self ~> mset_subset_diff_self
2585 mset_le_exists_conv ~> mset_subset_eq_exists_conv
2586 mset_le_mono_add_right_cancel ~> mset_subset_eq_mono_add_right_cancel
2587 mset_le_mono_add_left_cancel ~> mset_subset_eq_mono_add_left_cancel
2588 mset_le_mono_add ~> mset_subset_eq_mono_add
2589 mset_le_add_left ~> mset_subset_eq_add_left
2590 mset_le_add_right ~> mset_subset_eq_add_right
2591 mset_le_single ~> mset_subset_eq_single
2592 mset_le_multiset_union_diff_commute ~> mset_subset_eq_multiset_union_diff_commute
2593 diff_le_self ~> diff_subset_eq_self
2594 mset_leD ~> mset_subset_eqD
2595 mset_lessD ~> mset_subsetD
2596 mset_le_insertD ~> mset_subset_eq_insertD
2597 mset_less_of_empty ~> mset_subset_of_empty
2598 mset_less_size ~> mset_subset_size
2599 wf_less_mset_rel ~> wf_subset_mset_rel
2600 count_le_replicate_mset_le ~> count_le_replicate_mset_subset_eq
2601 mset_remdups_le ~> mset_remdups_subset_eq
2602 ms_lesseq_impl ~> subset_eq_mset_impl
2604 Some functions have been renamed:
2605 ms_lesseq_impl -> subset_eq_mset_impl
2607 * HOL-Library: multisets are now ordered with the multiset ordering
2608 #\<subseteq># ~> \<le>
2610 le_multiset ~> less_eq_multiset
2611 less_multiset ~> le_multiset
2614 * Session HOL-Library: the prefix multiset_order has been discontinued:
2615 the theorems can be directly accessed. As a consequence, the lemmas
2616 "order_multiset" and "linorder_multiset" have been discontinued, and the
2617 interpretations "multiset_linorder" and "multiset_wellorder" have been
2618 replaced by instantiations. INCOMPATIBILITY.
2620 * Session HOL-Library: some theorems about the multiset ordering have
2623 le_multiset_def ~> less_eq_multiset_def
2624 less_multiset_def ~> le_multiset_def
2625 less_eq_imp_le_multiset ~> subset_eq_imp_le_multiset
2626 mult_less_not_refl ~> mset_le_not_refl
2627 mult_less_trans ~> mset_le_trans
2628 mult_less_not_sym ~> mset_le_not_sym
2629 mult_less_asym ~> mset_le_asym
2630 mult_less_irrefl ~> mset_le_irrefl
2631 union_less_mono2{,1,2} ~> union_le_mono2{,1,2}
2633 le_multiset\<^sub>H\<^sub>O ~> less_eq_multiset\<^sub>H\<^sub>O
2634 le_multiset_total ~> less_eq_multiset_total
2635 less_multiset_right_total ~> subset_eq_imp_le_multiset
2636 le_multiset_empty_left ~> less_eq_multiset_empty_left
2637 le_multiset_empty_right ~> less_eq_multiset_empty_right
2638 less_multiset_empty_right ~> le_multiset_empty_left
2639 less_multiset_empty_left ~> le_multiset_empty_right
2640 union_less_diff_plus ~> union_le_diff_plus
2641 ex_gt_count_imp_less_multiset ~> ex_gt_count_imp_le_multiset
2642 less_multiset_plus_left_nonempty ~> le_multiset_plus_left_nonempty
2643 le_multiset_plus_right_nonempty ~> le_multiset_plus_right_nonempty
2646 * Session HOL-Library: the lemma mset_map has now the attribute [simp].
2649 * Session HOL-Library: some theorems about multisets have been removed.
2650 INCOMPATIBILITY, use the following replacements:
2652 le_multiset_plus_plus_left_iff ~> add_less_cancel_right
2653 less_multiset_plus_plus_left_iff ~> add_less_cancel_right
2654 le_multiset_plus_plus_right_iff ~> add_less_cancel_left
2655 less_multiset_plus_plus_right_iff ~> add_less_cancel_left
2656 add_eq_self_empty_iff ~> add_cancel_left_right
2657 mset_subset_add_bothsides ~> subset_mset.add_less_cancel_right
2658 mset_less_add_bothsides ~> subset_mset.add_less_cancel_right
2659 mset_le_add_bothsides ~> subset_mset.add_less_cancel_right
2660 empty_inter ~> subset_mset.inf_bot_left
2661 inter_empty ~> subset_mset.inf_bot_right
2662 empty_sup ~> subset_mset.sup_bot_left
2663 sup_empty ~> subset_mset.sup_bot_right
2664 bdd_below_multiset ~> subset_mset.bdd_above_bot
2665 subset_eq_empty ~> subset_mset.le_zero_eq
2666 le_empty ~> subset_mset.le_zero_eq
2667 mset_subset_empty_nonempty ~> subset_mset.zero_less_iff_neq_zero
2668 mset_less_empty_nonempty ~> subset_mset.zero_less_iff_neq_zero
2670 * Session HOL-Library: some typeclass constraints about multisets have
2671 been reduced from ordered or linordered to preorder. Multisets have the
2672 additional typeclasses order_bot, no_top,
2673 ordered_ab_semigroup_add_imp_le, ordered_cancel_comm_monoid_add,
2674 linordered_cancel_ab_semigroup_add, and
2675 ordered_ab_semigroup_monoid_add_imp_le. INCOMPATIBILITY.
2677 * Session HOL-Library: there are some new simplification rules about
2678 multisets, the multiset ordering, and the subset ordering on multisets.
2681 * Session HOL-Library: the subset ordering on multisets has now the
2682 interpretations ordered_ab_semigroup_monoid_add_imp_le and
2683 bounded_lattice_bot. INCOMPATIBILITY.
2685 * Session HOL-Library, theory Multiset: single has been removed in favor
2686 of add_mset that roughly corresponds to Set.insert. Some theorems have
2689 single_not_empty ~> add_mset_not_empty or empty_not_add_mset
2690 fold_mset_insert ~> fold_mset_add_mset
2691 image_mset_insert ~> image_mset_add_mset
2692 union_single_eq_diff
2693 multi_self_add_other_not_self
2694 diff_single_eq_union
2697 * Session HOL-Library, theory Multiset: some theorems have been changed
2698 to use add_mset instead of single:
2701 multi_self_add_other_not_self
2702 diff_single_eq_union
2703 union_single_eq_diff
2704 union_single_eq_member
2709 multiset_add_sub_el_shuffle
2710 mset_subset_eq_insertD
2712 insert_subset_eq_iff
2713 insert_union_subset_iff
2714 multi_psub_of_add_self
2723 size_eq_Suc_imp_eq_union
2724 multi_nonempty_split
2729 mset_zip_take_Cons_drop_twice
2735 le_multiset_right_total
2737 multiset_induct2_size
2741 * Session HOL-Library, theory Multiset: the definitions of some
2742 constants have changed to use add_mset instead of adding a single
2755 * Session HOL-Library, theory Multiset: due to the above changes, the
2756 attributes of some multiset theorems have been changed:
2758 insert_DiffM [] ~> [simp]
2759 insert_DiffM2 [simp] ~> []
2760 diff_add_mset_swap [simp]
2761 fold_mset_add_mset [simp]
2762 diff_diff_add [simp] (for multisets only)
2763 diff_cancel [simp] ~> []
2764 count_single [simp] ~> []
2765 set_mset_single [simp] ~> []
2766 size_multiset_single [simp] ~> []
2767 size_single [simp] ~> []
2768 image_mset_single [simp] ~> []
2769 mset_subset_eq_mono_add_right_cancel [simp] ~> []
2770 mset_subset_eq_mono_add_left_cancel [simp] ~> []
2771 fold_mset_single [simp] ~> []
2772 subset_eq_empty [simp] ~> []
2773 empty_sup [simp] ~> []
2774 sup_empty [simp] ~> []
2775 inter_empty [simp] ~> []
2776 empty_inter [simp] ~> []
2779 * Session HOL-Library, theory Multiset: the order of the variables in
2780 the second cases of multiset_induct, multiset_induct2_size,
2781 multiset_induct2 has been changed (e.g. Add A a ~> Add a A).
2784 * Session HOL-Library, theory Multiset: there is now a simplification
2785 procedure on multisets. It mimics the behavior of the procedure on
2786 natural numbers. INCOMPATIBILITY.
2788 * Session HOL-Library, theory Multiset: renamed sums and products of
2792 msetprod ~> prod_mset
2794 * Session HOL-Library, theory Multiset: the notation for intersection
2795 and union of multisets have been changed:
2797 #\<inter> ~> \<inter>#
2798 #\<union> ~> \<union>#
2802 * Session HOL-Library, theory Multiset: the lemma
2803 one_step_implies_mult_aux on multisets has been removed, use
2804 one_step_implies_mult instead. INCOMPATIBILITY.
2806 * Session HOL-Library: theory Complete_Partial_Order2 provides reasoning
2807 support for monotonicity and continuity in chain-complete partial orders
2808 and about admissibility conditions for fixpoint inductions.
2810 * Session HOL-Library: theory Library/Polynomial contains also
2811 derivation of polynomials (formerly in Library/Poly_Deriv) but not
2812 gcd/lcm on polynomials over fields. This has been moved to a separate
2813 theory Library/Polynomial_GCD_euclidean.thy, to pave way for a possible
2814 future different type class instantiation for polynomials over factorial
2815 rings. INCOMPATIBILITY.
2817 * Session HOL-Library: theory Sublist provides function "prefixes" with
2818 the following renaming
2821 prefix -> strict_prefix
2823 suffix -> strict_suffix
2825 Added theory of longest common prefixes.
2827 * Session HOL-Number_Theory: algebraic foundation for primes:
2828 Generalisation of predicate "prime" and introduction of predicates
2829 "prime_elem", "irreducible", a "prime_factorization" function, and the
2830 "factorial_ring" typeclass with instance proofs for nat, int, poly. Some
2831 theorems now have different names, most notably "prime_def" is now
2832 "prime_nat_iff". INCOMPATIBILITY.
2834 * Session Old_Number_Theory has been removed, after porting remaining
2837 * Session HOL-Types_To_Sets provides an experimental extension of
2838 Higher-Order Logic to allow translation of types to sets.
2843 * Integer.gcd and Integer.lcm use efficient operations from the Poly/ML
2844 library (notably for big integers). Subtle change of semantics:
2845 Integer.gcd and Integer.lcm both normalize the sign, results are never
2846 negative. This coincides with the definitions in HOL/GCD.thy.
2849 * Structure Rat for rational numbers is now an integral part of
2850 Isabelle/ML, with special notation @int/nat or @int for numerals (an
2851 abbreviation for antiquotation @{Pure.rat argument}) and ML pretty
2852 printing. Standard operations on type Rat.rat are provided via ad-hoc
2853 overloading of + - * / < <= > >= ~ abs. INCOMPATIBILITY, need to
2854 use + instead of +/ etc. Moreover, exception Rat.DIVZERO has been
2855 superseded by General.Div.
2857 * ML antiquotation @{path} is superseded by @{file}, which ensures that
2858 the argument is a plain file. Minor INCOMPATIBILITY.
2860 * Antiquotation @{make_string} is available during Pure bootstrap --
2861 with approximative output quality.
2863 * Low-level ML system structures (like PolyML and RunCall) are no longer
2864 exposed to Isabelle/ML user-space. Potential INCOMPATIBILITY.
2866 * The ML function "ML" provides easy access to run-time compilation.
2867 This is particularly useful for conditional compilation, without
2868 requiring separate files.
2870 * Option ML_exception_debugger controls detailed exception trace via the
2871 Poly/ML debugger. Relevant ML modules need to be compiled beforehand
2872 with ML_file_debug, or with ML_file and option ML_debugger enabled. Note
2873 debugger information requires consirable time and space: main
2874 Isabelle/HOL with full debugger support may need ML_system_64.
2876 * Local_Theory.restore has been renamed to Local_Theory.reset to
2877 emphasize its disruptive impact on the cumulative context, notably the
2878 scope of 'private' or 'qualified' names. Note that Local_Theory.reset is
2879 only appropriate when targets are managed, e.g. starting from a global
2880 theory and returning to it. Regular definitional packages should use
2881 balanced blocks of Local_Theory.open_target versus
2882 Local_Theory.close_target instead. Rare INCOMPATIBILITY.
2884 * Structure TimeLimit (originally from the SML/NJ library) has been
2885 replaced by structure Timeout, with slightly different signature.
2888 * Discontinued cd and pwd operations, which are not well-defined in a
2889 multi-threaded environment. Note that files are usually located
2890 relatively to the master directory of a theory (see also
2891 File.full_path). Potential INCOMPATIBILITY.
2893 * Binding.empty_atts supersedes Thm.empty_binding and
2894 Attrib.empty_binding. Minor INCOMPATIBILITY.
2899 * SML/NJ and old versions of Poly/ML are no longer supported.
2901 * Poly/ML heaps now follow the hierarchy of sessions, and thus require
2902 much less disk space.
2904 * The Isabelle ML process is now managed directly by Isabelle/Scala, and
2905 shell scripts merely provide optional command-line access. In
2908 . Scala module ML_Process to connect to the raw ML process,
2909 with interaction via stdin/stdout/stderr or in batch mode;
2910 . command-line tool "isabelle console" as interactive wrapper;
2911 . command-line tool "isabelle process" as batch mode wrapper.
2913 * The executable "isabelle_process" has been discontinued. Tools and
2914 prover front-ends should use ML_Process or Isabelle_Process in
2915 Isabelle/Scala. INCOMPATIBILITY.
2917 * New command-line tool "isabelle process" supports ML evaluation of
2918 literal expressions (option -e) or files (option -f) in the context of a
2919 given heap image. Errors lead to premature exit of the ML process with
2922 * The command-line tool "isabelle build" supports option -N for cyclic
2923 shuffling of NUMA CPU nodes. This may help performance tuning on Linux
2924 servers with separate CPU/memory modules.
2926 * System option "threads" (for the size of the Isabelle/ML thread farm)
2927 is also passed to the underlying ML runtime system as --gcthreads,
2928 unless there is already a default provided via ML_OPTIONS settings.
2930 * System option "checkpoint" helps to fine-tune the global heap space
2931 management of isabelle build. This is relevant for big sessions that may
2932 exhaust the small 32-bit address space of the ML process (which is used
2935 * System option "profiling" specifies the mode for global ML profiling
2936 in "isabelle build". Possible values are "time", "allocations". The
2937 command-line tool "isabelle profiling_report" helps to digest the
2938 resulting log files.
2940 * System option "ML_process_policy" specifies an optional command prefix
2941 for the underlying ML process, e.g. to control CPU affinity on
2942 multiprocessor systems. The "isabelle jedit" tool allows to override the
2943 implicit default via option -p.
2945 * Command-line tool "isabelle console" provides option -r to help to
2946 bootstrapping Isabelle/Pure interactively.
2948 * Command-line tool "isabelle yxml" has been discontinued.
2949 INCOMPATIBILITY, use operations from the modules "XML" and "YXML" in
2950 Isabelle/ML or Isabelle/Scala.
2952 * Many Isabelle tools that require a Java runtime system refer to the
2953 settings ISABELLE_TOOL_JAVA_OPTIONS32 / ISABELLE_TOOL_JAVA_OPTIONS64,
2954 depending on the underlying platform. The settings for "isabelle build"
2955 ISABELLE_BUILD_JAVA_OPTIONS32 / ISABELLE_BUILD_JAVA_OPTIONS64 have been
2956 discontinued. Potential INCOMPATIBILITY.
2958 * The Isabelle system environment always ensures that the main
2959 executables are found within the shell search $PATH: "isabelle" and
2960 "isabelle_scala_script".
2962 * Isabelle tools may consist of .scala files: the Scala compiler is
2963 invoked on the spot. The source needs to define some object that extends
2966 * File.bash_string, File.bash_path etc. represent Isabelle/ML and
2967 Isabelle/Scala strings authentically within GNU bash. This is useful to
2968 produce robust shell scripts under program control, without worrying
2969 about spaces or special characters. Note that user output works via
2970 Path.print (ML) or Path.toString (Scala). INCOMPATIBILITY, the old (and
2971 less versatile) operations File.shell_quote, File.shell_path etc. have
2974 * The isabelle_java executable allows to run a Java process within the
2975 name space of Java and Scala components that are bundled with Isabelle,
2976 but without the Isabelle settings environment.
2978 * Isabelle/Scala: the SSH module supports ssh and sftp connections, for
2979 remote command-execution and file-system access. This resembles
2980 operations from module File and Isabelle_System to some extent. Note
2981 that Path specifications need to be resolved remotely via
2982 ssh.remote_path instead of File.standard_path: the implicit process
2983 environment is different, Isabelle settings are not available remotely.
2985 * Isabelle/Scala: the Mercurial module supports repositories via the
2986 regular hg command-line interface. The repositroy clone and working
2987 directory may reside on a local or remote file-system (via ssh
2992 New in Isabelle2016 (February 2016)
2993 -----------------------------------
2997 * Eisbach is now based on Pure instead of HOL. Objects-logics may import
2998 either the theory ~~/src/HOL/Eisbach/Eisbach (for HOL etc.) or
2999 ~~/src/HOL/Eisbach/Eisbach_Old_Appl_Syntax (for FOL, ZF etc.). Note that
3000 the HOL-Eisbach session located in ~~/src/HOL/Eisbach/ contains further
3001 examples that do require HOL.
3003 * Better resource usage on all platforms (Linux, Windows, Mac OS X) for
3004 both Isabelle/ML and Isabelle/Scala. Slightly reduced heap space usage.
3006 * Former "xsymbols" syntax with Isabelle symbols is used by default,
3007 without any special print mode. Important ASCII replacement syntax
3008 remains available under print mode "ASCII", but less important syntax
3009 has been removed (see below).
3011 * Support for more arrow symbols, with rendering in LaTeX and Isabelle
3012 fonts: \<Lleftarrow> \<Rrightarrow> \<longlongleftarrow> \<longlongrightarrow> \<longlonglongleftarrow> \<longlonglongrightarrow>.
3014 * Special notation \<struct> for the first implicit 'structure' in the
3015 context has been discontinued. Rare INCOMPATIBILITY, use explicit
3016 structure name instead, notably in indexed notation with block-subscript
3017 (e.g. \<odot>\<^bsub>A\<^esub>).
3019 * The glyph for \<diamond> in the IsabelleText font now corresponds better to its
3020 counterpart \<box> as quantifier-like symbol. A small diamond is available as
3021 \<diamondop>; the old symbol \<struct> loses this rendering and any special
3024 * Syntax for formal comments "-- text" now also supports the symbolic
3025 form "\<comment> text". Command-line tool "isabelle update_cartouches -c" helps
3026 to update old sources.
3028 * Toplevel theorem statements have been simplified as follows:
3031 schematic_lemma ~> schematic_goal
3032 schematic_theorem ~> schematic_goal
3033 schematic_corollary ~> schematic_goal
3035 Command-line tool "isabelle update_theorems" updates theory sources
3038 * Toplevel theorem statement 'proposition' is another alias for
3041 * The old 'defs' command has been removed (legacy since Isabelle2014).
3042 INCOMPATIBILITY, use regular 'definition' instead. Overloaded and/or
3043 deferred definitions require a surrounding 'overloading' block.
3046 *** Prover IDE -- Isabelle/Scala/jEdit ***
3048 * IDE support for the source-level debugger of Poly/ML, to work with
3049 Isabelle/ML and official Standard ML. Option "ML_debugger" and commands
3050 'ML_file_debug', 'ML_file_no_debug', 'SML_file_debug',
3051 'SML_file_no_debug' control compilation of sources with or without
3052 debugging information. The Debugger panel allows to set breakpoints (via
3053 context menu), step through stopped threads, evaluate local ML
3054 expressions etc. At least one Debugger view needs to be active to have
3055 any effect on the running ML program.
3057 * The State panel manages explicit proof state output, with dynamic
3058 auto-update according to cursor movement. Alternatively, the jEdit
3059 action "isabelle.update-state" (shortcut S+ENTER) triggers manual
3062 * The Output panel no longer shows proof state output by default, to
3063 avoid GUI overcrowding. INCOMPATIBILITY, use the State panel instead or
3064 enable option "editor_output_state".
3066 * The text overview column (status of errors, warnings etc.) is updated
3067 asynchronously, leading to much better editor reactivity. Moreover, the
3068 full document node content is taken into account. The width of the
3069 column is scaled according to the main text area font, for improved
3072 * The main text area no longer changes its color hue in outdated
3073 situations. The text overview column takes over the role to indicate
3074 unfinished edits in the PIDE pipeline. This avoids flashing text display
3075 due to ad-hoc updates by auxiliary GUI components, such as the State
3078 * Slightly improved scheduling for urgent print tasks (e.g. command
3079 state output, interactive queries) wrt. long-running background tasks.
3081 * Completion of symbols via prefix of \<name> or \<^name> or \name is
3082 always possible, independently of the language context. It is never
3083 implicit: a popup will show up unconditionally.
3085 * Additional abbreviations for syntactic completion may be specified in
3086 $ISABELLE_HOME/etc/abbrevs and $ISABELLE_HOME_USER/etc/abbrevs, with
3087 support for simple templates using ASCII 007 (bell) as placeholder.
3089 * Symbols \<oplus>, \<Oplus>, \<otimes>, \<Otimes>, \<odot>, \<Odot>, \<ominus>, \<oslash> no longer provide abbreviations for
3090 completion like "+o", "*o", ".o" etc. -- due to conflicts with other
3091 ASCII syntax. INCOMPATIBILITY, use plain backslash-completion or define
3092 suitable abbreviations in $ISABELLE_HOME_USER/etc/abbrevs.
3094 * Action "isabelle-emph" (with keyboard shortcut C+e LEFT) controls
3095 emphasized text style; the effect is visible in document output, not in
3098 * Action "isabelle-reset" now uses keyboard shortcut C+e BACK_SPACE,
3099 instead of former C+e LEFT.
3101 * The command-line tool "isabelle jedit" and the isabelle.Main
3102 application wrapper treat the default $USER_HOME/Scratch.thy more
3103 uniformly, and allow the dummy file argument ":" to open an empty buffer
3106 * New command-line tool "isabelle jedit_client" allows to connect to an
3107 already running Isabelle/jEdit process. This achieves the effect of
3108 single-instance applications seen on common GUI desktops.
3110 * The default look-and-feel for Linux is the traditional "Metal", which
3111 works better with GUI scaling for very high-resolution displays (e.g.
3112 4K). Moreover, it is generally more robust than "Nimbus".
3114 * Update to jedit-5.3.0, with improved GUI scaling and support of
3115 high-resolution displays (e.g. 4K).
3117 * The main Isabelle executable is managed as single-instance Desktop
3118 application uniformly on all platforms: Linux, Windows, Mac OS X.
3121 *** Document preparation ***
3123 * Commands 'paragraph' and 'subparagraph' provide additional section
3124 headings. Thus there are 6 levels of standard headings, as in HTML.
3126 * Command 'text_raw' has been clarified: input text is processed as in
3127 'text' (with antiquotations and control symbols). The key difference is
3128 the lack of the surrounding isabelle markup environment in output.
3130 * Text is structured in paragraphs and nested lists, using notation that
3131 is similar to Markdown. The control symbols for list items are as
3136 \<^descr> description
3138 * There is a new short form for antiquotations with a single argument
3139 that is a cartouche: \<^name>\<open>...\<close> is equivalent to @{name \<open>...\<close>} and
3140 \<open>...\<close> without control symbol is equivalent to @{cartouche \<open>...\<close>}.
3141 \<^name> without following cartouche is equivalent to @{name}. The
3142 standard Isabelle fonts provide glyphs to render important control
3143 symbols, e.g. "\<^verbatim>", "\<^emph>", "\<^bold>".
3145 * Antiquotations @{noindent}, @{smallskip}, @{medskip}, @{bigskip} with
3146 corresponding control symbols \<^noindent>, \<^smallskip>, \<^medskip>, \<^bigskip> specify spacing formally, using
3147 standard LaTeX macros of the same names.
3149 * Antiquotation @{cartouche} in Isabelle/Pure is the same as @{text}.
3150 Consequently, \<open>...\<close> without any decoration prints literal quasi-formal
3151 text. Command-line tool "isabelle update_cartouches -t" helps to update
3152 old sources, by approximative patching of the content of string and
3153 cartouche tokens seen in theory sources.
3155 * The @{text} antiquotation now ignores the antiquotation option
3156 "source". The given text content is output unconditionally, without any
3157 surrounding quotes etc. Subtle INCOMPATIBILITY, put quotes into the
3158 argument where they are really intended, e.g. @{text \<open>"foo"\<close>}. Initial
3159 or terminal spaces are ignored.
3161 * Antiquotations @{emph} and @{bold} output LaTeX source recursively,
3162 adding appropriate text style markup. These may be used in the short
3163 form \<^emph>\<open>...\<close> and \<^bold>\<open>...\<close>.
3165 * Document antiquotation @{footnote} outputs LaTeX source recursively,
3166 marked as \footnote{}. This may be used in the short form \<^footnote>\<open>...\<close>.
3168 * Antiquotation @{verbatim [display]} supports option "indent".
3170 * Antiquotation @{theory_text} prints uninterpreted theory source text
3171 (Isar outer syntax with command keywords etc.). This may be used in the
3172 short form \<^theory_text>\<open>...\<close>. @{theory_text [display]} supports option "indent".
3174 * Antiquotation @{doc ENTRY} provides a reference to the given
3175 documentation, with a hyperlink in the Prover IDE.
3177 * Antiquotations @{command}, @{method}, @{attribute} print checked
3178 entities of the Isar language.
3180 * HTML presentation uses the standard IsabelleText font and Unicode
3181 rendering of Isabelle symbols like Isabelle/Scala/jEdit. The former
3182 print mode "HTML" loses its special meaning.
3187 * Local goals ('have', 'show', 'hence', 'thus') allow structured rule
3188 statements like fixes/assumes/shows in theorem specifications, but the
3189 notation is postfix with keywords 'if' (or 'when') and 'for'. For
3192 have result: "C x y"
3194 for x :: 'a and y :: 'a
3197 The local assumptions are bound to the name "that". The result is
3198 exported from context of the statement as usual. The above roughly
3199 corresponds to a raw proof block like this:
3202 fix x :: 'a and y :: 'a
3203 assume that: "A x" "B y"
3204 have "C x y" <proof>
3208 The keyword 'when' may be used instead of 'if', to indicate 'presume'
3209 instead of 'assume' above.
3211 * Assumptions ('assume', 'presume') allow structured rule statements
3212 using 'if' and 'for', similar to 'have' etc. above. For example:
3214 assume result: "C x y"
3216 for x :: 'a and y :: 'a
3218 This assumes "\<And>x y::'a. A x \<Longrightarrow> B y \<Longrightarrow> C x y" and produces a general
3219 result as usual: "A ?x \<Longrightarrow> B ?y \<Longrightarrow> C ?x ?y".
3221 Vacuous quantification in assumptions is omitted, i.e. a for-context
3222 only effects propositions according to actual use of variables. For
3225 assume "A x" and "B y" for x and y
3229 assume "\<And>x. A x" and "\<And>y. B y"
3231 * The meaning of 'show' with Pure rule statements has changed: premises
3232 are treated in the sense of 'assume', instead of 'presume'. This means,
3233 a goal like "\<And>x. A x \<Longrightarrow> B x \<Longrightarrow> C x" can be solved completely as
3236 show "\<And>x. A x \<Longrightarrow> B x \<Longrightarrow> C x"
3240 show "C x" if "A x" "B x" for x
3242 Rare INCOMPATIBILITY, the old behaviour may be recovered as follows:
3244 show "C x" when "A x" "B x" for x
3246 * New command 'consider' states rules for generalized elimination and
3247 case splitting. This is like a toplevel statement "theorem obtains" used
3248 within a proof body; or like a multi-branch 'obtain' without activation
3249 of the local context elements yet.
3251 * Proof method "cases" allows to specify the rule as first entry of
3252 chained facts. This is particularly useful with 'consider':
3254 consider (a) A | (b) B | (c) C <proof>
3258 then show ?thesis <proof>
3261 then show ?thesis <proof>
3264 then show ?thesis <proof>
3267 * Command 'case' allows fact name and attribute specification like this:
3270 case a [attributes]: (c xs)
3272 Facts that are introduced by invoking the case context are uniformly
3273 qualified by "a"; the same name is used for the cumulative fact. The old
3274 form "case (c xs) [attributes]" is no longer supported. Rare
3275 INCOMPATIBILITY, need to adapt uses of case facts in exotic situations,
3276 and always put attributes in front.
3278 * The standard proof method of commands 'proof' and '..' is now called
3279 "standard" to make semantically clear what it is; the old name "default"
3280 is still available as legacy for some time. Documentation now explains
3281 '..' more accurately as "by standard" instead of "by rule".
3283 * Nesting of Isar goal structure has been clarified: the context after
3284 the initial backwards refinement is retained for the whole proof, within
3285 all its context sections (as indicated via 'next'). This is e.g.
3286 relevant for 'using', 'including', 'supply':
3288 have "A \<and> A" if a: A for A
3296 * Command 'obtain' binds term abbreviations (via 'is' patterns) in the
3297 proof body as well, abstracted over relevant parameters.
3299 * Improved type-inference for theorem statement 'obtains': separate
3300 parameter scope for of each clause.
3302 * Term abbreviations via 'is' patterns also work for schematic
3303 statements: result is abstracted over unknowns.
3305 * Command 'subgoal' allows to impose some structure on backward
3306 refinements, to avoid proof scripts degenerating into long of 'apply'
3307 sequences. Further explanations and examples are given in the isar-ref
3310 * Command 'supply' supports fact definitions during goal refinement
3313 * Proof method "goal_cases" turns the current subgoals into cases within
3314 the context; the conclusion is bound to variable ?case in each case. For
3317 lemma "\<And>x. A x \<Longrightarrow> B x \<Longrightarrow> C x"
3318 and "\<And>y z. U y \<Longrightarrow> V z \<Longrightarrow> W y z"
3321 then show ?case using \<open>A x\<close> \<open>B x\<close> sorry
3324 then show ?case using \<open>U y\<close> \<open>V z\<close> sorry
3327 lemma "\<And>x. A x \<Longrightarrow> B x \<Longrightarrow> C x"
3328 and "\<And>y z. U y \<Longrightarrow> V z \<Longrightarrow> W y z"
3331 then show ?case using prems sorry
3334 then show ?case using prems sorry
3337 * The undocumented feature of implicit cases goal1, goal2, goal3, etc.
3338 is marked as legacy, and will be removed eventually. The proof method
3339 "goals" achieves a similar effect within regular Isar; often it can be
3340 done more adequately by other means (e.g. 'consider').
3342 * The vacuous fact "TERM x" may be established "by fact" or as `TERM x`
3343 as well, not just "by this" or "." as before.
3345 * Method "sleep" succeeds after a real-time delay (in seconds). This is
3346 occasionally useful for demonstration and testing purposes.
3351 * Qualifiers in locale expressions default to mandatory ('!') regardless
3352 of the command. Previously, for 'locale' and 'sublocale' the default was
3353 optional ('?'). The old synatx '!' has been discontinued.
3354 INCOMPATIBILITY, remove '!' and add '?' as required.
3356 * Keyword 'rewrites' identifies rewrite morphisms in interpretation
3357 commands. Previously, the keyword was 'where'. INCOMPATIBILITY.
3359 * More gentle suppression of syntax along locale morphisms while
3360 printing terms. Previously 'abbreviation' and 'notation' declarations
3361 would be suppressed for morphisms except term identity. Now
3362 'abbreviation' is also kept for morphims that only change the involved
3363 parameters, and only 'notation' is suppressed. This can be of great help
3364 when working with complex locale hierarchies, because proof states are
3365 displayed much more succinctly. It also means that only notation needs
3366 to be redeclared if desired, as illustrated by this example:
3368 locale struct = fixes composition :: "'a => 'a => 'a" (infixl "\<cdot>" 65)
3370 definition derived (infixl "\<odot>" 65) where ...
3374 left: struct composition + right: struct composition'
3375 for composition (infix "\<cdot>" 65) and composition' (infix "\<cdot>''" 65)
3377 notation right.derived ("\<odot>''")
3380 * Command 'global_interpretation' issues interpretations into global
3381 theories, with optional rewrite definitions following keyword 'defines'.
3383 * Command 'sublocale' accepts optional rewrite definitions after keyword
3386 * Command 'permanent_interpretation' has been discontinued. Use
3387 'global_interpretation' or 'sublocale' instead. INCOMPATIBILITY.
3389 * Command 'print_definitions' prints dependencies of definitional
3390 specifications. This functionality used to be part of 'print_theory'.
3392 * Configuration option rule_insts_schematic has been discontinued
3393 (intermediate legacy feature in Isabelle2015). INCOMPATIBILITY.
3395 * Abbreviations in type classes now carry proper sort constraint. Rare
3396 INCOMPATIBILITY in situations where the previous misbehaviour has been
3399 * Refinement of user-space type system in type classes: pseudo-local
3400 operations behave more similar to abbreviations. Potential
3401 INCOMPATIBILITY in exotic situations.
3406 * The 'typedef' command has been upgraded from a partially checked
3407 "axiomatization", to a full definitional specification that takes the
3408 global collection of overloaded constant / type definitions into
3409 account. Type definitions with open dependencies on overloaded
3410 definitions need to be specified as "typedef (overloaded)". This
3411 provides extra robustness in theory construction. Rare INCOMPATIBILITY.
3413 * Qualification of various formal entities in the libraries is done more
3414 uniformly via "context begin qualified definition ... end" instead of
3415 old-style "hide_const (open) ...". Consequently, both the defined
3416 constant and its defining fact become qualified, e.g. Option.is_none and
3417 Option.is_none_def. Occasional INCOMPATIBILITY in applications.
3419 * Some old and rarely used ASCII replacement syntax has been removed.
3420 INCOMPATIBILITY, standard syntax with symbols should be used instead.
3421 The subsequent commands help to reproduce the old forms, e.g. to
3422 simplify porting old theories:
3424 notation iff (infixr "<->" 25)
3426 notation Times (infixr "<*>" 80)
3428 type_notation Map.map (infixr "~=>" 0)
3429 notation Map.map_comp (infixl "o'_m" 55)
3431 type_notation FinFun.finfun ("(_ =>f /_)" [22, 21] 21)
3433 notation FuncSet.funcset (infixr "->" 60)
3434 notation FuncSet.extensional_funcset (infixr "->\<^sub>E" 60)
3436 notation Omega_Words_Fun.conc (infixr "conc" 65)
3438 notation Preorder.equiv ("op ~~")
3439 and Preorder.equiv ("(_/ ~~ _)" [51, 51] 50)
3441 notation (in topological_space) tendsto (infixr "--->" 55)
3442 notation (in topological_space) LIMSEQ ("((_)/ ----> (_))" [60, 60] 60)
3443 notation LIM ("((_)/ -- (_)/ --> (_))" [60, 0, 60] 60)
3445 notation NSA.approx (infixl "@=" 50)
3446 notation NSLIMSEQ ("((_)/ ----NS> (_))" [60, 60] 60)
3447 notation NSLIM ("((_)/ -- (_)/ --NS> (_))" [60, 0, 60] 60)
3449 * The alternative notation "\<Colon>" for type and sort constraints has been
3450 removed: in LaTeX document output it looks the same as "::".
3451 INCOMPATIBILITY, use plain "::" instead.
3453 * Commands 'inductive' and 'inductive_set' work better when names for
3454 intro rules are omitted: the "cases" and "induct" rules no longer
3455 declare empty case_names, but no case_names at all. This allows to use
3456 numbered cases in proofs, without requiring method "goal_cases".
3458 * Inductive definitions ('inductive', 'coinductive', etc.) expose
3459 low-level facts of the internal construction only if the option
3460 "inductive_internals" is enabled. This refers to the internal predicate
3461 definition and its monotonicity result. Rare INCOMPATIBILITY.
3463 * Recursive function definitions ('fun', 'function', 'partial_function')
3464 expose low-level facts of the internal construction only if the option
3465 "function_internals" is enabled. Its internal inductive definition is
3466 also subject to "inductive_internals". Rare INCOMPATIBILITY.
3468 * BNF datatypes ('datatype', 'codatatype', etc.) expose low-level facts
3469 of the internal construction only if the option "bnf_internals" is
3470 enabled. This supersedes the former option "bnf_note_all". Rare
3473 * Combinator to represent case distinction on products is named
3474 "case_prod", uniformly, discontinuing any input aliasses. Very popular
3475 theorem aliasses have been retained.
3478 PairE ~> prod.exhaust
3479 Pair_eq ~> prod.inject
3480 pair_collapse ~> prod.collapse
3481 Pair_fst_snd_eq ~> prod_eq_iff
3482 split_twice ~> prod.case_distrib
3483 split_weak_cong ~> prod.case_cong_weak
3484 split_split ~> prod.split
3485 split_split_asm ~> prod.split_asm
3486 splitI ~> case_prodI
3487 splitD ~> case_prodD
3488 splitI2 ~> case_prodI2
3489 splitI2' ~> case_prodI2'
3490 splitE ~> case_prodE
3491 splitE' ~> case_prodE'
3492 split_pair ~> case_prod_Pair
3493 split_eta ~> case_prod_eta
3494 split_comp ~> case_prod_comp
3495 mem_splitI ~> mem_case_prodI
3496 mem_splitI2 ~> mem_case_prodI2
3497 mem_splitE ~> mem_case_prodE
3498 The_split ~> The_case_prod
3499 cond_split_eta ~> cond_case_prod_eta
3500 Collect_split_in_rel_leE ~> Collect_case_prod_in_rel_leE
3501 Collect_split_in_rel_leI ~> Collect_case_prod_in_rel_leI
3502 in_rel_Collect_split_eq ~> in_rel_Collect_case_prod_eq
3503 Collect_split_Grp_eqD ~> Collect_case_prod_Grp_eqD
3504 Collect_split_Grp_inD ~> Collect_case_prod_Grp_in
3505 Domain_Collect_split ~> Domain_Collect_case_prod
3506 Image_Collect_split ~> Image_Collect_case_prod
3507 Range_Collect_split ~> Range_Collect_case_prod
3508 Eps_split ~> Eps_case_prod
3509 Eps_split_eq ~> Eps_case_prod_eq
3510 split_rsp ~> case_prod_rsp
3511 curry_split ~> curry_case_prod
3512 split_curry ~> case_prod_curry
3514 Changes in structure HOLogic:
3515 split_const ~> case_prod_const
3516 mk_split ~> mk_case_prod
3517 mk_psplits ~> mk_ptupleabs
3518 strip_psplits ~> strip_ptupleabs
3522 * The coercions to type 'real' have been reorganised. The function
3523 'real' is no longer overloaded, but has type 'nat => real' and
3524 abbreviates of_nat for that type. Also 'real_of_int :: int => real'
3525 abbreviates of_int for that type. Other overloaded instances of 'real'
3526 have been replaced by 'real_of_ereal' and 'real_of_float'.
3528 Consolidated facts (among others):
3529 real_of_nat_le_iff -> of_nat_le_iff
3530 real_of_nat_numeral of_nat_numeral
3531 real_of_int_zero of_int_0
3532 real_of_nat_zero of_nat_0
3533 real_of_one of_int_1
3534 real_of_int_add of_int_add
3535 real_of_nat_add of_nat_add
3536 real_of_int_diff of_int_diff
3537 real_of_nat_diff of_nat_diff
3538 floor_subtract floor_diff_of_int
3539 real_of_int_inject of_int_eq_iff
3540 real_of_int_gt_zero_cancel_iff of_int_0_less_iff
3541 real_of_int_ge_zero_cancel_iff of_int_0_le_iff
3542 real_of_nat_ge_zero of_nat_0_le_iff
3543 real_of_int_ceiling_ge le_of_int_ceiling
3544 ceiling_less_eq ceiling_less_iff
3545 ceiling_le_eq ceiling_le_iff
3546 less_floor_eq less_floor_iff
3547 floor_less_eq floor_less_iff
3548 floor_divide_eq_div floor_divide_of_int_eq
3549 real_of_int_zero_cancel of_nat_eq_0_iff
3550 ceiling_real_of_int ceiling_of_int
3554 * Theory Map: lemma map_of_is_SomeD was a clone of map_of_SomeD and has
3555 been removed. INCOMPATIBILITY.
3557 * Quickcheck setup for finite sets.
3559 * Discontinued simp_legacy_precond. Potential INCOMPATIBILITY.
3562 - The MaSh relevance filter has been sped up.
3563 - Proof reconstruction has been improved, to minimize the incidence of
3564 cases where Sledgehammer gives a proof that does not work.
3565 - Auto Sledgehammer now minimizes and preplays the results.
3566 - Handle Vampire 4.0 proof output without raising exception.
3567 - Eliminated "MASH" environment variable. Use the "MaSh" option in
3568 Isabelle/jEdit instead. INCOMPATIBILITY.
3569 - Eliminated obsolete "blocking" option and related subcommands.
3572 - Fixed soundness bug in translation of "finite" predicate.
3573 - Fixed soundness bug in "destroy_constrs" optimization.
3574 - Fixed soundness bug in translation of "rat" type.
3575 - Removed "check_potential" and "check_genuine" options.
3576 - Eliminated obsolete "blocking" option.
3578 * (Co)datatype package:
3579 - New commands "lift_bnf" and "copy_bnf" for lifting (copying) a BNF
3580 structure on the raw type to an abstract type defined using typedef.
3581 - Always generate "case_transfer" theorem.
3582 - For mutual types, generate slightly stronger "rel_induct",
3583 "rel_coinduct", and "coinduct" theorems. INCOMPATIBILITY.
3584 - Allow discriminators and selectors with the same name as the type
3586 - Avoid various internal name clashes (e.g., 'datatype f = f').
3588 * Transfer: new methods for interactive debugging of 'transfer' and
3589 'transfer_prover': 'transfer_start', 'transfer_step', 'transfer_end',
3590 'transfer_prover_start' and 'transfer_prover_end'.
3592 * New diagnostic command print_record for displaying record definitions.
3594 * Division on integers is bootstrapped directly from division on
3595 naturals and uses generic numeral algorithm for computations. Slight
3596 INCOMPATIBILITY, simproc numeral_divmod replaces and generalizes former
3597 simprocs binary_int_div and binary_int_mod
3599 * Tightened specification of class semiring_no_zero_divisors. Minor
3602 * Class algebraic_semidom introduces common algebraic notions of
3603 integral (semi)domains, particularly units. Although logically subsumed
3604 by fields, is is not a super class of these in order not to burden
3605 fields with notions that are trivial there.
3607 * Class normalization_semidom specifies canonical representants for
3608 equivalence classes of associated elements in an integral (semi)domain.
3609 This formalizes associated elements as well.
3611 * Abstract specification of gcd/lcm operations in classes semiring_gcd,
3612 semiring_Gcd, semiring_Lcd. Minor INCOMPATIBILITY: facts gcd_nat.commute
3613 and gcd_int.commute are subsumed by gcd.commute, as well as
3614 gcd_nat.assoc and gcd_int.assoc by gcd.assoc.
3616 * Former constants Fields.divide (_ / _) and Divides.div (_ div _) are
3617 logically unified to Rings.divide in syntactic type class Rings.divide,
3618 with infix syntax (_ div _). Infix syntax (_ / _) for field division is
3619 added later as abbreviation in class Fields.inverse. INCOMPATIBILITY,
3620 instantiations must refer to Rings.divide rather than the former
3621 separate constants, hence infix syntax (_ / _) is usually not available
3622 during instantiation.
3624 * New cancellation simprocs for boolean algebras to cancel complementary
3625 terms for sup and inf. For example, "sup x (sup y (- x))" simplifies to
3626 "top". INCOMPATIBILITY.
3628 * Class uniform_space introduces uniform spaces btw topological spaces
3629 and metric spaces. Minor INCOMPATIBILITY: open_<type>_def needs to be
3630 introduced in the form of an uniformity. Some constants are more general
3631 now, it may be necessary to add type class constraints.
3633 open_real_def \<leadsto> open_dist
3634 open_complex_def \<leadsto> open_dist
3636 * Library/Monad_Syntax: notation uses symbols \<bind> and \<then>. INCOMPATIBILITY.
3639 - Renamed multiset inclusion operators:
3647 - Added multiset inclusion operator syntax:
3652 - "'a multiset" is no longer an instance of the "order",
3653 "ordered_ab_semigroup_add_imp_le", "ordered_cancel_comm_monoid_diff",
3654 "semilattice_inf", and "semilattice_sup" type classes. The theorems
3655 previously provided by these type classes (directly or indirectly)
3656 are now available through the "subset_mset" interpretation
3657 (e.g. add_mono ~> subset_mset.add_mono).
3659 - Renamed conversions:
3661 multiset_of_set ~> mset_set
3665 mset_le_def ~> subseteq_mset_def
3666 mset_less_def ~> subset_mset_def
3667 less_eq_multiset.rep_eq ~> subseteq_mset_def
3669 - Removed lemmas generated by lift_definition:
3670 less_eq_multiset.abs_eq, less_eq_multiset.rsp,
3671 less_eq_multiset.transfer, less_eq_multiset_def
3674 * Library/Omega_Words_Fun: Infinite words modeled as functions nat \<Rightarrow> 'a.
3676 * Library/Bourbaki_Witt_Fixpoint: Added formalisation of the
3677 Bourbaki-Witt fixpoint theorem for increasing functions in
3678 chain-complete partial orders.
3680 * Library/Old_Recdef: discontinued obsolete 'defer_recdef' command.
3681 Minor INCOMPATIBILITY, use 'function' instead.
3683 * Library/Periodic_Fun: a locale that provides convenient lemmas for
3686 * Library/Formal_Power_Series: proper definition of division (with
3687 remainder) for formal power series; instances for Euclidean Ring and
3690 * HOL-Imperative_HOL: obsolete theory Legacy_Mrec has been removed.
3692 * HOL-Statespace: command 'statespace' uses mandatory qualifier for
3693 import of parent, as for general 'locale' expressions. INCOMPATIBILITY,
3694 remove '!' and add '?' as required.
3696 * HOL-Decision_Procs: The "approximation" method works with "powr"
3697 (exponentiation on real numbers) again.
3699 * HOL-Multivariate_Analysis: theory Cauchy_Integral_Thm with Contour
3700 integrals (= complex path integrals), Cauchy's integral theorem, winding
3701 numbers and Cauchy's integral formula, Liouville theorem, Fundamental
3702 Theorem of Algebra. Ported from HOL Light.
3704 * HOL-Multivariate_Analysis: topological concepts such as connected
3705 components, homotopic paths and the inside or outside of a set.
3707 * HOL-Multivariate_Analysis: radius of convergence of power series and
3708 various summability tests; Harmonic numbers and the Euler–Mascheroni
3709 constant; the Generalised Binomial Theorem; the complex and real
3710 Gamma/log-Gamma/Digamma/ Polygamma functions and their most important
3713 * HOL-Probability: The central limit theorem based on Levy's uniqueness
3714 and continuity theorems, weak convergence, and characterisitc functions.
3716 * HOL-Data_Structures: new and growing session of standard data
3722 * The following combinators for low-level profiling of the ML runtime
3723 system are available:
3725 profile_time (*CPU time*)
3726 profile_time_thread (*CPU time on this thread*)
3727 profile_allocations (*overall heap allocations*)
3729 * Antiquotation @{undefined} or \<^undefined> inlines (raise Match).
3731 * Antiquotation @{method NAME} inlines the (checked) name of the given
3734 * Pretty printing of Poly/ML compiler output in Isabelle has been
3735 improved: proper treatment of break offsets and blocks with consistent
3738 * The auxiliary module Pure/display.ML has been eliminated. Its
3739 elementary thm print operations are now in Pure/more_thm.ML and thus
3740 called Thm.pretty_thm, Thm.string_of_thm etc. INCOMPATIBILITY.
3742 * Simproc programming interfaces have been simplified:
3743 Simplifier.make_simproc and Simplifier.define_simproc supersede various
3744 forms of Simplifier.mk_simproc, Simplifier.simproc_global etc. Note that
3745 term patterns for the left-hand sides are specified with implicitly
3746 fixed variables, like top-level theorem statements. INCOMPATIBILITY.
3748 * Instantiation rules have been re-organized as follows:
3750 Thm.instantiate (*low-level instantiation with named arguments*)
3751 Thm.instantiate' (*version with positional arguments*)
3753 Drule.infer_instantiate (*instantiation with type inference*)
3754 Drule.infer_instantiate' (*version with positional arguments*)
3756 The LHS only requires variable specifications, instead of full terms.
3757 Old cterm_instantiate is superseded by infer_instantiate.
3758 INCOMPATIBILITY, need to re-adjust some ML names and types accordingly.
3760 * Old tactic shorthands atac, rtac, etac, dtac, ftac have been
3761 discontinued. INCOMPATIBILITY, use regular assume_tac, resolve_tac etc.
3762 instead (with proper context).
3764 * Thm.instantiate (and derivatives) no longer require the LHS of the
3765 instantiation to be certified: plain variables are given directly.
3767 * Subgoal.SUBPROOF and Subgoal.FOCUS combinators use anonymous
3768 quasi-bound variables (like the Simplifier), instead of accidentally
3769 named local fixes. This has the potential to improve stability of proof
3770 tools, but can also cause INCOMPATIBILITY for tools that don't observe
3771 the proof context discipline.
3773 * Isar proof methods are based on a slightly more general type
3774 context_tactic, which allows to change the proof context dynamically
3775 (e.g. to update cases) and indicate explicit Seq.Error results. Former
3776 METHOD_CASES is superseded by CONTEXT_METHOD; further combinators are
3777 provided in src/Pure/Isar/method.ML for convenience. INCOMPATIBILITY.
3782 * Command-line tool "isabelle console" enables print mode "ASCII".
3784 * Command-line tool "isabelle update_then" expands old Isar command
3790 This syntax is more orthogonal and improves readability and
3791 maintainability of proofs.
3793 * Global session timeout is multiplied by timeout_scale factor. This
3794 allows to adjust large-scale tests (e.g. AFP) to overall hardware
3797 * Property values in etc/symbols may contain spaces, if written with the
3798 replacement character "␣" (Unicode point 0x2324). For example:
3800 \<star> code: 0x0022c6 group: operator font: Deja␣Vu␣Sans␣Mono
3802 * Java runtime environment for x86_64-windows allows to use larger heap
3805 * Java runtime options are determined separately for 32bit vs. 64bit
3806 platforms as follows.
3808 - Isabelle desktop application: platform-specific files that are
3809 associated with the main app bundle
3811 - isabelle jedit: settings
3812 JEDIT_JAVA_SYSTEM_OPTIONS
3813 JEDIT_JAVA_OPTIONS32 vs. JEDIT_JAVA_OPTIONS64
3815 - isabelle build: settings
3816 ISABELLE_BUILD_JAVA_OPTIONS32 vs. ISABELLE_BUILD_JAVA_OPTIONS64
3818 * Bash shell function "jvmpath" has been renamed to "platform_path": it
3819 is relevant both for Poly/ML and JVM processes.
3821 * Poly/ML default platform architecture may be changed from 32bit to
3822 64bit via system option ML_system_64. A system restart (and rebuild) is
3823 required after change.
3825 * Poly/ML 5.6 runs natively on x86-windows and x86_64-windows, which
3826 both allow larger heap space than former x86-cygwin.
3828 * Heap images are 10-15% smaller due to less wasteful persistent theory
3829 content (using ML type theory_id instead of theory);
3833 New in Isabelle2015 (May 2015)
3834 ------------------------------
3838 * Local theory specification commands may have a 'private' or
3839 'qualified' modifier to restrict name space accesses to the local scope,
3840 as provided by some "context begin ... end" block. For example:
3845 private definition ...
3848 qualified definition ...
3856 * Command 'experiment' opens an anonymous locale context with private
3859 * Command 'notepad' requires proper nesting of begin/end and its proof
3860 structure in the body: 'oops' is no longer supported here. Minor
3861 INCOMPATIBILITY, use 'sorry' instead.
3863 * Command 'named_theorems' declares a dynamic fact within the context,
3864 together with an attribute to maintain the content incrementally. This
3865 supersedes functor Named_Thms in Isabelle/ML, but with a subtle change
3866 of semantics due to external visual order vs. internal reverse order.
3868 * 'find_theorems': search patterns which are abstractions are
3869 schematically expanded before search. Search results match the naive
3870 expectation more closely, particularly wrt. abbreviations.
3873 * Commands 'method_setup' and 'attribute_setup' now work within a local
3876 * Outer syntax commands are managed authentically within the theory
3877 context, without implicit global state. Potential for accidental
3878 INCOMPATIBILITY, make sure that required theories are really imported.
3880 * Historical command-line terminator ";" is no longer accepted (and
3881 already used differently in Isar). Minor INCOMPATIBILITY, use "isabelle
3882 update_semicolons" to remove obsolete semicolons from old theory
3885 * Structural composition of proof methods (meth1; meth2) in Isar
3886 corresponds to (tac1 THEN_ALL_NEW tac2) in ML.
3888 * The Eisbach proof method language allows to define new proof methods
3889 by combining existing ones with their usual syntax. The "match" proof
3890 method provides basic fact/term matching in addition to
3891 premise/conclusion matching through Subgoal.focus, and binds fact names
3892 from matches as well as term patterns within matches. The Isabelle
3893 documentation provides an entry "eisbach" for the Eisbach User Manual.
3894 Sources and various examples are in ~~/src/HOL/Eisbach/.
3897 *** Prover IDE -- Isabelle/Scala/jEdit ***
3899 * Improved folding mode "isabelle" based on Isar syntax. Alternatively,
3900 the "sidekick" mode may be used for document structure.
3902 * Extended bracket matching based on Isar language structure. System
3903 option jedit_structure_limit determines maximum number of lines to scan
3906 * Support for BibTeX files: context menu, context-sensitive token
3907 marker, SideKick parser.
3909 * Document antiquotation @{cite} provides formal markup, which is
3910 interpreted semi-formally based on .bib files that happen to be open in
3911 the editor (hyperlinks, completion etc.).
3913 * Less waste of vertical space via negative line spacing (see Global
3914 Options / Text Area).
3916 * Improved graphview panel with optional output of PNG or PDF, for
3917 display of 'thy_deps', 'class_deps' etc.
3919 * The commands 'thy_deps' and 'class_deps' allow optional bounds to
3920 restrict the visualized hierarchy.
3922 * Improved scheduling for asynchronous print commands (e.g. provers
3923 managed by the Sledgehammer panel) wrt. ongoing document processing.
3926 *** Document preparation ***
3928 * Document markup commands 'chapter', 'section', 'subsection',
3929 'subsubsection', 'text', 'txt', 'text_raw' work uniformly in any
3930 context, even before the initial 'theory' command. Obsolete proof
3931 commands 'sect', 'subsect', 'subsubsect', 'txt_raw' have been
3932 discontinued, use 'section', 'subsection', 'subsubsection', 'text_raw'
3933 instead. The old 'header' command is still retained for some time, but
3934 should be replaced by 'chapter', 'section' etc. (using "isabelle
3935 update_header"). Minor INCOMPATIBILITY.
3937 * Official support for "tt" style variants, via \isatt{...} or
3938 \begin{isabellett}...\end{isabellett}. The somewhat fragile \verb or
3939 verbatim environment of LaTeX is no longer used. This allows @{ML} etc.
3940 as argument to other macros (such as footnotes).
3942 * Document antiquotation @{verbatim} prints ASCII text literally in "tt"
3945 * Discontinued obsolete option "document_graph": session_graph.pdf is
3946 produced unconditionally for HTML browser_info and PDF-LaTeX document.
3948 * Diagnostic commands and document markup commands within a proof do not
3949 affect the command tag for output. Thus commands like 'thm' are subject
3950 to proof document structure, and no longer "stick out" accidentally.
3951 Commands 'text' and 'txt' merely differ in the LaTeX style, not their
3952 tags. Potential INCOMPATIBILITY in exotic situations.
3954 * System option "pretty_margin" is superseded by "thy_output_margin",
3955 which is also accessible via document antiquotation option "margin".
3956 Only the margin for document output may be changed, but not the global
3957 pretty printing: that is 76 for plain console output, and adapted
3958 dynamically in GUI front-ends. Implementations of document
3959 antiquotations need to observe the margin explicitly according to
3960 Thy_Output.string_of_margin. Minor INCOMPATIBILITY.
3962 * Specification of 'document_files' in the session ROOT file is
3963 mandatory for document preparation. The legacy mode with implicit
3964 copying of the document/ directory is no longer supported. Minor
3970 * Proof methods with explicit instantiation ("rule_tac", "subgoal_tac"
3971 etc.) allow an optional context of local variables ('for' declaration):
3972 these variables become schematic in the instantiated theorem; this
3973 behaviour is analogous to 'for' in attributes "where" and "of".
3974 Configuration option rule_insts_schematic (default false) controls use
3975 of schematic variables outside the context. Minor INCOMPATIBILITY,
3976 declare rule_insts_schematic = true temporarily and update to use local
3977 variable declarations or dummy patterns instead.
3979 * Explicit instantiation via attributes "where", "of", and proof methods
3980 "rule_tac" with derivatives like "subgoal_tac" etc. admit dummy patterns
3981 ("_") that stand for anonymous local variables.
3983 * Generated schematic variables in standard format of exported facts are
3984 incremented to avoid material in the proof context. Rare
3985 INCOMPATIBILITY, explicit instantiation sometimes needs to refer to
3988 * Lexical separation of signed and unsigned numerals: categories "num"
3989 and "float" are unsigned. INCOMPATIBILITY: subtle change in precedence
3990 of numeral signs, particularly in expressions involving infix syntax
3993 * Old inner token category "xnum" has been discontinued. Potential
3994 INCOMPATIBILITY for exotic syntax: may use mixfix grammar with "num"
3995 token category instead.
4000 * New (co)datatype package:
4001 - The 'datatype_new' command has been renamed 'datatype'. The old
4002 command of that name is now called 'old_datatype' and is provided
4003 by "~~/src/HOL/Library/Old_Datatype.thy". See
4004 'isabelle doc datatypes' for information on porting.
4007 disc_corec ~> corec_disc
4008 disc_corec_iff ~> corec_disc_iff
4009 disc_exclude ~> distinct_disc
4010 disc_exhaust ~> exhaust_disc
4011 disc_map_iff ~> map_disc_iff
4012 sel_corec ~> corec_sel
4013 sel_exhaust ~> exhaust_sel
4016 sel_split ~> split_sel
4017 sel_split_asm ~> split_sel_asm
4018 strong_coinduct ~> coinduct_strong
4019 weak_case_cong ~> case_cong_weak
4021 - The "no_code" option to "free_constructors", "datatype_new", and
4022 "codatatype" has been renamed "plugins del: code".
4024 - The rules "set_empty" have been removed. They are easy
4025 consequences of other set rules "by auto".
4027 - The rule "set_cases" is now registered with the "[cases set]"
4028 attribute. This can influence the behavior of the "cases" proof
4029 method when more than one case rule is applicable (e.g., an
4030 assumption is of the form "w : set ws" and the method "cases w"
4031 is invoked). The solution is to specify the case rule explicitly
4032 (e.g. "cases w rule: widget.exhaust").
4035 BNF_Comp ~> BNF_Composition
4036 BNF_FP_Base ~> BNF_Fixpoint_Base
4037 BNF_GFP ~> BNF_Greatest_Fixpoint
4038 BNF_LFP ~> BNF_Least_Fixpoint
4039 BNF_Constructions_on_Wellorders ~> BNF_Wellorder_Constructions
4040 Cardinals/Constructions_on_Wellorders ~> Cardinals/Wellorder_Constructions
4042 - Lifting and Transfer setup for basic HOL types sum and prod (also
4043 option) is now performed by the BNF package. Theories Lifting_Sum,
4044 Lifting_Product and Lifting_Option from Main became obsolete and
4045 were removed. Changed definitions of the relators rel_prod and
4046 rel_sum (using inductive).
4047 INCOMPATIBILITY: use rel_prod.simps and rel_sum.simps instead
4048 of rel_prod_def and rel_sum_def.
4049 Minor INCOMPATIBILITY: (rarely used by name) transfer theorem names
4050 changed (e.g. map_prod_transfer ~> prod.map_transfer).
4051 - Parametricity theorems for map functions, relators, set functions,
4052 constructors, case combinators, discriminators, selectors and
4053 (co)recursors are automatically proved and registered as transfer
4056 * Old datatype package:
4057 - The old 'datatype' command has been renamed 'old_datatype', and
4058 'rep_datatype' has been renamed 'old_rep_datatype'. They are
4059 provided by "~~/src/HOL/Library/Old_Datatype.thy". See
4060 'isabelle doc datatypes' for information on porting.
4063 weak_case_cong ~> case_cong_weak
4066 ~~/src/HOL/Datatype.thy ~> ~~/src/HOL/Library/Old_Datatype.thy
4070 - Fixed soundness bug related to the strict and non-strict subset
4074 - CVC4 is now included with Isabelle instead of CVC3 and run by
4076 - Z3 is now always enabled by default, now that it is fully open
4077 source. The "z3_non_commercial" option is discontinued.
4078 - Minimization is now always enabled by default.
4079 Removed sub-command:
4081 - Proof reconstruction, both one-liners and Isar, has been
4082 dramatically improved.
4083 - Improved support for CVC4 and veriT.
4085 * Old and new SMT modules:
4086 - The old 'smt' method has been renamed 'old_smt' and moved to
4087 'src/HOL/Library/Old_SMT.thy'. It is provided for compatibility,
4088 until applications have been ported to use the new 'smt' method. For
4089 the method to work, an older version of Z3 (e.g. Z3 3.2 or 4.0) must
4090 be installed, and the environment variable "OLD_Z3_SOLVER" must
4093 - The 'smt2' method has been renamed 'smt'.
4095 - New option 'smt_reconstruction_step_timeout' to limit the
4096 reconstruction time of Z3 proof steps in the new 'smt' method.
4097 - New option 'smt_statistics' to display statistics of the new 'smt'
4098 method, especially runtime statistics of Z3 proof reconstruction.
4100 * Lifting: command 'lift_definition' allows to execute lifted constants
4101 that have as a return type a datatype containing a subtype. This
4102 overcomes long-time limitations in the area of code generation and
4103 lifting, and avoids tedious workarounds.
4105 * Command and antiquotation "value" provide different evaluation slots
4106 (again), where the previous strategy (NBE after ML) serves as default.
4107 Minor INCOMPATIBILITY.
4109 * Add NO_MATCH-simproc, allows to check for syntactic non-equality.
4111 * field_simps: Use NO_MATCH-simproc for distribution rules, to avoid
4112 non-termination in case of distributing a division. With this change
4113 field_simps is in some cases slightly less powerful, if it fails try to
4114 add algebra_simps, or use divide_simps. Minor INCOMPATIBILITY.
4116 * Separate class no_zero_divisors has been given up in favour of fully
4117 algebraic semiring_no_zero_divisors. INCOMPATIBILITY.
4119 * Class linordered_semidom really requires no zero divisors.
4122 * Classes division_ring, field and linordered_field always demand
4123 "inverse 0 = 0". Given up separate classes division_ring_inverse_zero,
4124 field_inverse_zero and linordered_field_inverse_zero. INCOMPATIBILITY.
4126 * Classes cancel_ab_semigroup_add / cancel_monoid_add specify explicit
4127 additive inverse operation. INCOMPATIBILITY.
4129 * Complex powers and square roots. The functions "ln" and "powr" are now
4130 overloaded for types real and complex, and 0 powr y = 0 by definition.
4131 INCOMPATIBILITY: type constraints may be necessary.
4133 * The functions "sin" and "cos" are now defined for any type of sort
4134 "{real_normed_algebra_1,banach}" type, so in particular on "real" and
4135 "complex" uniformly. Minor INCOMPATIBILITY: type constraints may be
4138 * New library of properties of the complex transcendental functions sin,
4139 cos, tan, exp, Ln, Arctan, Arcsin, Arccos. Ported from HOL Light.
4141 * The factorial function, "fact", now has type "nat => 'a" (of a sort
4142 that admits numeric types including nat, int, real and complex.
4143 INCOMPATIBILITY: an expression such as "fact 3 = 6" may require a type
4144 constraint, and the combination "real (fact k)" is likely to be
4145 unsatisfactory. If a type conversion is still necessary, then use
4146 "of_nat (fact k)" or "real_of_nat (fact k)".
4148 * Removed functions "natfloor" and "natceiling", use "nat o floor" and
4149 "nat o ceiling" instead. A few of the lemmas have been retained and
4150 adapted: in their names "natfloor"/"natceiling" has been replaced by
4151 "nat_floor"/"nat_ceiling".
4153 * Qualified some duplicated fact names required for boostrapping the
4154 type class hierarchy:
4155 ab_add_uminus_conv_diff ~> diff_conv_add_uminus
4156 field_inverse_zero ~> inverse_zero
4157 field_divide_inverse ~> divide_inverse
4158 field_inverse ~> left_inverse
4159 Minor INCOMPATIBILITY.
4161 * Eliminated fact duplicates:
4162 mult_less_imp_less_right ~> mult_right_less_imp_less
4163 mult_less_imp_less_left ~> mult_left_less_imp_less
4164 Minor INCOMPATIBILITY.
4166 * Fact consolidation: even_less_0_iff is subsumed by
4167 double_add_less_zero_iff_single_add_less_zero (simp by default anyway).
4169 * Generalized and consolidated some theorems concerning divsibility:
4170 dvd_reduce ~> dvd_add_triv_right_iff
4171 dvd_plus_eq_right ~> dvd_add_right_iff
4172 dvd_plus_eq_left ~> dvd_add_left_iff
4173 Minor INCOMPATIBILITY.
4175 * "even" and "odd" are mere abbreviations for "2 dvd _" and "~ 2 dvd _"
4176 and part of theory Main.
4177 even_def ~> even_iff_mod_2_eq_zero
4180 * Lemma name consolidation: divide_Numeral1 ~> divide_numeral_1. Minor
4183 * Bootstrap of listsum as special case of abstract product over lists.
4185 listsum_def ~> listsum.eq_foldr
4188 * Product over lists via constant "listprod".
4190 * Theory List: renamed drop_Suc_conv_tl and nth_drop' to
4193 * New infrastructure for compiling, running, evaluating and testing
4194 generated code in target languages in HOL/Library/Code_Test. See
4195 HOL/Codegenerator_Test/Code_Test* for examples.
4198 - Introduced "replicate_mset" operation.
4199 - Introduced alternative characterizations of the multiset ordering in
4200 "Library/Multiset_Order".
4201 - Renamed multiset ordering:
4204 \<subset># ~> #\<subset>#
4205 \<subseteq># ~> #\<subseteq>#
4207 - Introduced abbreviations for ill-named multiset operations:
4208 <#, \<subset># abbreviate < (strict subset)
4209 <=#, \<le>#, \<subseteq># abbreviate <= (subset or equal)
4212 in_multiset_of ~> in_multiset_in_set
4213 Multiset.fold ~> fold_mset
4214 Multiset.filter ~> filter_mset
4216 - Removed mcard, is equal to size.
4218 image_mset.id [simp]
4219 image_mset_id [simp]
4220 elem_multiset_of_set [simp, intro]
4221 comp_fun_commute_plus_mset [simp]
4222 comp_fun_commute.fold_mset_insert [OF comp_fun_commute_plus_mset, simp]
4223 in_mset_fold_plus_iff [iff]
4224 set_of_Union_mset [simp]
4225 in_Union_mset_iff [iff]
4228 * Library/Sum_of_Squares: simplified and improved "sos" method. Always
4229 use local CSDP executable, which is much faster than the NEOS server.
4230 The "sos_cert" functionality is invoked as "sos" with additional
4231 argument. Minor INCOMPATIBILITY.
4233 * HOL-Decision_Procs: New counterexample generator quickcheck
4234 [approximation] for inequalities of transcendental functions. Uses
4235 hardware floating point arithmetic to randomly discover potential
4236 counterexamples. Counterexamples are certified with the "approximation"
4237 method. See HOL/Decision_Procs/ex/Approximation_Quickcheck_Ex.thy for
4240 * HOL-Probability: Reworked measurability prover
4241 - applies destructor rules repeatedly
4242 - removed application splitting (replaced by destructor rule)
4243 - added congruence rules to rewrite measure spaces under the sets
4246 * New proof method "rewrite" (in theory ~~/src/HOL/Library/Rewrite) for
4247 single-step rewriting with subterm selection based on patterns.
4252 * Subtle change of name space policy: undeclared entries are now
4253 considered inaccessible, instead of accessible via the fully-qualified
4254 internal name. This mainly affects Name_Space.intern (and derivatives),
4255 which may produce an unexpected Long_Name.hidden prefix. Note that
4256 contemporary applications use the strict Name_Space.check (and
4257 derivatives) instead, which is not affected by the change. Potential
4258 INCOMPATIBILITY in rare applications of Name_Space.intern.
4260 * Subtle change of error semantics of Toplevel.proof_of: regular user
4261 ERROR instead of internal Toplevel.UNDEF.
4263 * Basic combinators map, fold, fold_map, split_list, apply are available
4264 as parameterized antiquotations, e.g. @{map 4} for lists of quadruples.
4266 * Renamed "pairself" to "apply2", in accordance to @{apply 2}.
4269 * Former combinators NAMED_CRITICAL and CRITICAL for central critical
4270 sections have been discontinued, in favour of the more elementary
4271 Multithreading.synchronized and its high-level derivative
4272 Synchronized.var (which is usually sufficient in applications). Subtle
4273 INCOMPATIBILITY: synchronized access needs to be atomic and cannot be
4276 * Synchronized.value (ML) is actually synchronized (as in Scala): subtle
4277 change of semantics with minimal potential for INCOMPATIBILITY.
4279 * The main operations to certify logical entities are Thm.ctyp_of and
4280 Thm.cterm_of with a local context; old-style global theory variants are
4281 available as Thm.global_ctyp_of and Thm.global_cterm_of.
4284 * Elementary operations in module Thm are no longer pervasive.
4285 INCOMPATIBILITY, need to use qualified Thm.prop_of, Thm.cterm_of,
4288 * Proper context for various elementary tactics: assume_tac,
4289 resolve_tac, eresolve_tac, dresolve_tac, forward_tac, match_tac,
4290 compose_tac, Splitter.split_tac etc. INCOMPATIBILITY.
4292 * Tactical PARALLEL_ALLGOALS is the most common way to refer to
4295 * Goal.prove_multi is superseded by the fully general Goal.prove_common,
4296 which also allows to specify a fork priority.
4298 * Antiquotation @{command_spec "COMMAND"} is superseded by
4299 @{command_keyword COMMAND} (usually without quotes and with PIDE
4300 markup). Minor INCOMPATIBILITY.
4302 * Cartouches within ML sources are turned into values of type
4303 Input.source (with formal position information).
4308 * The Isabelle tool "update_cartouches" changes theory files to use
4309 cartouches instead of old-style {* verbatim *} or `alt_string` tokens.
4311 * The Isabelle tool "build" provides new options -X, -k, -x.
4313 * Discontinued old-fashioned "codegen" tool. Code generation can always
4314 be externally triggered using an appropriate ROOT file plus a
4315 corresponding theory. Parametrization is possible using environment
4316 variables, or ML snippets in the most extreme cases. Minor
4319 * JVM system property "isabelle.threads" determines size of Scala thread
4320 pool, like Isabelle system option "threads" for ML.
4322 * JVM system property "isabelle.laf" determines the default Swing
4323 look-and-feel, via internal class name or symbolic name as in the jEdit
4324 menu Global Options / Appearance.
4326 * Support for Proof General and Isar TTY loop has been discontinued.
4327 Minor INCOMPATIBILITY, use standard PIDE infrastructure instead.
4331 New in Isabelle2014 (August 2014)
4332 ---------------------------------
4336 * Support for official Standard ML within the Isabelle context.
4337 Command 'SML_file' reads and evaluates the given Standard ML file.
4338 Toplevel bindings are stored within the theory context; the initial
4339 environment is restricted to the Standard ML implementation of
4340 Poly/ML, without the add-ons of Isabelle/ML. Commands 'SML_import'
4341 and 'SML_export' allow to exchange toplevel bindings between the two
4342 separate environments. See also ~~/src/Tools/SML/Examples.thy for
4345 * Standard tactics and proof methods such as "clarsimp", "auto" and
4346 "safe" now preserve equality hypotheses "x = expr" where x is a free
4347 variable. Locale assumptions and chained facts containing "x"
4348 continue to be useful. The new method "hypsubst_thin" and the
4349 configuration option "hypsubst_thin" (within the attribute name space)
4350 restore the previous behavior. INCOMPATIBILITY, especially where
4351 induction is done after these methods or when the names of free and
4352 bound variables clash. As first approximation, old proofs may be
4353 repaired by "using [[hypsubst_thin = true]]" in the critical spot.
4355 * More static checking of proof methods, which allows the system to
4356 form a closure over the concrete syntax. Method arguments should be
4357 processed in the original proof context as far as possible, before
4358 operating on the goal state. In any case, the standard discipline for
4359 subgoal-addressing needs to be observed: no subgoals or a subgoal
4360 number that is out of range produces an empty result sequence, not an
4361 exception. Potential INCOMPATIBILITY for non-conformant tactical
4364 * Lexical syntax (inner and outer) supports text cartouches with
4365 arbitrary nesting, and without escapes of quotes etc. The Prover IDE
4366 supports input via ` (backquote).
4368 * The outer syntax categories "text" (for formal comments and document
4369 markup commands) and "altstring" (for literal fact references) allow
4370 cartouches as well, in addition to the traditional mix of quotations.
4372 * Syntax of document antiquotation @{rail} now uses \<newline> instead
4373 of "\\", to avoid the optical illusion of escaped backslash within
4374 string token. General renovation of its syntax using text cartouches.
4375 Minor INCOMPATIBILITY.
4377 * Discontinued legacy_isub_isup, which was a temporary workaround for
4378 Isabelle/ML in Isabelle2013-1. The prover process no longer accepts
4379 old identifier syntax with \<^isub> or \<^isup>. Potential
4382 * Document antiquotation @{url} produces markup for the given URL,
4383 which results in an active hyperlink within the text.
4385 * Document antiquotation @{file_unchecked} is like @{file}, but does
4386 not check existence within the file-system.
4388 * Updated and extended manuals: codegen, datatypes, implementation,
4389 isar-ref, jedit, system.
4392 *** Prover IDE -- Isabelle/Scala/jEdit ***
4394 * Improved Document panel: simplified interaction where every single
4395 mouse click (re)opens document via desktop environment or as jEdit
4398 * Support for Navigator plugin (with toolbar buttons), with connection
4401 * Auxiliary files ('ML_file' etc.) are managed by the Prover IDE.
4402 Open text buffers take precedence over copies within the file-system.
4404 * Improved support for Isabelle/ML, with jEdit mode "isabelle-ml" for
4407 * Improved syntactic and semantic completion mechanism, with simple
4408 templates, completion language context, name-space completion,
4409 file-name completion, spell-checker completion.
4411 * Refined GUI popup for completion: more robust key/mouse event
4412 handling and propagation to enclosing text area -- avoid loosing
4413 keystrokes with slow / remote graphics displays.
4415 * Completion popup supports both ENTER and TAB (default) to select an
4416 item, depending on Isabelle options.
4418 * Refined insertion of completion items wrt. jEdit text: multiple
4419 selections, rectangular selections, rectangular selection as "tall
4422 * Integrated spell-checker for document text, comments etc. with
4423 completion popup and context-menu.
4425 * More general "Query" panel supersedes "Find" panel, with GUI access
4426 to commands 'find_theorems' and 'find_consts', as well as print
4427 operations for the context. Minor incompatibility in keyboard
4428 shortcuts etc.: replace action isabelle-find by isabelle-query.
4430 * Search field for all output panels ("Output", "Query", "Info" etc.)
4431 to highlight text via regular expression.
4433 * Option "jedit_print_mode" (see also "Plugin Options / Isabelle /
4434 General") allows to specify additional print modes for the prover
4435 process, without requiring old-fashioned command-line invocation of
4436 "isabelle jedit -m MODE".
4438 * More support for remote files (e.g. http) using standard Java
4439 networking operations instead of jEdit virtual file-systems.
4441 * Empty editors buffers that are no longer required (e.g.\ via theory
4442 imports) are automatically removed from the document model.
4444 * Improved monitor panel.
4446 * Improved Console/Scala plugin: more uniform scala.Console output,
4447 more robust treatment of threads and interrupts.
4449 * Improved management of dockable windows: clarified keyboard focus
4450 and window placement wrt. main editor view; optional menu item to
4451 "Detach" a copy where this makes sense.
4453 * New Simplifier Trace panel provides an interactive view of the
4454 simplification process, enabled by the "simp_trace_new" attribute
4460 * Low-level type-class commands 'classes', 'classrel', 'arities' have
4461 been discontinued to avoid the danger of non-trivial axiomatization
4462 that is not immediately visible. INCOMPATIBILITY, use regular
4463 'instance' command with proof. The required OFCLASS(...) theorem
4464 might be postulated via 'axiomatization' beforehand, or the proof
4465 finished trivially if the underlying class definition is made vacuous
4466 (without any assumptions). See also Isabelle/ML operations
4467 Axclass.class_axiomatization, Axclass.classrel_axiomatization,
4468 Axclass.arity_axiomatization.
4470 * Basic constants of Pure use more conventional names and are always
4471 qualified. Rare INCOMPATIBILITY, but with potentially serious
4472 consequences, notably for tools in Isabelle/ML. The following
4473 renaming needs to be applied:
4479 dummy_pattern ~> Pure.dummy_pattern
4481 Systematic porting works by using the following theory setup on a
4482 *previous* Isabelle version to introduce the new name accesses for the
4488 |> Sign.const_alias (Binding.qualify true "Pure" @{binding eq}) "=="
4489 |> Sign.const_alias (Binding.qualify true "Pure" @{binding imp}) "==>"
4490 |> Sign.const_alias (Binding.qualify true "Pure" @{binding all}) "all"
4491 |> Sign.restore_naming thy
4494 Thus ML antiquotations like @{const_name Pure.eq} may be used already.
4495 Later the application is moved to the current Isabelle version, and
4496 the auxiliary aliases are deleted.
4498 * Attributes "where" and "of" allow an optional context of local
4499 variables ('for' declaration): these variables become schematic in the
4500 instantiated theorem.
4502 * Obsolete attribute "standard" has been discontinued (legacy since
4503 Isabelle2012). Potential INCOMPATIBILITY, use explicit 'for' context
4504 where instantiations with schematic variables are intended (for
4505 declaration commands like 'lemmas' or attributes like "of"). The
4506 following temporary definition may help to port old applications:
4508 attribute_setup standard =
4509 "Scan.succeed (Thm.rule_attribute (K Drule.export_without_context))"
4511 * More thorough check of proof context for goal statements and
4512 attributed fact expressions (concerning background theory, declared
4513 hyps). Potential INCOMPATIBILITY, tools need to observe standard
4514 context discipline. See also Assumption.add_assumes and the more
4515 primitive Thm.assume_hyps.
4517 * Inner syntax token language allows regular quoted strings "..."
4518 (only makes sense in practice, if outer syntax is delimited
4519 differently, e.g. via cartouches).
4521 * Command 'print_term_bindings' supersedes 'print_binds' for clarity,
4522 but the latter is retained some time as Proof General legacy.
4524 * Code generator preprocessor: explicit control of simp tracing on a
4525 per-constant basis. See attribute "code_preproc".
4530 * Code generator: enforce case of identifiers only for strict target
4531 language requirements. INCOMPATIBILITY.
4533 * Code generator: explicit proof contexts in many ML interfaces.
4536 * Code generator: minimize exported identifiers by default. Minor
4539 * Code generation for SML and OCaml: dropped arcane "no_signatures"
4540 option. Minor INCOMPATIBILITY.
4542 * "declare [[code abort: ...]]" replaces "code_abort ...".
4545 * "declare [[code drop: ...]]" drops all code equations associated
4546 with the given constants.
4548 * Code generations are provided for make, fields, extend and truncate
4549 operations on records.
4551 * Command and antiquotation "value" are now hardcoded against nbe and
4552 ML. Minor INCOMPATIBILITY.
4554 * Renamed command 'enriched_type' to 'functor'. INCOMPATIBILITY.
4556 * The symbol "\<newline>" may be used within char or string literals
4557 to represent (Char Nibble0 NibbleA), i.e. ASCII newline.
4559 * Qualified String.implode and String.explode. INCOMPATIBILITY.
4561 * Simplifier: Enhanced solver of preconditions of rewrite rules can
4562 now deal with conjunctions. For help with converting proofs, the old
4563 behaviour of the simplifier can be restored like this: declare/using
4564 [[simp_legacy_precond]]. This configuration option will disappear
4565 again in the future. INCOMPATIBILITY.
4567 * Simproc "finite_Collect" is no longer enabled by default, due to
4568 spurious crashes and other surprises. Potential INCOMPATIBILITY.
4570 * Moved new (co)datatype package and its dependencies from session
4571 "HOL-BNF" to "HOL". The commands 'bnf', 'wrap_free_constructors',
4572 'datatype_new', 'codatatype', 'primcorec', 'primcorecursive' are now
4573 part of theory "Main".
4576 FunDef.thy ~> Fun_Def.thy (and Fun_Def_Base.thy)
4577 Library/Wfrec.thy ~> Wfrec.thy
4578 Library/Zorn.thy ~> Zorn.thy
4579 Cardinals/Order_Relation.thy ~> Order_Relation.thy
4580 Library/Order_Union.thy ~> Cardinals/Order_Union.thy
4581 Cardinals/Cardinal_Arithmetic_Base.thy ~> BNF_Cardinal_Arithmetic.thy
4582 Cardinals/Cardinal_Order_Relation_Base.thy ~> BNF_Cardinal_Order_Relation.thy
4583 Cardinals/Constructions_on_Wellorders_Base.thy ~> BNF_Constructions_on_Wellorders.thy
4584 Cardinals/Wellorder_Embedding_Base.thy ~> BNF_Wellorder_Embedding.thy
4585 Cardinals/Wellorder_Relation_Base.thy ~> BNF_Wellorder_Relation.thy
4586 BNF/Ctr_Sugar.thy ~> Ctr_Sugar.thy
4587 BNF/Basic_BNFs.thy ~> Basic_BNFs.thy
4588 BNF/BNF_Comp.thy ~> BNF_Comp.thy
4589 BNF/BNF_Def.thy ~> BNF_Def.thy
4590 BNF/BNF_FP_Base.thy ~> BNF_FP_Base.thy
4591 BNF/BNF_GFP.thy ~> BNF_GFP.thy
4592 BNF/BNF_LFP.thy ~> BNF_LFP.thy
4593 BNF/BNF_Util.thy ~> BNF_Util.thy
4594 BNF/Coinduction.thy ~> Coinduction.thy
4595 BNF/More_BNFs.thy ~> Library/More_BNFs.thy
4596 BNF/Countable_Type.thy ~> Library/Countable_Set_Type.thy
4597 BNF/Examples/* ~> BNF_Examples/*
4600 Wellorder_Extension.thy (split from Zorn.thy)
4601 Library/Cardinal_Notations.thy
4602 Library/BNF_Axomatization.thy
4603 BNF_Examples/Misc_Primcorec.thy
4604 BNF_Examples/Stream_Processor.thy
4606 Discontinued theories:
4608 BNF/Equiv_Relations_More.thy
4612 * New (co)datatype package:
4613 - Command 'primcorec' is fully implemented.
4614 - Command 'datatype_new' generates size functions ("size_xxx" and
4615 "size") as required by 'fun'.
4616 - BNFs are integrated with the Lifting tool and new-style
4617 (co)datatypes with Transfer.
4619 datatype_new_compat ~> datatype_compat
4620 primrec_new ~> primrec
4621 wrap_free_constructors ~> free_constructors
4623 - The generated constants "xxx_case" and "xxx_rec" have been renamed
4624 "case_xxx" and "rec_xxx" (e.g., "prod_case" ~> "case_prod").
4626 - The constant "xxx_(un)fold" and related theorems are no longer
4627 generated. Use "xxx_(co)rec" or define "xxx_(un)fold" manually
4628 using "prim(co)rec".
4630 - No discriminators are generated for nullary constructors by
4631 default, eliminating the need for the odd "=:" syntax.
4633 - No discriminators or selectors are generated by default by
4634 "datatype_new", unless custom names are specified or the new
4635 "discs_sels" option is passed.
4638 * Old datatype package:
4639 - The generated theorems "xxx.cases" and "xxx.recs" have been
4640 renamed "xxx.case" and "xxx.rec" (e.g., "sum.cases" ->
4641 "sum.case"). INCOMPATIBILITY.
4642 - The generated constants "xxx_case", "xxx_rec", and "xxx_size" have
4643 been renamed "case_xxx", "rec_xxx", and "size_xxx" (e.g.,
4644 "prod_case" ~> "case_prod"). INCOMPATIBILITY.
4646 * The types "'a list" and "'a option", their set and map functions,
4647 their relators, and their selectors are now produced using the new
4648 BNF-based datatype package.
4651 Option.set ~> set_option
4652 Option.map ~> map_option
4653 option_rel ~> rel_option
4656 set_def ~> set_rec[abs_def]
4657 map_def ~> map_rec[abs_def]
4658 Option.map_def ~> map_option_case[abs_def] (with "case_option" instead of "rec_option")
4659 option.recs ~> option.rec
4660 list_all2_def ~> list_all2_iff
4661 set.simps ~> set_simps (or the slightly different "list.set")
4662 map.simps ~> list.map
4663 hd.simps ~> list.sel(1)
4664 tl.simps ~> list.sel(2-3)
4665 the.simps ~> option.sel
4669 * The following map functions and relators have been renamed:
4671 map_pair ~> map_prod
4672 prod_rel ~> rel_prod
4676 filter_rel ~> rel_filter
4677 fset_rel ~> rel_fset (in "src/HOL/Library/FSet.thy")
4678 cset_rel ~> rel_cset (in "src/HOL/Library/Countable_Set_Type.thy")
4679 vset ~> rel_vset (in "src/HOL/Library/Quotient_Set.thy")
4683 * Lifting and Transfer:
4684 - a type variable as a raw type is supported
4685 - stronger reflexivity prover
4686 - rep_eq is always generated by lift_definition
4687 - setup for Lifting/Transfer is now automated for BNFs
4688 + holds for BNFs that do not contain a dead variable
4689 + relator_eq, relator_mono, relator_distr, relator_domain,
4690 relator_eq_onp, quot_map, transfer rules for bi_unique, bi_total,
4691 right_unique, right_total, left_unique, left_total are proved
4693 + definition of a predicator is generated automatically
4694 + simplification rules for a predicator definition are proved
4695 automatically for datatypes
4696 - consolidation of the setup of Lifting/Transfer
4697 + property that a relator preservers reflexivity is not needed any
4699 Minor INCOMPATIBILITY.
4700 + left_total and left_unique rules are now transfer rules
4701 (reflexivity_rule attribute not needed anymore)
4703 + Domainp does not have to be a separate assumption in
4704 relator_domain theorems (=> more natural statement)
4706 - registration of code equations is more robust
4707 Potential INCOMPATIBILITY.
4708 - respectfulness proof obligation is preprocessed to a more readable
4710 Potential INCOMPATIBILITY.
4711 - eq_onp is always unfolded in respectfulness proof obligation
4712 Potential INCOMPATIBILITY.
4713 - unregister lifting setup for Code_Numeral.integer and
4714 Code_Numeral.natural
4715 Potential INCOMPATIBILITY.
4716 - Lifting.invariant -> eq_onp
4719 * New internal SAT solver "cdclite" that produces models and proof
4720 traces. This solver replaces the internal SAT solvers "enumerate" and
4721 "dpll". Applications that explicitly used one of these two SAT
4722 solvers should use "cdclite" instead. In addition, "cdclite" is now
4723 the default SAT solver for the "sat" and "satx" proof methods and
4724 corresponding tactics; the old default can be restored using "declare
4725 [[sat_solver = zchaff_with_proofs]]". Minor INCOMPATIBILITY.
4727 * SMT module: A new version of the SMT module, temporarily called
4728 "SMT2", uses SMT-LIB 2 and supports recent versions of Z3 (e.g.,
4729 4.3). The new proof method is called "smt2". CVC3 and CVC4 are also
4730 supported as oracles. Yices is no longer supported, because no version
4731 of the solver can handle both SMT-LIB 2 and quantifiers.
4733 * Activation of Z3 now works via "z3_non_commercial" system option
4734 (without requiring restart), instead of former settings variable
4735 "Z3_NON_COMMERCIAL". The option can be edited in Isabelle/jEdit menu
4736 Plugin Options / Isabelle / General.
4739 - Z3 can now produce Isar proofs.
4741 . New SML-based learning algorithms eliminate the dependency on
4742 Python and increase performance and reliability.
4743 . MaSh and MeSh are now used by default together with the
4744 traditional MePo (Meng-Paulson) relevance filter. To disable
4745 MaSh, set the "MaSh" system option in Isabelle/jEdit Plugin
4746 Options / Isabelle / General to "none".
4750 isar_compress ~> compress
4755 * Removed solvers remote_cvc3 and remote_z3. Use cvc3 and z3 instead.
4758 - Fixed soundness bug whereby mutually recursive datatypes could
4759 take infinite values.
4760 - Fixed soundness bug with low-level number functions such as
4761 "Abs_Integ" and "Rep_Integ".
4762 - Removed "std" option.
4763 - Renamed "show_datatypes" to "show_types" and "hide_datatypes" to
4766 * Metis: Removed legacy proof method 'metisFT'. Use 'metis
4767 (full_types)' instead. INCOMPATIBILITY.
4769 * Try0: Added 'algebra' and 'meson' to the set of proof methods.
4771 * Adjustion of INF and SUP operations:
4772 - Elongated constants INFI and SUPR to INFIMUM and SUPREMUM.
4773 - Consolidated theorem names containing INFI and SUPR: have INF and
4774 SUP instead uniformly.
4775 - More aggressive normalization of expressions involving INF and Inf
4777 - INF_image and SUP_image do not unfold composition.
4778 - Dropped facts INF_comp, SUP_comp.
4779 - Default congruence rules strong_INF_cong and strong_SUP_cong, with
4780 simplifier implication in premises. Generalize and replace former
4785 * SUP and INF generalized to conditionally_complete_lattice.
4787 * Swapped orientation of facts image_comp and vimage_comp:
4789 image_compose ~> image_comp [symmetric]
4790 image_comp ~> image_comp [symmetric]
4791 vimage_compose ~> vimage_comp [symmetric]
4792 vimage_comp ~> vimage_comp [symmetric]
4796 * Theory reorganization: split of Big_Operators.thy into
4797 Groups_Big.thy and Lattices_Big.thy.
4799 * Consolidated some facts about big group operators:
4801 setsum_0' ~> setsum.neutral
4802 setsum_0 ~> setsum.neutral_const
4803 setsum_addf ~> setsum.distrib
4804 setsum_cartesian_product ~> setsum.cartesian_product
4805 setsum_cases ~> setsum.If_cases
4806 setsum_commute ~> setsum.commute
4807 setsum_cong ~> setsum.cong
4808 setsum_delta ~> setsum.delta
4809 setsum_delta' ~> setsum.delta'
4810 setsum_diff1' ~> setsum.remove
4811 setsum_empty ~> setsum.empty
4812 setsum_infinite ~> setsum.infinite
4813 setsum_insert ~> setsum.insert
4814 setsum_inter_restrict'' ~> setsum.inter_filter
4815 setsum_mono_zero_cong_left ~> setsum.mono_neutral_cong_left
4816 setsum_mono_zero_cong_right ~> setsum.mono_neutral_cong_right
4817 setsum_mono_zero_left ~> setsum.mono_neutral_left
4818 setsum_mono_zero_right ~> setsum.mono_neutral_right
4819 setsum_reindex ~> setsum.reindex
4820 setsum_reindex_cong ~> setsum.reindex_cong
4821 setsum_reindex_nonzero ~> setsum.reindex_nontrivial
4822 setsum_restrict_set ~> setsum.inter_restrict
4823 setsum_Plus ~> setsum.Plus
4824 setsum_setsum_restrict ~> setsum.commute_restrict
4825 setsum_Sigma ~> setsum.Sigma
4826 setsum_subset_diff ~> setsum.subset_diff
4827 setsum_Un_disjoint ~> setsum.union_disjoint
4828 setsum_UN_disjoint ~> setsum.UNION_disjoint
4829 setsum_Un_Int ~> setsum.union_inter
4830 setsum_Union_disjoint ~> setsum.Union_disjoint
4831 setsum_UNION_zero ~> setsum.Union_comp
4832 setsum_Un_zero ~> setsum.union_inter_neutral
4833 strong_setprod_cong ~> setprod.strong_cong
4834 strong_setsum_cong ~> setsum.strong_cong
4835 setprod_1' ~> setprod.neutral
4836 setprod_1 ~> setprod.neutral_const
4837 setprod_cartesian_product ~> setprod.cartesian_product
4838 setprod_cong ~> setprod.cong
4839 setprod_delta ~> setprod.delta
4840 setprod_delta' ~> setprod.delta'
4841 setprod_empty ~> setprod.empty
4842 setprod_infinite ~> setprod.infinite
4843 setprod_insert ~> setprod.insert
4844 setprod_mono_one_cong_left ~> setprod.mono_neutral_cong_left
4845 setprod_mono_one_cong_right ~> setprod.mono_neutral_cong_right
4846 setprod_mono_one_left ~> setprod.mono_neutral_left
4847 setprod_mono_one_right ~> setprod.mono_neutral_right
4848 setprod_reindex ~> setprod.reindex
4849 setprod_reindex_cong ~> setprod.reindex_cong
4850 setprod_reindex_nonzero ~> setprod.reindex_nontrivial
4851 setprod_Sigma ~> setprod.Sigma
4852 setprod_subset_diff ~> setprod.subset_diff
4853 setprod_timesf ~> setprod.distrib
4854 setprod_Un2 ~> setprod.union_diff2
4855 setprod_Un_disjoint ~> setprod.union_disjoint
4856 setprod_UN_disjoint ~> setprod.UNION_disjoint
4857 setprod_Un_Int ~> setprod.union_inter
4858 setprod_Union_disjoint ~> setprod.Union_disjoint
4859 setprod_Un_one ~> setprod.union_inter_neutral
4861 Dropped setsum_cong2 (simple variant of setsum.cong).
4862 Dropped setsum_inter_restrict' (simple variant of setsum.inter_restrict)
4863 Dropped setsum_reindex_id, setprod_reindex_id
4864 (simple variants of setsum.reindex [symmetric], setprod.reindex [symmetric]).
4868 * Abolished slightly odd global lattice interpretation for min/max.
4870 Fact consolidations:
4871 min_max.inf_assoc ~> min.assoc
4872 min_max.inf_commute ~> min.commute
4873 min_max.inf_left_commute ~> min.left_commute
4874 min_max.inf_idem ~> min.idem
4875 min_max.inf_left_idem ~> min.left_idem
4876 min_max.inf_right_idem ~> min.right_idem
4877 min_max.sup_assoc ~> max.assoc
4878 min_max.sup_commute ~> max.commute
4879 min_max.sup_left_commute ~> max.left_commute
4880 min_max.sup_idem ~> max.idem
4881 min_max.sup_left_idem ~> max.left_idem
4882 min_max.sup_inf_distrib1 ~> max_min_distrib2
4883 min_max.sup_inf_distrib2 ~> max_min_distrib1
4884 min_max.inf_sup_distrib1 ~> min_max_distrib2
4885 min_max.inf_sup_distrib2 ~> min_max_distrib1
4886 min_max.distrib ~> min_max_distribs
4887 min_max.inf_absorb1 ~> min.absorb1
4888 min_max.inf_absorb2 ~> min.absorb2
4889 min_max.sup_absorb1 ~> max.absorb1
4890 min_max.sup_absorb2 ~> max.absorb2
4891 min_max.le_iff_inf ~> min.absorb_iff1
4892 min_max.le_iff_sup ~> max.absorb_iff2
4893 min_max.inf_le1 ~> min.cobounded1
4894 min_max.inf_le2 ~> min.cobounded2
4895 le_maxI1, min_max.sup_ge1 ~> max.cobounded1
4896 le_maxI2, min_max.sup_ge2 ~> max.cobounded2
4897 min_max.le_infI1 ~> min.coboundedI1
4898 min_max.le_infI2 ~> min.coboundedI2
4899 min_max.le_supI1 ~> max.coboundedI1
4900 min_max.le_supI2 ~> max.coboundedI2
4901 min_max.less_infI1 ~> min.strict_coboundedI1
4902 min_max.less_infI2 ~> min.strict_coboundedI2
4903 min_max.less_supI1 ~> max.strict_coboundedI1
4904 min_max.less_supI2 ~> max.strict_coboundedI2
4905 min_max.inf_mono ~> min.mono
4906 min_max.sup_mono ~> max.mono
4907 min_max.le_infI, min_max.inf_greatest ~> min.boundedI
4908 min_max.le_supI, min_max.sup_least ~> max.boundedI
4909 min_max.le_inf_iff ~> min.bounded_iff
4910 min_max.le_sup_iff ~> max.bounded_iff
4912 For min_max.inf_sup_aci, prefer (one of) min.commute, min.assoc,
4913 min.left_commute, min.left_idem, max.commute, max.assoc,
4914 max.left_commute, max.left_idem directly.
4916 For min_max.inf_sup_ord, prefer (one of) min.cobounded1,
4917 min.cobounded2, max.cobounded1m max.cobounded2 directly.
4919 For min_ac or max_ac, prefer more general collection ac_simps.
4923 * Theorem disambiguation Inf_le_Sup (on finite sets) ~>
4924 Inf_fin_le_Sup_fin. INCOMPATIBILITY.
4926 * Qualified constant names Wellfounded.acc, Wellfounded.accp.
4929 * Fact generalization and consolidation:
4930 neq_one_mod_two, mod_2_not_eq_zero_eq_one_int ~> not_mod_2_eq_0_eq_1
4934 * Purely algebraic definition of even. Fact generalization and
4936 nat_even_iff_2_dvd, int_even_iff_2_dvd ~> even_iff_2_dvd
4937 even_zero_(nat|int) ~> even_zero
4941 * Abolished neg_numeral.
4942 - Canonical representation for minus one is "- 1".
4943 - Canonical representation for other negative numbers is "- (numeral _)".
4944 - When devising rule sets for number calculation, consider the
4945 following canonical cases: 0, 1, numeral _, - 1, - numeral _.
4946 - HOLogic.dest_number also recognizes numerals in non-canonical forms
4947 like "numeral One", "- numeral One", "- 0" and even "- ... - _".
4948 - Syntax for negative numerals is mere input syntax.
4952 * Reduced name variants for rules on associativity and commutativity:
4954 add_assoc ~> add.assoc
4955 add_commute ~> add.commute
4956 add_left_commute ~> add.left_commute
4957 mult_assoc ~> mult.assoc
4958 mult_commute ~> mult.commute
4959 mult_left_commute ~> mult.left_commute
4960 nat_add_assoc ~> add.assoc
4961 nat_add_commute ~> add.commute
4962 nat_add_left_commute ~> add.left_commute
4963 nat_mult_assoc ~> mult.assoc
4964 nat_mult_commute ~> mult.commute
4965 eq_assoc ~> iff_assoc
4966 eq_left_commute ~> iff_left_commute
4970 * Fact collections add_ac and mult_ac are considered old-fashioned.
4971 Prefer ac_simps instead, or specify rules
4972 (add|mult).(assoc|commute|left_commute) individually.
4974 * Elimination of fact duplicates:
4975 equals_zero_I ~> minus_unique
4976 diff_eq_0_iff_eq ~> right_minus_eq
4977 nat_infinite ~> infinite_UNIV_nat
4978 int_infinite ~> infinite_UNIV_int
4982 * Fact name consolidation:
4983 diff_def, diff_minus, ab_diff_minus ~> diff_conv_add_uminus
4984 minus_le_self_iff ~> neg_less_eq_nonneg
4985 le_minus_self_iff ~> less_eq_neg_nonpos
4986 neg_less_nonneg ~> neg_less_pos
4987 less_minus_self_iff ~> less_neg_neg [simp]
4991 * More simplification rules on unary and binary minus:
4992 add_diff_cancel, add_diff_cancel_left, add_le_same_cancel1,
4993 add_le_same_cancel2, add_less_same_cancel1, add_less_same_cancel2,
4994 add_minus_cancel, diff_add_cancel, le_add_same_cancel1,
4995 le_add_same_cancel2, less_add_same_cancel1, less_add_same_cancel2,
4996 minus_add_cancel, uminus_add_conv_diff. These correspondingly have
4997 been taken away from fact collections algebra_simps and field_simps.
5000 To restore proofs, the following patterns are helpful:
5002 a) Arbitrary failing proof not involving "diff_def":
5003 Consider simplification with algebra_simps or field_simps.
5005 b) Lifting rules from addition to subtraction:
5006 Try with "using <rule for addition> of [... "- _" ...]" by simp".
5008 c) Simplification with "diff_def": just drop "diff_def".
5009 Consider simplification with algebra_simps or field_simps;
5010 or the brute way with
5011 "simp add: diff_conv_add_uminus del: add_uminus_conv_diff".
5013 * Introduce bdd_above and bdd_below in theory
5014 Conditionally_Complete_Lattices, use them instead of explicitly
5015 stating boundedness of sets.
5017 * ccpo.admissible quantifies only over non-empty chains to allow more
5018 syntax-directed proof rules; the case of the empty chain shows up as
5019 additional case in fixpoint induction proofs. INCOMPATIBILITY.
5021 * Removed and renamed theorems in Series:
5022 summable_le ~> suminf_le
5023 suminf_le ~> suminf_le_const
5024 series_pos_le ~> setsum_le_suminf
5025 series_pos_less ~> setsum_less_suminf
5026 suminf_ge_zero ~> suminf_nonneg
5027 suminf_gt_zero ~> suminf_pos
5028 suminf_gt_zero_iff ~> suminf_pos_iff
5029 summable_sumr_LIMSEQ_suminf ~> summable_LIMSEQ
5030 suminf_0_le ~> suminf_nonneg [rotate]
5031 pos_summable ~> summableI_nonneg_bounded
5032 ratio_test ~> summable_ratio_test
5034 removed series_zero, replaced by sums_finite
5036 removed auxiliary lemmas:
5038 sumr_offset, sumr_offset2, sumr_offset3, sumr_offset4, sumr_group,
5039 half, le_Suc_ex_iff, lemma_realpow_diff_sumr,
5040 real_setsum_nat_ivl_bounded, summable_le2, ratio_test_lemma2,
5041 sumr_minus_one_realpow_zerom, sumr_one_lb_realpow_zero,
5042 summable_convergent_sumr_iff, sumr_diff_mult_const
5046 * Replace (F)DERIV syntax by has_derivative:
5047 - "(f has_derivative f') (at x within s)" replaces "FDERIV f x : s : f'"
5049 - "(f has_field_derivative f') (at x within s)" replaces "DERIV f x : s : f'"
5051 - "f differentiable at x within s" replaces "_ differentiable _ in _" syntax
5053 - removed constant isDiff
5055 - "DERIV f x : f'" and "FDERIV f x : f'" syntax is only available as
5058 - "DERIV f x : s : f'" and "FDERIV f x : s : f'" syntax removed.
5060 - Renamed FDERIV_... lemmas to has_derivative_...
5062 - renamed deriv (the syntax constant used for "DERIV _ _ :> _") to DERIV
5064 - removed DERIV_intros, has_derivative_eq_intros
5066 - introduced derivative_intros and deriative_eq_intros which
5067 includes now rules for DERIV, has_derivative and
5068 has_vector_derivative.
5071 differentiable_def ~> real_differentiable_def
5072 differentiableE ~> real_differentiableE
5073 fderiv_def ~> has_derivative_at
5074 field_fderiv_def ~> field_has_derivative_at
5075 isDiff_der ~> differentiable_def
5076 deriv_fderiv ~> has_field_derivative_def
5077 deriv_def ~> DERIV_def
5081 * Include more theorems in continuous_intros. Remove the
5082 continuous_on_intros, isCont_intros collections, these facts are now
5083 in continuous_intros.
5085 * Theorems about complex numbers are now stated only using Re and Im,
5086 the Complex constructor is not used anymore. It is possible to use
5087 primcorec to defined the behaviour of a complex-valued function.
5089 Removed theorems about the Complex constructor from the simpset, they
5090 are available as the lemma collection legacy_Complex_simps. This
5093 i_complex_of_real: "ii * complex_of_real r = Complex 0 r".
5095 Instead the reverse direction is supported with
5096 Complex_eq: "Complex a b = a + \<i> * b"
5098 Moved csqrt from Fundamental_Algebra_Theorem to Complex.
5101 Re/Im ~> complex.sel
5102 complex_Re/Im_zero ~> zero_complex.sel
5103 complex_Re/Im_add ~> plus_complex.sel
5104 complex_Re/Im_minus ~> uminus_complex.sel
5105 complex_Re/Im_diff ~> minus_complex.sel
5106 complex_Re/Im_one ~> one_complex.sel
5107 complex_Re/Im_mult ~> times_complex.sel
5108 complex_Re/Im_inverse ~> inverse_complex.sel
5109 complex_Re/Im_scaleR ~> scaleR_complex.sel
5110 complex_Re/Im_i ~> ii.sel
5111 complex_Re/Im_cnj ~> cnj.sel
5112 Re/Im_cis ~> cis.sel
5114 complex_divide_def ~> divide_complex_def
5115 complex_norm_def ~> norm_complex_def
5116 cmod_def ~> norm_complex_de
5130 * Theory Lubs moved HOL image to HOL-Library. It is replaced by
5131 Conditionally_Complete_Lattices. INCOMPATIBILITY.
5133 * HOL-Library: new theory src/HOL/Library/Tree.thy.
5135 * HOL-Library: removed theory src/HOL/Library/Kleene_Algebra.thy; it
5136 is subsumed by session Kleene_Algebra in AFP.
5138 * HOL-Library / theory RBT: various constants and facts are hidden;
5139 lifting setup is unregistered. INCOMPATIBILITY.
5141 * HOL-Cardinals: new theory src/HOL/Cardinals/Ordinal_Arithmetic.thy.
5143 * HOL-Word: bit representations prefer type bool over type bit.
5147 - Abandoned fact collection "word_arith_alts", which is a duplicate
5148 of "word_arith_wis".
5149 - Dropped first (duplicated) element in fact collections
5150 "sint_word_ariths", "word_arith_alts", "uint_word_ariths",
5151 "uint_word_arith_bintrs".
5153 * HOL-Number_Theory:
5154 - consolidated the proofs of the binomial theorem
5155 - the function fib is again of type nat => nat and not overloaded
5156 - no more references to Old_Number_Theory in the HOL libraries
5161 * HOL-Multivariate_Analysis:
5162 - Type class ordered_real_vector for ordered vector spaces.
5163 - New theory Complex_Basic_Analysis defining complex derivatives,
5164 holomorphic functions, etc., ported from HOL Light's canal.ml.
5165 - Changed order of ordered_euclidean_space to be compatible with
5166 pointwise ordering on products. Therefore instance of
5167 conditionally_complete_lattice and ordered_real_vector.
5168 INCOMPATIBILITY: use box instead of greaterThanLessThan or
5169 explicit set-comprehensions with eucl_less for other (half-)open
5171 - removed dependencies on type class ordered_euclidean_space with
5172 introduction of "cbox" on euclidean_space
5175 mem_interval ~> mem_box
5176 interval_eq_empty ~> box_eq_empty
5177 interval_ne_empty ~> box_ne_empty
5178 interval_sing(1) ~> cbox_sing
5179 interval_sing(2) ~> box_sing
5180 subset_interval_imp ~> subset_box_imp
5181 subset_interval ~> subset_box
5182 open_interval ~> open_box
5183 closed_interval ~> closed_cbox
5184 interior_closed_interval ~> interior_cbox
5185 bounded_closed_interval ~> bounded_cbox
5186 compact_interval ~> compact_cbox
5187 bounded_subset_closed_interval_symmetric ~> bounded_subset_cbox_symmetric
5188 bounded_subset_closed_interval ~> bounded_subset_cbox
5189 mem_interval_componentwiseI ~> mem_box_componentwiseI
5190 convex_box ~> convex_prod
5191 rel_interior_real_interval ~> rel_interior_real_box
5192 convex_interval ~> convex_box
5193 convex_hull_eq_real_interval ~> convex_hull_eq_real_cbox
5194 frechet_derivative_within_closed_interval ~> frechet_derivative_within_cbox
5195 content_closed_interval' ~> content_cbox'
5196 elementary_subset_interval ~> elementary_subset_box
5197 diameter_closed_interval ~> diameter_cbox
5198 frontier_closed_interval ~> frontier_cbox
5199 frontier_open_interval ~> frontier_box
5200 bounded_subset_open_interval_symmetric ~> bounded_subset_box_symmetric
5201 closure_open_interval ~> closure_box
5202 open_closed_interval_convex ~> open_cbox_convex
5203 open_interval_midpoint ~> box_midpoint
5204 content_image_affinity_interval ~> content_image_affinity_cbox
5205 is_interval_interval ~> is_interval_cbox + is_interval_box + is_interval_closed_interval
5206 bounded_interval ~> bounded_closed_interval + bounded_boxes
5208 - respective theorems for intervals over the reals:
5209 content_closed_interval + content_cbox
5210 has_integral + has_integral_real
5211 fine_division_exists + fine_division_exists_real
5212 has_integral_null + has_integral_null_real
5213 tagged_division_union_interval + tagged_division_union_interval_real
5214 has_integral_const + has_integral_const_real
5215 integral_const + integral_const_real
5216 has_integral_bound + has_integral_bound_real
5217 integrable_continuous + integrable_continuous_real
5218 integrable_subinterval + integrable_subinterval_real
5219 has_integral_reflect_lemma + has_integral_reflect_lemma_real
5220 integrable_reflect + integrable_reflect_real
5221 integral_reflect + integral_reflect_real
5222 image_affinity_interval + image_affinity_cbox
5223 image_smult_interval + image_smult_cbox
5224 integrable_const + integrable_const_ivl
5225 integrable_on_subinterval + integrable_on_subcbox
5228 derivative_linear ~> has_derivative_bounded_linear
5229 derivative_is_linear ~> has_derivative_linear
5230 bounded_linear_imp_linear ~> bounded_linear.linear
5233 - Renamed positive_integral to nn_integral:
5235 . Renamed all lemmas "*positive_integral*" to *nn_integral*"
5236 positive_integral_positive ~> nn_integral_nonneg
5238 . Renamed abbreviation integral\<^sup>P to integral\<^sup>N.
5240 - replaced the Lebesgue integral on real numbers by the more general
5241 Bochner integral for functions into a real-normed vector space.
5243 integral_zero ~> integral_zero / integrable_zero
5244 integral_minus ~> integral_minus / integrable_minus
5245 integral_add ~> integral_add / integrable_add
5246 integral_diff ~> integral_diff / integrable_diff
5247 integral_setsum ~> integral_setsum / integrable_setsum
5248 integral_multc ~> integral_mult_left / integrable_mult_left
5249 integral_cmult ~> integral_mult_right / integrable_mult_right
5250 integral_triangle_inequality~> integral_norm_bound
5251 integrable_nonneg ~> integrableI_nonneg
5252 integral_positive ~> integral_nonneg_AE
5253 integrable_abs_iff ~> integrable_abs_cancel
5254 positive_integral_lim_INF ~> nn_integral_liminf
5255 lebesgue_real_affine ~> lborel_real_affine
5256 borel_integral_has_integral ~> has_integral_lebesgue_integral
5257 integral_indicator ~>
5258 integral_real_indicator / integrable_real_indicator
5259 positive_integral_fst ~> nn_integral_fst'
5260 positive_integral_fst_measurable ~> nn_integral_fst
5261 positive_integral_snd_measurable ~> nn_integral_snd
5263 integrable_fst_measurable ~>
5264 integral_fst / integrable_fst / AE_integrable_fst
5266 integrable_snd_measurable ~>
5267 integral_snd / integrable_snd / AE_integrable_snd
5269 integral_monotone_convergence ~>
5270 integral_monotone_convergence / integrable_monotone_convergence
5272 integral_monotone_convergence_at_top ~>
5273 integral_monotone_convergence_at_top /
5274 integrable_monotone_convergence_at_top
5276 has_integral_iff_positive_integral_lebesgue ~>
5277 has_integral_iff_has_bochner_integral_lebesgue_nonneg
5279 lebesgue_integral_has_integral ~>
5280 has_integral_integrable_lebesgue_nonneg
5282 positive_integral_lebesgue_has_integral ~>
5283 integral_has_integral_lebesgue_nonneg /
5284 integrable_has_integral_lebesgue_nonneg
5286 lebesgue_integral_real_affine ~>
5287 nn_integral_real_affine
5289 has_integral_iff_positive_integral_lborel ~>
5290 integral_has_integral_nonneg / integrable_has_integral_nonneg
5292 The following theorems where removed:
5294 lebesgue_integral_nonneg
5295 lebesgue_integral_uminus
5296 lebesgue_integral_cmult
5297 lebesgue_integral_multc
5298 lebesgue_integral_cmult_nonneg
5299 integral_cmul_indicator
5302 - Formalized properties about exponentially, Erlang, and normal
5303 distributed random variables.
5305 * HOL-Decision_Procs: Separate command 'approximate' for approximative
5306 computation in src/HOL/Decision_Procs/Approximation. Minor
5312 * The signature and semantics of Document.Snapshot.cumulate_markup /
5313 select_markup have been clarified. Markup is now traversed in the
5314 order of reports given by the prover: later markup is usually more
5315 specific and may override results accumulated so far. The elements
5316 guard is mandatory and checked precisely. Subtle INCOMPATIBILITY.
5318 * Substantial reworking of internal PIDE protocol communication
5319 channels. INCOMPATIBILITY.
5324 * Subtle change of semantics of Thm.eq_thm: theory stamps are not
5325 compared (according to Thm.thm_ord), but assumed to be covered by the
5326 current background theory. Thus equivalent data produced in different
5327 branches of the theory graph usually coincides (e.g. relevant for
5328 theory merge). Note that the softer Thm.eq_thm_prop is often more
5329 appropriate than Thm.eq_thm.
5331 * Proper context for basic Simplifier operations: rewrite_rule,
5332 rewrite_goals_rule, rewrite_goals_tac etc. INCOMPATIBILITY, need to
5333 pass runtime Proof.context (and ensure that the simplified entity
5334 actually belongs to it).
5336 * Proper context discipline for read_instantiate and instantiate_tac:
5337 variables that are meant to become schematic need to be given as
5338 fixed, and are generalized by the explicit context of local variables.
5339 This corresponds to Isar attributes "where" and "of" with 'for'
5340 declaration. INCOMPATIBILITY, also due to potential change of indices
5341 of schematic variables.
5343 * Moved ML_Compiler.exn_trace and other operations on exceptions to
5344 structure Runtime. Minor INCOMPATIBILITY.
5346 * Discontinued old Toplevel.debug in favour of system option
5347 "ML_exception_trace", which may be also declared within the context
5348 via "declare [[ML_exception_trace = true]]". Minor INCOMPATIBILITY.
5350 * Renamed configuration option "ML_trace" to "ML_source_trace". Minor
5353 * Configuration option "ML_print_depth" controls the pretty-printing
5354 depth of the ML compiler within the context. The old print_depth in
5355 ML is still available as default_print_depth, but rarely used. Minor
5358 * Toplevel function "use" refers to raw ML bootstrap environment,
5359 without Isar context nor antiquotations. Potential INCOMPATIBILITY.
5360 Note that 'ML_file' is the canonical command to load ML files into the
5363 * Simplified programming interface to define ML antiquotations, see
5364 structure ML_Antiquotation. Minor INCOMPATIBILITY.
5366 * ML antiquotation @{here} refers to its source position, which is
5367 occasionally useful for experimentation and diagnostic purposes.
5369 * ML antiquotation @{path} produces a Path.T value, similarly to
5370 Path.explode, but with compile-time check against the file-system and
5371 some PIDE markup. Note that unlike theory source, ML does not have a
5372 well-defined master directory, so an absolute symbolic path
5373 specification is usually required, e.g. "~~/src/HOL".
5375 * ML antiquotation @{print} inlines a function to print an arbitrary
5376 ML value, which is occasionally useful for diagnostic or demonstration
5382 * Proof General with its traditional helper scripts is now an optional
5383 Isabelle component, e.g. see ProofGeneral-4.2-2 from the Isabelle
5384 component repository http://isabelle.in.tum.de/components/. Note that
5385 the "system" manual provides general explanations about add-on
5386 components, especially those that are not bundled with the release.
5388 * The raw Isabelle process executable has been renamed from
5389 "isabelle-process" to "isabelle_process", which conforms to common
5390 shell naming conventions, and allows to define a shell function within
5391 the Isabelle environment to avoid dynamic path lookup. Rare
5392 incompatibility for old tools that do not use the ISABELLE_PROCESS
5395 * Former "isabelle tty" has been superseded by "isabelle console",
5396 with implicit build like "isabelle jedit", and without the mostly
5397 obsolete Isar TTY loop.
5399 * Simplified "isabelle display" tool. Settings variables DVI_VIEWER
5400 and PDF_VIEWER now refer to the actual programs, not shell
5401 command-lines. Discontinued option -c: invocation may be asynchronous
5402 via desktop environment, without any special precautions. Potential
5403 INCOMPATIBILITY with ambitious private settings.
5405 * Removed obsolete "isabelle unsymbolize". Note that the usual format
5406 for email communication is the Unicode rendering of Isabelle symbols,
5407 as produced by Isabelle/jEdit, for example.
5409 * Removed obsolete tool "wwwfind". Similar functionality may be
5410 integrated into Isabelle/jEdit eventually.
5412 * Improved 'display_drafts' concerning desktop integration and
5413 repeated invocation in PIDE front-end: re-use single file
5414 $ISABELLE_HOME_USER/tmp/drafts.pdf and corresponding views.
5416 * Session ROOT specifications require explicit 'document_files' for
5417 robust dependencies on LaTeX sources. Only these explicitly given
5418 files are copied to the document output directory, before document
5419 processing is started.
5421 * Windows: support for regular TeX installation (e.g. MiKTeX) instead
5422 of TeX Live from Cygwin.
5426 New in Isabelle2013-2 (December 2013)
5427 -------------------------------------
5429 *** Prover IDE -- Isabelle/Scala/jEdit ***
5431 * More robust editing of running commands with internal forks,
5432 e.g. non-terminating 'by' steps.
5434 * More relaxed Sledgehammer panel: avoid repeated application of query
5435 after edits surrounding the command location.
5437 * More status information about commands that are interrupted
5438 accidentally (via physical event or Poly/ML runtime system signal,
5439 e.g. out-of-memory).
5444 * More robust termination of external processes managed by
5445 Isabelle/ML: support cancellation of tasks within the range of
5446 milliseconds, as required for PIDE document editing with automatically
5447 tried tools (e.g. Sledgehammer).
5449 * Reactivated Isabelle/Scala kill command for external processes on
5450 Mac OS X, which was accidentally broken in Isabelle2013-1 due to a
5451 workaround for some Debian/Ubuntu Linux versions from 2013.
5455 New in Isabelle2013-1 (November 2013)
5456 -------------------------------------
5460 * Discontinued obsolete 'uses' within theory header. Note that
5461 commands like 'ML_file' work without separate declaration of file
5462 dependencies. Minor INCOMPATIBILITY.
5464 * Discontinued redundant 'use' command, which was superseded by
5465 'ML_file' in Isabelle2013. Minor INCOMPATIBILITY.
5467 * Simplified subscripts within identifiers, using plain \<^sub>
5468 instead of the second copy \<^isub> and \<^isup>. Superscripts are
5469 only for literal tokens within notation; explicit mixfix annotations
5470 for consts or fixed variables may be used as fall-back for unusual
5471 names. Obsolete \<twosuperior> has been expanded to \<^sup>2 in
5472 Isabelle/HOL. INCOMPATIBILITY, use "isabelle update_sub_sup" to
5473 standardize symbols as a starting point for further manual cleanup.
5474 The ML reference variable "legacy_isub_isup" may be set as temporary
5475 workaround, to make the prover accept a subset of the old identifier
5478 * Document antiquotations: term style "isub" has been renamed to
5479 "sub". Minor INCOMPATIBILITY.
5481 * Uniform management of "quick_and_dirty" as system option (see also
5482 "isabelle options"), configuration option within the context (see also
5483 Config.get in Isabelle/ML), and attribute in Isabelle/Isar. Minor
5484 INCOMPATIBILITY, need to use more official Isabelle means to access
5485 quick_and_dirty, instead of historical poking into mutable reference.
5487 * Renamed command 'print_configs' to 'print_options'. Minor
5490 * Proper diagnostic command 'print_state'. Old 'pr' (with its
5491 implicit change of some global references) is retained for now as
5492 control command, e.g. for ProofGeneral 3.7.x.
5494 * Discontinued 'print_drafts' command with its old-fashioned PS output
5495 and Unix command-line print spooling. Minor INCOMPATIBILITY: use
5496 'display_drafts' instead and print via the regular document viewer.
5498 * Updated and extended "isar-ref" and "implementation" manual,
5499 eliminated old "ref" manual.
5502 *** Prover IDE -- Isabelle/Scala/jEdit ***
5504 * New manual "jedit" for Isabelle/jEdit, see isabelle doc or
5505 Documentation panel.
5507 * Dockable window "Documentation" provides access to Isabelle
5510 * Dockable window "Find" provides query operations for formal entities
5511 (GUI front-end to 'find_theorems' command).
5513 * Dockable window "Sledgehammer" manages asynchronous / parallel
5514 sledgehammer runs over existing document sources, independently of
5515 normal editing and checking process.
5517 * Dockable window "Timing" provides an overview of relevant command
5518 timing information, depending on option jedit_timing_threshold. The
5519 same timing information is shown in the extended tooltip of the
5520 command keyword, when hovering the mouse over it while the CONTROL or
5521 COMMAND modifier is pressed.
5523 * Improved dockable window "Theories": Continuous checking of proof
5524 document (visible and required parts) may be controlled explicitly,
5525 using check box or shortcut "C+e ENTER". Individual theory nodes may
5526 be marked explicitly as required and checked in full, using check box
5527 or shortcut "C+e SPACE".
5529 * Improved completion mechanism, which is now managed by the
5530 Isabelle/jEdit plugin instead of SideKick. Refined table of Isabelle
5531 symbol abbreviations (see $ISABELLE_HOME/etc/symbols).
5533 * Standard jEdit keyboard shortcut C+b complete-word is remapped to
5534 isabelle.complete for explicit completion in Isabelle sources.
5535 INCOMPATIBILITY wrt. jEdit defaults, may have to invent new shortcuts
5536 to resolve conflict.
5538 * Improved support of various "minor modes" for Isabelle NEWS,
5539 options, session ROOT etc., with completion and SideKick tree view.
5541 * Strictly monotonic document update, without premature cancellation of
5542 running transactions that are still needed: avoid reset/restart of
5543 such command executions while editing.
5545 * Support for asynchronous print functions, as overlay to existing
5548 * Support for automatic tools in HOL, which try to prove or disprove
5549 toplevel theorem statements.
5551 * Action isabelle.reset-font-size resets main text area font size
5552 according to Isabelle/Scala plugin option "jedit_font_reset_size" (see
5553 also "Plugin Options / Isabelle / General"). It can be bound to some
5554 keyboard shortcut by the user (e.g. C+0 and/or C+NUMPAD0).
5556 * File specifications in jEdit (e.g. file browser) may refer to
5557 $ISABELLE_HOME and $ISABELLE_HOME_USER on all platforms. Discontinued
5558 obsolete $ISABELLE_HOME_WINDOWS variable.
5560 * Improved support for Linux look-and-feel "GTK+", see also "Utilities
5561 / Global Options / Appearance".
5563 * Improved support of native Mac OS X functionality via "MacOSX"
5564 plugin, which is now enabled by default.
5569 * Commands 'interpretation' and 'sublocale' are now target-sensitive.
5570 In particular, 'interpretation' allows for non-persistent
5571 interpretation within "context ... begin ... end" blocks offering a
5572 light-weight alternative to 'sublocale'. See "isar-ref" manual for
5575 * Improved locales diagnostic command 'print_dependencies'.
5577 * Discontinued obsolete 'axioms' command, which has been marked as
5578 legacy since Isabelle2009-2. INCOMPATIBILITY, use 'axiomatization'
5579 instead, while observing its uniform scope for polymorphism.
5581 * Discontinued empty name bindings in 'axiomatization'.
5584 * System option "proofs" has been discontinued. Instead the global
5585 state of Proofterm.proofs is persistently compiled into logic images
5586 as required, notably HOL-Proofs. Users no longer need to change
5587 Proofterm.proofs dynamically. Minor INCOMPATIBILITY.
5589 * Syntax translation functions (print_translation etc.) always depend
5590 on Proof.context. Discontinued former "(advanced)" option -- this is
5591 now the default. Minor INCOMPATIBILITY.
5593 * Former global reference trace_unify_fail is now available as
5594 configuration option "unify_trace_failure" (global context only).
5596 * SELECT_GOAL now retains the syntactic context of the overall goal
5597 state (schematic variables etc.). Potential INCOMPATIBILITY in rare
5603 * Stronger precedence of syntax for big intersection and union on
5604 sets, in accordance with corresponding lattice operations.
5607 * Notation "{p:A. P}" now allows tuple patterns as well.
5609 * Nested case expressions are now translated in a separate check phase
5610 rather than during parsing. The data for case combinators is separated
5611 from the datatype package. The declaration attribute
5612 "case_translation" can be used to register new case combinators:
5614 declare [[case_translation case_combinator constructor1 ... constructorN]]
5617 - 'code_printing' unifies 'code_const' / 'code_type' / 'code_class' /
5619 - 'code_identifier' declares name hints for arbitrary identifiers in
5620 generated code, subsuming 'code_modulename'.
5622 See the isar-ref manual for syntax diagrams, and the HOL theories for
5625 * Attibute 'code': 'code' now declares concrete and abstract code
5626 equations uniformly. Use explicit 'code equation' and 'code abstract'
5627 to distinguish both when desired.
5629 * Discontinued theories Code_Integer and Efficient_Nat by a more
5630 fine-grain stack of theories Code_Target_Int, Code_Binary_Nat,
5631 Code_Target_Nat and Code_Target_Numeral. See the tutorial on code
5632 generation for details. INCOMPATIBILITY.
5634 * Numeric types are mapped by default to target language numerals:
5635 natural (replaces former code_numeral) and integer (replaces former
5636 code_int). Conversions are available as integer_of_natural /
5637 natural_of_integer / integer_of_nat / nat_of_integer (in HOL) and
5638 Code_Numeral.integer_of_natural / Code_Numeral.natural_of_integer (in
5639 ML). INCOMPATIBILITY.
5641 * Function package: For mutually recursive functions f and g, separate
5642 cases rules f.cases and g.cases are generated instead of unusable
5643 f_g.cases which exposed internal sum types. Potential INCOMPATIBILITY,
5644 in the case that the unusable rule was used nevertheless.
5646 * Function package: For each function f, new rules f.elims are
5647 generated, which eliminate equalities of the form "f x = t".
5649 * New command 'fun_cases' derives ad-hoc elimination rules for
5650 function equations as simplified instances of f.elims, analogous to
5651 inductive_cases. See ~~/src/HOL/ex/Fundefs.thy for some examples.
5654 - parametrized correspondence relations are now supported:
5655 + parametricity theorems for the raw term can be specified in
5656 the command lift_definition, which allow us to generate stronger
5658 + setup_lifting generates stronger transfer rules if parametric
5659 correspondence relation can be generated
5660 + various new properties of the relator must be specified to support
5662 + parametricity theorem for the Quotient relation can be specified
5663 - setup_lifting generates domain rules for the Transfer package
5664 - stronger reflexivity prover of respectfulness theorems for type
5666 - ===> and --> are now local. The symbols can be introduced
5667 by interpreting the locale lifting_syntax (typically in an
5669 - Lifting/Transfer relevant parts of Library/Quotient_* are now in
5670 Main. Potential INCOMPATIBILITY
5671 - new commands for restoring and deleting Lifting/Transfer context:
5672 lifting_forget, lifting_update
5673 - the command print_quotmaps was renamed to print_quot_maps.
5677 - better support for domains in Transfer: replace Domainp T
5678 by the actual invariant in a transferred goal
5679 - transfer rules can have as assumptions other transfer rules
5680 - Experimental support for transferring from the raw level to the
5681 abstract level: Transfer.transferred attribute
5682 - Attribute version of the transfer method: untransferred attribute
5684 * Reification and reflection:
5685 - Reification is now directly available in HOL-Main in structure
5687 - Reflection now handles multiple lists with variables also.
5688 - The whole reflection stack has been decomposed into conversions.
5691 * Revised devices for recursive definitions over finite sets:
5692 - Only one fundamental fold combinator on finite set remains:
5693 Finite_Set.fold :: ('a => 'b => 'b) => 'b => 'a set => 'b
5694 This is now identity on infinite sets.
5695 - Locales ("mini packages") for fundamental definitions with
5696 Finite_Set.fold: folding, folding_idem.
5697 - Locales comm_monoid_set, semilattice_order_set and
5698 semilattice_neutr_order_set for big operators on sets.
5699 See theory Big_Operators for canonical examples.
5700 Note that foundational constants comm_monoid_set.F and
5701 semilattice_set.F correspond to former combinators fold_image
5702 and fold1 respectively. These are now gone. You may use
5703 those foundational constants as substitutes, but it is
5704 preferable to interpret the above locales accordingly.
5705 - Dropped class ab_semigroup_idem_mult (special case of lattice,
5706 no longer needed in connection with Finite_Set.fold etc.)
5708 card.union_inter ~> card_Un_Int [symmetric]
5709 card.union_disjoint ~> card_Un_disjoint
5712 * Locale hierarchy for abstract orderings and (semi)lattices.
5714 * Complete_Partial_Order.admissible is defined outside the type class
5715 ccpo, but with mandatory prefix ccpo. Admissibility theorems lose the
5716 class predicate assumption or sort constraint when possible.
5719 * Introduce type class "conditionally_complete_lattice": Like a
5720 complete lattice but does not assume the existence of the top and
5721 bottom elements. Allows to generalize some lemmas about reals and
5722 extended reals. Removed SupInf and replaced it by the instantiation
5723 of conditionally_complete_lattice for real. Renamed lemmas about
5724 conditionally-complete lattice from Sup_... to cSup_... and from
5725 Inf_... to cInf_... to avoid hidding of similar complete lattice
5728 * Introduce type class linear_continuum as combination of
5729 conditionally-complete lattices and inner dense linorders which have
5730 more than one element. INCOMPATIBILITY.
5732 * Introduced type classes order_top and order_bot. The old classes top
5733 and bot only contain the syntax without assumptions. INCOMPATIBILITY:
5734 Rename bot -> order_bot, top -> order_top
5736 * Introduce type classes "no_top" and "no_bot" for orderings without
5737 top and bottom elements.
5739 * Split dense_linorder into inner_dense_order and no_top, no_bot.
5741 * Complex_Main: Unify and move various concepts from
5742 HOL-Multivariate_Analysis to HOL-Complex_Main.
5744 - Introduce type class (lin)order_topology and
5745 linear_continuum_topology. Allows to generalize theorems about
5746 limits and order. Instances are reals and extended reals.
5748 - continuous and continuos_on from Multivariate_Analysis:
5749 "continuous" is the continuity of a function at a filter. "isCont"
5750 is now an abbrevitation: "isCont x f == continuous (at _) f".
5752 Generalized continuity lemmas from isCont to continuous on an
5755 - compact from Multivariate_Analysis. Use Bolzano's lemma to prove
5756 compactness of closed intervals on reals. Continuous functions
5757 attain infimum and supremum on compact sets. The inverse of a
5758 continuous function is continuous, when the function is continuous
5761 - connected from Multivariate_Analysis. Use it to prove the
5762 intermediate value theorem. Show connectedness of intervals on
5763 linear_continuum_topology).
5765 - first_countable_topology from Multivariate_Analysis. Is used to
5766 show equivalence of properties on the neighbourhood filter of x and
5767 on all sequences converging to x.
5769 - FDERIV: Definition of has_derivative moved to Deriv.thy. Moved
5770 theorems from Library/FDERIV.thy to Deriv.thy and base the
5771 definition of DERIV on FDERIV. Add variants of DERIV and FDERIV
5772 which are restricted to sets, i.e. to represent derivatives from
5775 - Removed the within-filter. It is replaced by the principal filter:
5777 F within X = inf F (principal X)
5779 - Introduce "at x within U" as a single constant, "at x" is now an
5780 abbreviation for "at x within UNIV"
5782 - Introduce named theorem collections tendsto_intros,
5783 continuous_intros, continuous_on_intros and FDERIV_intros. Theorems
5784 in tendsto_intros (or FDERIV_intros) are also available as
5785 tendsto_eq_intros (or FDERIV_eq_intros) where the right-hand side
5786 is replaced by a congruence rule. This allows to apply them as
5787 intro rules and then proving equivalence by the simplifier.
5789 - Restructured theories in HOL-Complex_Main:
5791 + Moved RealDef and RComplete into Real
5793 + Introduced Topological_Spaces and moved theorems about
5794 topological spaces, filters, limits and continuity to it
5796 + Renamed RealVector to Real_Vector_Spaces
5798 + Split Lim, SEQ, Series into Topological_Spaces,
5799 Real_Vector_Spaces, and Limits
5801 + Moved Ln and Log to Transcendental
5803 + Moved theorems about continuity from Deriv to Topological_Spaces
5805 - Remove various auxiliary lemmas.
5810 - Added option "spy".
5811 - Reduce incidence of "too high arity" errors.
5815 isar_shrink ~> isar_compress
5817 - Added options "isar_try0", "spy".
5818 - Better support for "isar_proofs".
5819 - MaSh has been fined-tuned and now runs as a local server.
5821 * Improved support for ad hoc overloading of constants (see also
5822 isar-ref manual and ~~/src/HOL/ex/Adhoc_Overloading_Examples.thy).
5824 * Library/Polynomial.thy:
5825 - Use lifting for primitive definitions.
5826 - Explicit conversions from and to lists of coefficients, used for
5828 - Replaced recursion operator poly_rec by fold_coeffs.
5829 - Prefer pre-existing gcd operation for gcd.
5831 poly_eq_iff ~> poly_eq_poly_eq_iff
5832 poly_ext ~> poly_eqI
5833 expand_poly_eq ~> poly_eq_iff
5836 * New Library/Simps_Case_Conv.thy: Provides commands simps_of_case and
5837 case_of_simps to convert function definitions between a list of
5838 equations with patterns on the lhs and a single equation with case
5839 expressions on the rhs. See also Ex/Simps_Case_Conv_Examples.thy.
5841 * New Library/FSet.thy: type of finite sets defined as a subtype of
5842 sets defined by Lifting/Transfer.
5844 * Discontinued theory src/HOL/Library/Eval_Witness. INCOMPATIBILITY.
5846 * Consolidation of library theories on product orders:
5848 Product_Lattice ~> Product_Order -- pointwise order on products
5849 Product_ord ~> Product_Lexorder -- lexicographic order on products
5853 * Imperative-HOL: The MREC combinator is considered legacy and no
5854 longer included by default. INCOMPATIBILITY, use partial_function
5855 instead, or import theory Legacy_Mrec as a fallback.
5857 * HOL-Algebra: Discontinued theories ~~/src/HOL/Algebra/abstract and
5858 ~~/src/HOL/Algebra/poly. Existing theories should be based on
5859 ~~/src/HOL/Library/Polynomial instead. The latter provides
5860 integration with HOL's type classes for rings. INCOMPATIBILITY.
5863 - Various improvements to BNF-based (co)datatype package, including
5864 new commands "primrec_new", "primcorec", and
5865 "datatype_new_compat", as well as documentation. See
5866 "datatypes.pdf" for details.
5867 - New "coinduction" method to avoid some boilerplate (compared to
5870 data ~> datatype_new
5871 codata ~> codatatype
5873 - Renamed many generated theorems, including
5875 map_comp' ~> map_comp
5885 * Spec_Check is a Quickcheck tool for Isabelle/ML. The ML function
5886 "check_property" allows to check specifications of the form "ALL x y
5887 z. prop x y z". See also ~~/src/Tools/Spec_Check/ with its
5888 Examples.thy in particular.
5890 * Improved printing of exception trace in Poly/ML 5.5.1, with regular
5891 tracing output in the command transaction context instead of physical
5892 stdout. See also Toplevel.debug, Toplevel.debugging and
5893 ML_Compiler.exn_trace.
5895 * ML type "theory" is now immutable, without any special treatment of
5896 drafts or linear updates (which could lead to "stale theory" errors in
5897 the past). Discontinued obsolete operations like Theory.copy,
5898 Theory.checkpoint, and the auxiliary type theory_ref. Minor
5901 * More uniform naming of goal functions for skipped proofs:
5903 Skip_Proof.prove ~> Goal.prove_sorry
5904 Skip_Proof.prove_global ~> Goal.prove_sorry_global
5906 Minor INCOMPATIBILITY.
5908 * Simplifier tactics and tools use proper Proof.context instead of
5909 historic type simpset. Old-style declarations like addsimps,
5910 addsimprocs etc. operate directly on Proof.context. Raw type simpset
5911 retains its use as snapshot of the main Simplifier context, using
5912 simpset_of and put_simpset on Proof.context. INCOMPATIBILITY -- port
5913 old tools by making them depend on (ctxt : Proof.context) instead of
5914 (ss : simpset), then turn (simpset_of ctxt) into ctxt.
5916 * Modifiers for classical wrappers (e.g. addWrapper, delWrapper)
5917 operate on Proof.context instead of claset, for uniformity with addIs,
5918 addEs, addDs etc. Note that claset_of and put_claset allow to manage
5919 clasets separately from the context.
5921 * Discontinued obsolete ML antiquotations @{claset} and @{simpset}.
5922 INCOMPATIBILITY, use @{context} instead.
5924 * Antiquotation @{theory_context A} is similar to @{theory A}, but
5925 presents the result as initial Proof.context.
5930 * Discontinued obsolete isabelle usedir, mkdir, make -- superseded by
5931 "isabelle build" in Isabelle2013. INCOMPATIBILITY.
5933 * Discontinued obsolete isabelle-process options -f and -u (former
5934 administrative aliases of option -e). Minor INCOMPATIBILITY.
5936 * Discontinued obsolete isabelle print tool, and PRINT_COMMAND
5939 * Discontinued ISABELLE_DOC_FORMAT settings variable and historic
5940 document formats: dvi.gz, ps, ps.gz -- the default document format is
5943 * Isabelle settings variable ISABELLE_BUILD_JAVA_OPTIONS allows to
5944 specify global resources of the JVM process run by isabelle build.
5946 * Toplevel executable $ISABELLE_HOME/bin/isabelle_scala_script allows
5947 to run Isabelle/Scala source files as standalone programs.
5949 * Improved "isabelle keywords" tool (for old-style ProofGeneral
5950 keyword tables): use Isabelle/Scala operations, which inspect outer
5951 syntax without requiring to build sessions first.
5953 * Sessions may be organized via 'chapter' specifications in the ROOT
5954 file, which determines a two-level hierarchy of browser info. The old
5955 tree-like organization via implicit sub-session relation (with its
5956 tendency towards erratic fluctuation of URLs) has been discontinued.
5957 The default chapter is called "Unsorted". Potential INCOMPATIBILITY
5958 for HTML presentation of theories.
5962 New in Isabelle2013 (February 2013)
5963 -----------------------------------
5967 * Theorem status about oracles and unfinished/failed future proofs is
5968 no longer printed by default, since it is incompatible with
5969 incremental / parallel checking of the persistent document model. ML
5970 function Thm.peek_status may be used to inspect a snapshot of the
5971 ongoing evaluation process. Note that in batch mode --- notably
5972 isabelle build --- the system ensures that future proofs of all
5973 accessible theorems in the theory context are finished (as before).
5975 * Configuration option show_markup controls direct inlining of markup
5976 into the printed representation of formal entities --- notably type
5977 and sort constraints. This enables Prover IDE users to retrieve that
5978 information via tooltips in the output window, for example.
5980 * Command 'ML_file' evaluates ML text from a file directly within the
5981 theory, without any predeclaration via 'uses' in the theory header.
5983 * Old command 'use' command and corresponding keyword 'uses' in the
5984 theory header are legacy features and will be discontinued soon.
5985 Tools that load their additional source files may imitate the
5986 'ML_file' implementation, such that the system can take care of
5987 dependencies properly.
5989 * Discontinued obsolete method fastsimp / tactic fast_simp_tac, which
5990 is called fastforce / fast_force_tac already since Isabelle2011-1.
5992 * Updated and extended "isar-ref" and "implementation" manual, reduced
5993 remaining material in old "ref" manual.
5995 * Improved support for auxiliary contexts that indicate block structure
5996 for specifications. Nesting of "context fixes ... context assumes ..."
5997 and "class ... context ...".
5999 * Attribute "consumes" allows a negative value as well, which is
6000 interpreted relatively to the total number of premises of the rule in
6001 the target context. This form of declaration is stable when exported
6002 from a nested 'context' with additional assumptions. It is the
6003 preferred form for definitional packages, notably cases/rules produced
6004 in HOL/inductive and HOL/function.
6006 * More informative error messages for Isar proof commands involving
6007 lazy enumerations (method applications etc.).
6009 * Refined 'help' command to retrieve outer syntax commands according
6010 to name patterns (with clickable results).
6013 *** Prover IDE -- Isabelle/Scala/jEdit ***
6015 * Parallel terminal proofs ('by') are enabled by default, likewise
6016 proofs that are built into packages like 'datatype', 'function'. This
6017 allows to "run ahead" checking the theory specifications on the
6018 surface, while the prover is still crunching on internal
6019 justifications. Unfinished / cancelled proofs are restarted as
6020 required to complete full proof checking eventually.
6022 * Improved output panel with tooltips, hyperlinks etc. based on the
6023 same Rich_Text_Area as regular Isabelle/jEdit buffers. Activation of
6024 tooltips leads to some window that supports the same recursively,
6025 which can lead to stacks of tooltips as the semantic document content
6026 is explored. ESCAPE closes the whole stack, individual windows may be
6027 closed separately, or detached to become independent jEdit dockables.
6029 * Improved support for commands that produce graph output: the text
6030 message contains a clickable area to open a new instance of the graph
6033 * More robust incremental parsing of outer syntax (partial comments,
6034 malformed symbols). Changing the balance of open/close quotes and
6035 comment delimiters works more conveniently with unfinished situations
6036 that frequently occur in user interaction.
6038 * More efficient painting and improved reactivity when editing large
6039 files. More scalable management of formal document content.
6041 * Smarter handling of tracing messages: prover process pauses after
6042 certain number of messages per command transaction, with some user
6043 dialog to stop or continue. This avoids swamping the front-end with
6044 potentially infinite message streams.
6046 * More plugin options and preferences, based on Isabelle/Scala. The
6047 jEdit plugin option panel provides access to some Isabelle/Scala
6048 options, including tuning parameters for editor reactivity and color
6051 * Dockable window "Symbols" provides some editing support for Isabelle
6054 * Dockable window "Monitor" shows ML runtime statistics. Note that
6055 continuous display of the chart slows down the system.
6057 * Improved editing support for control styles: subscript, superscript,
6058 bold, reset of style -- operating on single symbols or text
6059 selections. Cf. keyboard shortcuts C+e DOWN/UP/RIGHT/LEFT.
6061 * Actions isabelle.increase-font-size and isabelle.decrease-font-size
6062 adjust the main text area font size, and its derivatives for output,
6063 tooltips etc. Cf. keyboard shortcuts C-PLUS and C-MINUS, which often
6064 need to be adapted to local keyboard layouts.
6066 * More reactive completion popup by default: use \t (TAB) instead of
6067 \n (NEWLINE) to minimize intrusion into regular flow of editing. See
6068 also "Plugin Options / SideKick / General / Code Completion Options".
6070 * Implicit check and build dialog of the specified logic session
6071 image. For example, HOL, HOLCF, HOL-Nominal can be produced on
6072 demand, without bundling big platform-dependent heap images in the
6073 Isabelle distribution.
6075 * Uniform Java 7 platform on Linux, Mac OS X, Windows: recent updates
6076 from Oracle provide better multi-platform experience. This version is
6077 now bundled exclusively with Isabelle.
6082 * Code generation for Haskell: restrict unqualified imports from
6083 Haskell Prelude to a small set of fundamental operations.
6085 * Command 'export_code': relative file names are interpreted
6086 relatively to master directory of current theory rather than the
6087 rather arbitrary current working directory. INCOMPATIBILITY.
6089 * Discontinued obsolete attribute "COMP". Potential INCOMPATIBILITY,
6090 use regular rule composition via "OF" / "THEN", or explicit proof
6091 structure instead. Note that Isabelle/ML provides a variety of
6092 operators like COMP, INCR_COMP, COMP_INCR, which need to be applied
6093 with some care where this is really required.
6095 * Command 'typ' supports an additional variant with explicit sort
6096 constraint, to infer and check the most general type conforming to a
6097 given sort. Example (in HOL):
6099 typ "_ * _ * bool * unit" :: finite
6101 * Command 'locale_deps' visualizes all locales and their relations as
6109 - Added MaSh relevance filter based on machine-learning; see the
6110 Sledgehammer manual for details.
6111 - Polished Isar proofs generated with "isar_proofs" option.
6112 - Rationalized type encodings ("type_enc" option).
6113 - Renamed "kill_provers" subcommand to "kill_all".
6115 isar_proof ~> isar_proofs
6116 isar_shrink_factor ~> isar_shrink
6117 max_relevant ~> max_facts
6118 relevance_thresholds ~> fact_thresholds
6120 * Quickcheck: added an optimisation for equality premises. It is
6121 switched on by default, and can be switched off by setting the
6122 configuration quickcheck_optimise_equality to false.
6124 * Quotient: only one quotient can be defined by quotient_type
6128 - generation of an abstraction function equation in lift_definition
6129 - quot_del attribute
6130 - renamed no_abs_code -> no_code (INCOMPATIBILITY.)
6132 * Simproc "finite_Collect" rewrites set comprehensions into pointfree
6135 * Preprocessing of the code generator rewrites set comprehensions into
6136 pointfree expressions.
6138 * The SMT solver Z3 has now by default a restricted set of directly
6139 supported features. For the full set of features (div/mod, nonlinear
6140 arithmetic, datatypes/records) with potential proof reconstruction
6141 failures, enable the configuration option "z3_with_extensions". Minor
6144 * Simplified 'typedef' specifications: historical options for implicit
6145 set definition and alternative name have been discontinued. The
6146 former behavior of "typedef (open) t = A" is now the default, but
6147 written just "typedef t = A". INCOMPATIBILITY, need to adapt theories
6150 * Removed constant "chars"; prefer "Enum.enum" on type "char"
6151 directly. INCOMPATIBILITY.
6153 * Moved operation product, sublists and n_lists from theory Enum to
6154 List. INCOMPATIBILITY.
6156 * Theorem UN_o generalized to SUP_comp. INCOMPATIBILITY.
6158 * Class "comm_monoid_diff" formalises properties of bounded
6159 subtraction, with natural numbers and multisets as typical instances.
6161 * Added combinator "Option.these" with type "'a option set => 'a set".
6163 * Theory "Transitive_Closure": renamed lemmas
6165 reflcl_tranclp -> reflclp_tranclp
6166 rtranclp_reflcl -> rtranclp_reflclp
6170 * Theory "Rings": renamed lemmas (in class semiring)
6172 left_distrib ~> distrib_right
6173 right_distrib ~> distrib_left
6177 * Generalized the definition of limits:
6179 - Introduced the predicate filterlim (LIM x F. f x :> G) which
6180 expresses that when the input values x converge to F then the
6181 output f x converges to G.
6183 - Added filters for convergence to positive (at_top) and negative
6186 - Moved infinity in the norm (at_infinity) from
6187 Multivariate_Analysis to Complex_Main.
6189 - Removed real_tendsto_inf, it is superseded by "LIM x F. f x :>
6194 * Theory "Library/Option_ord" provides instantiation of option type to
6195 lattice type classes.
6197 * Theory "Library/Multiset": renamed
6199 constant fold_mset ~> Multiset.fold
6200 fact fold_mset_commute ~> fold_mset_comm
6204 * Renamed theory Library/List_Prefix to Library/Sublist, with related
6207 - Renamed constants (and related lemmas)
6210 strict_prefix ~> prefix
6212 - Replaced constant "postfix" by "suffixeq" with swapped argument
6213 order (i.e., "postfix xs ys" is now "suffixeq ys xs") and dropped
6214 old infix syntax "xs >>= ys"; use "suffixeq ys xs" instead.
6215 Renamed lemmas accordingly.
6217 - Added constant "list_hembeq" for homeomorphic embedding on
6218 lists. Added abbreviation "sublisteq" for special case
6219 "list_hembeq (op =)".
6221 - Theory Library/Sublist no longer provides "order" and "bot" type
6222 class instances for the prefix order (merely corresponding locale
6223 interpretations). The type class instances are now in theory
6224 Library/Prefix_Order.
6226 - The sublist relation of theory Library/Sublist_Order is now based
6227 on "Sublist.sublisteq". Renamed lemmas accordingly:
6229 le_list_append_le_same_iff ~> Sublist.sublisteq_append_le_same_iff
6230 le_list_append_mono ~> Sublist.list_hembeq_append_mono
6231 le_list_below_empty ~> Sublist.list_hembeq_Nil, Sublist.list_hembeq_Nil2
6232 le_list_Cons_EX ~> Sublist.list_hembeq_ConsD
6233 le_list_drop_Cons2 ~> Sublist.sublisteq_Cons2'
6234 le_list_drop_Cons_neq ~> Sublist.sublisteq_Cons2_neq
6235 le_list_drop_Cons ~> Sublist.sublisteq_Cons'
6236 le_list_drop_many ~> Sublist.sublisteq_drop_many
6237 le_list_filter_left ~> Sublist.sublisteq_filter_left
6238 le_list_rev_drop_many ~> Sublist.sublisteq_rev_drop_many
6239 le_list_rev_take_iff ~> Sublist.sublisteq_append
6240 le_list_same_length ~> Sublist.sublisteq_same_length
6241 le_list_take_many_iff ~> Sublist.sublisteq_append'
6242 less_eq_list.drop ~> less_eq_list_drop
6243 less_eq_list.induct ~> less_eq_list_induct
6244 not_le_list_length ~> Sublist.not_sublisteq_length
6248 * New theory Library/Countable_Set.
6250 * Theory Library/Debug and Library/Parallel provide debugging and
6251 parallel execution for code generated towards Isabelle/ML.
6253 * Theory Library/FuncSet: Extended support for Pi and extensional and
6254 introduce the extensional dependent function space "PiE". Replaced
6255 extensional_funcset by an abbreviation, and renamed lemmas from
6256 extensional_funcset to PiE as follows:
6258 extensional_empty ~> PiE_empty
6259 extensional_funcset_empty_domain ~> PiE_empty_domain
6260 extensional_funcset_empty_range ~> PiE_empty_range
6261 extensional_funcset_arb ~> PiE_arb
6262 extensional_funcset_mem ~> PiE_mem
6263 extensional_funcset_extend_domainI ~> PiE_fun_upd
6264 extensional_funcset_restrict_domain ~> fun_upd_in_PiE
6265 extensional_funcset_extend_domain_eq ~> PiE_insert_eq
6266 card_extensional_funcset ~> card_PiE
6267 finite_extensional_funcset ~> finite_PiE
6271 * Theory Library/FinFun: theory of almost everywhere constant
6272 functions (supersedes the AFP entry "Code Generation for Functions as
6275 * Theory Library/Phantom: generic phantom type to make a type
6276 parameter appear in a constant's type. This alternative to adding
6277 TYPE('a) as another parameter avoids unnecessary closures in generated
6280 * Theory Library/RBT_Impl: efficient construction of red-black trees
6281 from sorted associative lists. Merging two trees with rbt_union may
6282 return a structurally different tree than before. Potential
6285 * Theory Library/IArray: immutable arrays with code generation.
6287 * Theory Library/Finite_Lattice: theory of finite lattices.
6289 * HOL/Multivariate_Analysis: replaced
6291 "basis :: 'a::euclidean_space => nat => real"
6292 "\<Chi>\<Chi> :: (nat => real) => 'a::euclidean_space"
6294 on euclidean spaces by using the inner product "_ \<bullet> _" with
6295 vectors from the Basis set: "\<Chi>\<Chi> i. f i" is superseded by
6296 "SUM i : Basis. f i * r i".
6298 With this change the following constants are also changed or removed:
6300 DIM('a) :: nat ~> card (Basis :: 'a set) (is an abbreviation)
6301 a $$ i ~> inner a i (where i : Basis)
6303 \<pi>, \<pi>' removed
6305 Theorems about these constants where removed.
6309 component_le_norm ~> Basis_le_norm
6310 euclidean_eq ~> euclidean_eq_iff
6311 differential_zero_maxmin_component ~> differential_zero_maxmin_cart
6312 euclidean_simps ~> inner_simps
6313 independent_basis ~> independent_Basis
6314 span_basis ~> span_Basis
6315 in_span_basis ~> in_span_Basis
6316 norm_bound_component_le ~> norm_boound_Basis_le
6317 norm_bound_component_lt ~> norm_boound_Basis_lt
6318 component_le_infnorm ~> Basis_le_infnorm
6324 - Added simproc "measurable" to automatically prove measurability.
6326 - Added induction rules for sigma sets with disjoint union
6327 (sigma_sets_induct_disjoint) and for Borel-measurable functions
6328 (borel_measurable_induct).
6330 - Added the Daniell-Kolmogorov theorem (the existence the limit of a
6333 * HOL/Cardinals: Theories of ordinals and cardinals (supersedes the
6334 AFP entry "Ordinals_and_Cardinals").
6336 * HOL/BNF: New (co)datatype package based on bounded natural functors
6337 with support for mixed, nested recursion and interesting non-free
6340 * HOL/Finite_Set and Relation: added new set and relation operations
6341 expressed by Finite_Set.fold.
6343 * New theory HOL/Library/RBT_Set: implementation of sets by red-black
6344 trees for the code generator.
6346 * HOL/Library/RBT and HOL/Library/Mapping have been converted to
6348 possible INCOMPATIBILITY.
6350 * HOL/Set: renamed Set.project -> Set.filter
6354 *** Document preparation ***
6356 * Dropped legacy antiquotations "term_style" and "thm_style", since
6357 styles may be given as arguments to "term" and "thm" already.
6358 Discontinued legacy styles "prem1" .. "prem19".
6360 * Default LaTeX rendering for \<euro> is now based on eurosym package,
6361 instead of slightly exotic babel/greek.
6363 * Document variant NAME may use different LaTeX entry point
6364 document/root_NAME.tex if that file exists, instead of the common
6367 * Simplified custom document/build script, instead of old-style
6368 document/IsaMakefile. Minor INCOMPATIBILITY.
6373 * The default limit for maximum number of worker threads is now 8,
6374 instead of 4, in correspondence to capabilities of contemporary
6375 hardware and Poly/ML runtime system.
6377 * Type Seq.results and related operations support embedded error
6378 messages within lazy enumerations, and thus allow to provide
6379 informative errors in the absence of any usable results.
6381 * Renamed Position.str_of to Position.here to emphasize that this is a
6382 formal device to inline positions into message text, but not
6383 necessarily printing visible text.
6388 * Advanced support for Isabelle sessions and build management, see
6389 "system" manual for the chapter of that name, especially the "isabelle
6390 build" tool and its examples. The "isabelle mkroot" tool prepares
6391 session root directories for use with "isabelle build", similar to
6392 former "isabelle mkdir" for "isabelle usedir". Note that this affects
6393 document preparation as well. INCOMPATIBILITY, isabelle usedir /
6394 mkdir / make are rendered obsolete.
6396 * Discontinued obsolete Isabelle/build script, it is superseded by the
6397 regular isabelle build tool. For example:
6399 isabelle build -s -b HOL
6401 * Discontinued obsolete "isabelle makeall".
6403 * Discontinued obsolete IsaMakefile and ROOT.ML files from the
6404 Isabelle distribution, except for rudimentary src/HOL/IsaMakefile that
6405 provides some traditional targets that invoke "isabelle build". Note
6406 that this is inefficient! Applications of Isabelle/HOL involving
6407 "isabelle make" should be upgraded to use "isabelle build" directly.
6409 * The "isabelle options" tool prints Isabelle system options, as
6410 required for "isabelle build", for example.
6412 * The "isabelle logo" tool produces EPS and PDF format simultaneously.
6413 Minor INCOMPATIBILITY in command-line options.
6415 * The "isabelle install" tool has now a simpler command-line. Minor
6418 * The "isabelle components" tool helps to resolve add-on components
6419 that are not bundled, or referenced from a bare-bones repository
6420 version of Isabelle.
6422 * Settings variable ISABELLE_PLATFORM_FAMILY refers to the general
6423 platform family: "linux", "macos", "windows".
6425 * The ML system is configured as regular component, and no longer
6426 picked up from some surrounding directory. Potential INCOMPATIBILITY
6427 for home-made settings.
6429 * Improved ML runtime statistics (heap, threads, future tasks etc.).
6431 * Discontinued support for Poly/ML 5.2.1, which was the last version
6432 without exception positions and advanced ML compiler/toplevel
6435 * Discontinued special treatment of Proof General -- no longer guess
6436 PROOFGENERAL_HOME based on accidental file-system layout. Minor
6437 INCOMPATIBILITY: provide PROOFGENERAL_HOME and PROOFGENERAL_OPTIONS
6438 settings manually, or use a Proof General version that has been
6439 bundled as Isabelle component.
6443 New in Isabelle2012 (May 2012)
6444 ------------------------------
6448 * Prover IDE (PIDE) improvements:
6450 - more robust Sledgehammer integration (as before the sledgehammer
6451 command-line needs to be typed into the source buffer)
6452 - markup for bound variables
6453 - markup for types of term variables (displayed as tooltips)
6454 - support for user-defined Isar commands within the running session
6455 - improved support for Unicode outside original 16bit range
6456 e.g. glyph for \<A> (thanks to jEdit 4.5.1)
6458 * Forward declaration of outer syntax keywords within the theory
6459 header -- minor INCOMPATIBILITY for user-defined commands. Allow new
6460 commands to be used in the same theory where defined.
6462 * Auxiliary contexts indicate block structure for specifications with
6463 additional parameters and assumptions. Such unnamed contexts may be
6464 nested within other targets, like 'theory', 'locale', 'class',
6465 'instantiation' etc. Results from the local context are generalized
6466 accordingly and applied to the enclosing target context. Example:
6470 assumes xy: "x = y" and yz: "y = z"
6473 lemma my_trans: "x = z" using xy yz by simp
6479 The most basic application is to factor-out context elements of
6480 several fixes/assumes/shows theorem statements, e.g. see
6481 ~~/src/HOL/Isar_Examples/Group_Context.thy
6483 Any other local theory specification element works within the "context
6484 ... begin ... end" block as well.
6486 * Bundled declarations associate attributed fact expressions with a
6487 given name in the context. These may be later included in other
6488 contexts. This allows to manage context extensions casually, without
6489 the logical dependencies of locales and locale interpretation. See
6490 commands 'bundle', 'include', 'including' etc. in the isar-ref manual.
6492 * Commands 'lemmas' and 'theorems' allow local variables using 'for'
6493 declaration, and results are standardized before being stored. Thus
6494 old-style "standard" after instantiation or composition of facts
6495 becomes obsolete. Minor INCOMPATIBILITY, due to potential change of
6496 indices of schematic variables.
6498 * Rule attributes in local theory declarations (e.g. locale or class)
6499 are now statically evaluated: the resulting theorem is stored instead
6500 of the original expression. INCOMPATIBILITY in rare situations, where
6501 the historic accident of dynamic re-evaluation in interpretations
6504 * New tutorial "Programming and Proving in Isabelle/HOL"
6505 ("prog-prove"). It completely supersedes "A Tutorial Introduction to
6506 Structured Isar Proofs" ("isar-overview"), which has been removed. It
6507 also supersedes "Isabelle/HOL, A Proof Assistant for Higher-Order
6508 Logic" as the recommended beginners tutorial, but does not cover all
6509 of the material of that old tutorial.
6511 * Updated and extended reference manuals: "isar-ref",
6512 "implementation", "system"; reduced remaining material in old "ref"
6518 * Command 'definition' no longer exports the foundational "raw_def"
6519 into the user context. Minor INCOMPATIBILITY, may use the regular
6520 "def" result with attribute "abs_def" to imitate the old version.
6522 * Attribute "abs_def" turns an equation of the form "f x y == t" into
6523 "f == %x y. t", which ensures that "simp" or "unfold" steps always
6524 expand it. This also works for object-logic equality. (Formerly
6525 undocumented feature.)
6527 * Sort constraints are now propagated in simultaneous statements, just
6528 like type constraints. INCOMPATIBILITY in rare situations, where
6529 distinct sorts used to be assigned accidentally. For example:
6531 lemma "P (x::'a::foo)" and "Q (y::'a::bar)" -- "now illegal"
6533 lemma "P (x::'a)" and "Q (y::'a::bar)"
6534 -- "now uniform 'a::bar instead of default sort for first occurrence (!)"
6536 * Rule composition via attribute "OF" (or ML functions OF/MRS) is more
6537 tolerant against multiple unifiers, as long as the final result is
6538 unique. (As before, rules are composed in canonical right-to-left
6539 order to accommodate newly introduced premises.)
6541 * Renamed some inner syntax categories:
6547 Minor INCOMPATIBILITY. Note that in practice "num_const" or
6548 "num_position" etc. are mainly used instead (which also include
6549 position information via constraints).
6551 * Simplified configuration options for syntax ambiguity: see
6552 "syntax_ambiguity_warning" and "syntax_ambiguity_limit" in isar-ref
6553 manual. Minor INCOMPATIBILITY.
6555 * Discontinued configuration option "syntax_positions": atomic terms
6556 in parse trees are always annotated by position constraints.
6558 * Old code generator for SML and its commands 'code_module',
6559 'code_library', 'consts_code', 'types_code' have been discontinued.
6560 Use commands of the generic code generator instead. INCOMPATIBILITY.
6562 * Redundant attribute "code_inline" has been discontinued. Use
6563 "code_unfold" instead. INCOMPATIBILITY.
6565 * Dropped attribute "code_unfold_post" in favor of the its dual
6566 "code_abbrev", which yields a common pattern in definitions like
6568 definition [code_abbrev]: "f = t"
6572 * Obsolete 'types' command has been discontinued. Use 'type_synonym'
6573 instead. INCOMPATIBILITY.
6575 * Discontinued old "prems" fact, which used to refer to the accidental
6576 collection of foundational premises in the context (already marked as
6577 legacy since Isabelle2011).
6582 * Type 'a set is now a proper type constructor (just as before
6583 Isabelle2008). Definitions mem_def and Collect_def have disappeared.
6584 Non-trivial INCOMPATIBILITY. For developments keeping predicates and
6585 sets separate, it is often sufficient to rephrase some set S that has
6586 been accidentally used as predicates by "%x. x : S", and some
6587 predicate P that has been accidentally used as set by "{x. P x}".
6588 Corresponding proofs in a first step should be pruned from any
6589 tinkering with former theorems mem_def and Collect_def as far as
6592 For developments which deliberately mix predicates and sets, a
6593 planning step is necessary to determine what should become a predicate
6594 and what a set. It can be helpful to carry out that step in
6595 Isabelle2011-1 before jumping right into the current release.
6597 * Code generation by default implements sets as container type rather
6598 than predicates. INCOMPATIBILITY.
6600 * New type synonym 'a rel = ('a * 'a) set
6602 * The representation of numerals has changed. Datatype "num"
6603 represents strictly positive binary numerals, along with functions
6604 "numeral :: num => 'a" and "neg_numeral :: num => 'a" to represent
6605 positive and negated numeric literals, respectively. See also
6606 definitions in ~~/src/HOL/Num.thy. Potential INCOMPATIBILITY, some
6607 user theories may require adaptations as follows:
6609 - Theorems with number_ring or number_semiring constraints: These
6610 classes are gone; use comm_ring_1 or comm_semiring_1 instead.
6612 - Theories defining numeric types: Remove number, number_semiring,
6613 and number_ring instances. Defer all theorems about numerals until
6614 after classes one and semigroup_add have been instantiated.
6616 - Numeral-only simp rules: Replace each rule having a "number_of v"
6617 pattern with two copies, one for numeral and one for neg_numeral.
6619 - Theorems about subclasses of semiring_1 or ring_1: These classes
6620 automatically support numerals now, so more simp rules and
6621 simprocs may now apply within the proof.
6623 - Definitions and theorems using old constructors Pls/Min/Bit0/Bit1:
6624 Redefine using other integer operations.
6626 * Transfer: New package intended to generalize the existing
6627 "descending" method and related theorem attributes from the Quotient
6628 package. (Not all functionality is implemented yet, but future
6629 development will focus on Transfer as an eventual replacement for the
6630 corresponding parts of the Quotient package.)
6632 - transfer_rule attribute: Maintains a collection of transfer rules,
6633 which relate constants at two different types. Transfer rules may
6634 relate different type instances of the same polymorphic constant,
6635 or they may relate an operation on a raw type to a corresponding
6636 operation on an abstract type (quotient or subtype). For example:
6638 ((A ===> B) ===> list_all2 A ===> list_all2 B) map map
6639 (cr_int ===> cr_int ===> cr_int) (%(x,y) (u,v). (x+u, y+v)) plus_int
6641 - transfer method: Replaces a subgoal on abstract types with an
6642 equivalent subgoal on the corresponding raw types. Constants are
6643 replaced with corresponding ones according to the transfer rules.
6644 Goals are generalized over all free variables by default; this is
6645 necessary for variables whose types change, but can be overridden
6646 for specific variables with e.g. "transfer fixing: x y z". The
6647 variant transfer' method allows replacing a subgoal with one that
6648 is logically stronger (rather than equivalent).
6650 - relator_eq attribute: Collects identity laws for relators of
6651 various type constructors, e.g. "list_all2 (op =) = (op =)". The
6652 transfer method uses these lemmas to infer transfer rules for
6653 non-polymorphic constants on the fly.
6655 - transfer_prover method: Assists with proving a transfer rule for a
6656 new constant, provided the constant is defined in terms of other
6657 constants that already have transfer rules. It should be applied
6658 after unfolding the constant definitions.
6660 - HOL/ex/Transfer_Int_Nat.thy: Example theory demonstrating transfer
6661 from type nat to type int.
6663 * Lifting: New package intended to generalize the quotient_definition
6664 facility of the Quotient package; designed to work with Transfer.
6666 - lift_definition command: Defines operations on an abstract type in
6667 terms of a corresponding operation on a representation
6668 type. Example syntax:
6670 lift_definition dlist_insert :: "'a => 'a dlist => 'a dlist"
6673 Users must discharge a respectfulness proof obligation when each
6674 constant is defined. (For a type copy, i.e. a typedef with UNIV,
6675 the proof is discharged automatically.) The obligation is
6676 presented in a user-friendly, readable form; a respectfulness
6677 theorem in the standard format and a transfer rule are generated
6680 - Integration with code_abstype: For typedefs (e.g. subtypes
6681 corresponding to a datatype invariant, such as dlist),
6682 lift_definition generates a code certificate theorem and sets up
6683 code generation for each constant.
6685 - setup_lifting command: Sets up the Lifting package to work with a
6686 user-defined type. The user must provide either a quotient theorem
6687 or a type_definition theorem. The package configures transfer
6688 rules for equality and quantifiers on the type, and sets up the
6689 lift_definition command to work with the type.
6691 - Usage examples: See Quotient_Examples/Lift_DList.thy,
6692 Quotient_Examples/Lift_RBT.thy, Quotient_Examples/Lift_FSet.thy,
6693 Word/Word.thy and Library/Float.thy.
6697 - The 'quotient_type' command now supports a 'morphisms' option with
6698 rep and abs functions, similar to typedef.
6700 - 'quotient_type' sets up new types to work with the Lifting and
6701 Transfer packages, as with 'setup_lifting'.
6703 - The 'quotient_definition' command now requires the user to prove a
6704 respectfulness property at the point where the constant is
6705 defined, similar to lift_definition; INCOMPATIBILITY.
6707 - Renamed predicate 'Quotient' to 'Quotient3', and renamed theorems
6708 accordingly, INCOMPATIBILITY.
6710 * New diagnostic command 'find_unused_assms' to find potentially
6711 superfluous assumptions in theorems using Quickcheck.
6715 - Quickcheck returns variable assignments as counterexamples, which
6716 allows to reveal the underspecification of functions under test.
6717 For example, refuting "hd xs = x", it presents the variable
6718 assignment xs = [] and x = a1 as a counterexample, assuming that
6719 any property is false whenever "hd []" occurs in it.
6721 These counterexample are marked as potentially spurious, as
6722 Quickcheck also returns "xs = []" as a counterexample to the
6723 obvious theorem "hd xs = hd xs".
6725 After finding a potentially spurious counterexample, Quickcheck
6726 continues searching for genuine ones.
6728 By default, Quickcheck shows potentially spurious and genuine
6729 counterexamples. The option "genuine_only" sets quickcheck to only
6730 show genuine counterexamples.
6732 - The command 'quickcheck_generator' creates random and exhaustive
6733 value generators for a given type and operations.
6735 It generates values by using the operations as if they were
6736 constructors of that type.
6738 - Support for multisets.
6740 - Added "use_subtype" options.
6742 - Added "quickcheck_locale" configuration to specify how to process
6743 conjectures in a locale context.
6745 * Nitpick: Fixed infinite loop caused by the 'peephole_optim' option
6746 and affecting 'rat' and 'real'.
6749 - Integrated more tightly with SPASS, as described in the ITP 2012
6750 paper "More SPASS with Isabelle".
6751 - Made it try "smt" as a fallback if "metis" fails or times out.
6752 - Added support for the following provers: Alt-Ergo (via Why3 and
6753 TFF1), iProver, iProver-Eq.
6754 - Sped up the minimizer.
6755 - Added "lam_trans", "uncurry_aliases", and "minimize" options.
6756 - Renamed "slicing" ("no_slicing") option to "slice" ("dont_slice").
6757 - Renamed "sound" option to "strict".
6759 * Metis: Added possibility to specify lambda translations scheme as a
6760 parenthesized argument (e.g., "by (metis (lifting) ...)").
6762 * SMT: Renamed "smt_fixed" option to "smt_read_only_certificates".
6764 * Command 'try0': Renamed from 'try_methods'. INCOMPATIBILITY.
6766 * New "case_product" attribute to generate a case rule doing multiple
6767 case distinctions at the same time. E.g.
6769 list.exhaust [case_product nat.exhaust]
6771 produces a rule which can be used to perform case distinction on both
6774 * New "eventually_elim" method as a generalized variant of the
6775 eventually_elim* rules. Supports structured proofs.
6777 * Typedef with implicit set definition is considered legacy. Use
6778 "typedef (open)" form instead, which will eventually become the
6781 * Record: code generation can be switched off manually with
6783 declare [[record_coden = false]] -- "default true"
6785 * Datatype: type parameters allow explicit sort constraints.
6787 * Concrete syntax for case expressions includes constraints for source
6788 positions, and thus produces Prover IDE markup for its bindings.
6789 INCOMPATIBILITY for old-style syntax translations that augment the
6790 pattern notation; e.g. see src/HOL/HOLCF/One.thy for translations of
6793 * Clarified attribute "mono_set": pure declaration without modifying
6794 the result of the fact expression.
6796 * More default pred/set conversions on a couple of relation operations
6797 and predicates. Added powers of predicate relations. Consolidation
6798 of some relation theorems:
6800 converse_def ~> converse_unfold
6801 rel_comp_def ~> relcomp_unfold
6802 symp_def ~> (modified, use symp_def and sym_def instead)
6803 transp_def ~> transp_trans
6804 Domain_def ~> Domain_unfold
6805 Range_def ~> Domain_converse [symmetric]
6807 Generalized theorems INF_INT_eq, INF_INT_eq2, SUP_UN_eq, SUP_UN_eq2.
6809 See theory "Relation" for examples for making use of pred/set
6810 conversions by means of attributes "to_set" and "to_pred".
6814 * Renamed facts about the power operation on relations, i.e., relpow
6815 to match the constant's name:
6817 rel_pow_1 ~> relpow_1
6818 rel_pow_0_I ~> relpow_0_I
6819 rel_pow_Suc_I ~> relpow_Suc_I
6820 rel_pow_Suc_I2 ~> relpow_Suc_I2
6821 rel_pow_0_E ~> relpow_0_E
6822 rel_pow_Suc_E ~> relpow_Suc_E
6823 rel_pow_E ~> relpow_E
6824 rel_pow_Suc_D2 ~> relpow_Suc_D2
6825 rel_pow_Suc_E2 ~> relpow_Suc_E2
6826 rel_pow_Suc_D2' ~> relpow_Suc_D2'
6827 rel_pow_E2 ~> relpow_E2
6828 rel_pow_add ~> relpow_add
6829 rel_pow_commute ~> relpow
6830 rel_pow_empty ~> relpow_empty:
6831 rtrancl_imp_UN_rel_pow ~> rtrancl_imp_UN_relpow
6832 rel_pow_imp_rtrancl ~> relpow_imp_rtrancl
6833 rtrancl_is_UN_rel_pow ~> rtrancl_is_UN_relpow
6834 rtrancl_imp_rel_pow ~> rtrancl_imp_relpow
6835 rel_pow_fun_conv ~> relpow_fun_conv
6836 rel_pow_finite_bounded1 ~> relpow_finite_bounded1
6837 rel_pow_finite_bounded ~> relpow_finite_bounded
6838 rtrancl_finite_eq_rel_pow ~> rtrancl_finite_eq_relpow
6839 trancl_finite_eq_rel_pow ~> trancl_finite_eq_relpow
6840 single_valued_rel_pow ~> single_valued_relpow
6844 * Theory Relation: Consolidated constant name for relation composition
6845 and corresponding theorem names:
6847 - Renamed constant rel_comp to relcomp.
6849 - Dropped abbreviation pred_comp. Use relcompp instead.
6853 rel_compI ~> relcompI
6854 rel_compEpair ~> relcompEpair
6855 rel_compE ~> relcompE
6856 pred_comp_rel_comp_eq ~> relcompp_relcomp_eq
6857 rel_comp_empty1 ~> relcomp_empty1
6858 rel_comp_mono ~> relcomp_mono
6859 rel_comp_subset_Sigma ~> relcomp_subset_Sigma
6860 rel_comp_distrib ~> relcomp_distrib
6861 rel_comp_distrib2 ~> relcomp_distrib2
6862 rel_comp_UNION_distrib ~> relcomp_UNION_distrib
6863 rel_comp_UNION_distrib2 ~> relcomp_UNION_distrib2
6864 single_valued_rel_comp ~> single_valued_relcomp
6865 rel_comp_def ~> relcomp_unfold
6866 converse_rel_comp ~> converse_relcomp
6867 pred_compI ~> relcomppI
6868 pred_compE ~> relcomppE
6869 pred_comp_bot1 ~> relcompp_bot1
6870 pred_comp_bot2 ~> relcompp_bot2
6871 transp_pred_comp_less_eq ~> transp_relcompp_less_eq
6872 pred_comp_mono ~> relcompp_mono
6873 pred_comp_distrib ~> relcompp_distrib
6874 pred_comp_distrib2 ~> relcompp_distrib2
6875 converse_pred_comp ~> converse_relcompp
6877 finite_rel_comp ~> finite_relcomp
6879 set_rel_comp ~> set_relcomp
6883 * Theory Divides: Discontinued redundant theorems about div and mod.
6884 INCOMPATIBILITY, use the corresponding generic theorems instead.
6886 DIVISION_BY_ZERO ~> div_by_0, mod_by_0
6887 zdiv_self ~> div_self
6888 zmod_self ~> mod_self
6891 zdiv_zmod_equality ~> div_mod_equality2
6892 zdiv_zmod_equality2 ~> div_mod_equality
6893 zmod_zdiv_trivial ~> mod_div_trivial
6894 zdiv_zminus_zminus ~> div_minus_minus
6895 zmod_zminus_zminus ~> mod_minus_minus
6896 zdiv_zminus2 ~> div_minus_right
6897 zmod_zminus2 ~> mod_minus_right
6898 zdiv_minus1_right ~> div_minus1_right
6899 zmod_minus1_right ~> mod_minus1_right
6900 zdvd_mult_div_cancel ~> dvd_mult_div_cancel
6901 zmod_zmult1_eq ~> mod_mult_right_eq
6902 zpower_zmod ~> power_mod
6903 zdvd_zmod ~> dvd_mod
6904 zdvd_zmod_imp_zdvd ~> dvd_mod_imp_dvd
6905 mod_mult_distrib ~> mult_mod_left
6906 mod_mult_distrib2 ~> mult_mod_right
6908 * Removed redundant theorems nat_mult_2 and nat_mult_2_right; use
6909 generic mult_2 and mult_2_right instead. INCOMPATIBILITY.
6911 * Finite_Set.fold now qualified. INCOMPATIBILITY.
6913 * Consolidated theorem names concerning fold combinators:
6915 inf_INFI_fold_inf ~> inf_INF_fold_inf
6916 sup_SUPR_fold_sup ~> sup_SUP_fold_sup
6917 INFI_fold_inf ~> INF_fold_inf
6918 SUPR_fold_sup ~> SUP_fold_sup
6919 union_set ~> union_set_fold
6920 minus_set ~> minus_set_fold
6921 INFI_set_fold ~> INF_set_fold
6922 SUPR_set_fold ~> SUP_set_fold
6923 INF_code ~> INF_set_foldr
6924 SUP_code ~> SUP_set_foldr
6925 foldr.simps ~> foldr.simps (in point-free formulation)
6926 foldr_fold_rev ~> foldr_conv_fold
6927 foldl_fold ~> foldl_conv_fold
6928 foldr_foldr ~> foldr_conv_foldl
6929 foldl_foldr ~> foldl_conv_foldr
6930 fold_set_remdups ~> fold_set_fold_remdups
6931 fold_set ~> fold_set_fold
6932 fold1_set ~> fold1_set_fold
6936 * Dropped rarely useful theorems concerning fold combinators:
6937 foldl_apply, foldl_fun_comm, foldl_rev, fold_weak_invariant,
6938 rev_foldl_cons, fold_set_remdups, fold_set, fold_set1,
6939 concat_conv_foldl, foldl_weak_invariant, foldl_invariant,
6940 foldr_invariant, foldl_absorb0, foldl_foldr1_lemma, foldl_foldr1,
6941 listsum_conv_fold, listsum_foldl, sort_foldl_insort, foldl_assoc,
6942 foldr_conv_foldl, start_le_sum, elem_le_sum, sum_eq_0_conv.
6943 INCOMPATIBILITY. For the common phrases "%xs. List.foldr plus xs 0"
6944 and "List.foldl plus 0", prefer "List.listsum". Otherwise it can be
6945 useful to boil down "List.foldr" and "List.foldl" to "List.fold" by
6946 unfolding "foldr_conv_fold" and "foldl_conv_fold".
6948 * Dropped lemmas minus_set_foldr, union_set_foldr, union_coset_foldr,
6949 inter_coset_foldr, Inf_fin_set_foldr, Sup_fin_set_foldr,
6950 Min_fin_set_foldr, Max_fin_set_foldr, Inf_set_foldr, Sup_set_foldr,
6951 INF_set_foldr, SUP_set_foldr. INCOMPATIBILITY. Prefer corresponding
6952 lemmas over fold rather than foldr, or make use of lemmas
6953 fold_conv_foldr and fold_rev.
6955 * Congruence rules Option.map_cong and Option.bind_cong for recursion
6956 through option types.
6958 * "Transitive_Closure.ntrancl": bounded transitive closure on
6961 * Constant "Set.not_member" now qualified. INCOMPATIBILITY.
6963 * Theory Int: Discontinued many legacy theorems specific to type int.
6964 INCOMPATIBILITY, use the corresponding generic theorems instead.
6966 zminus_zminus ~> minus_minus
6967 zminus_0 ~> minus_zero
6968 zminus_zadd_distrib ~> minus_add_distrib
6969 zadd_commute ~> add_commute
6970 zadd_assoc ~> add_assoc
6971 zadd_left_commute ~> add_left_commute
6974 zadd_0 ~> add_0_left
6975 zadd_0_right ~> add_0_right
6976 zadd_zminus_inverse2 ~> left_minus
6977 zmult_zminus ~> mult_minus_left
6978 zmult_commute ~> mult_commute
6979 zmult_assoc ~> mult_assoc
6980 zadd_zmult_distrib ~> left_distrib
6981 zadd_zmult_distrib2 ~> right_distrib
6982 zdiff_zmult_distrib ~> left_diff_distrib
6983 zdiff_zmult_distrib2 ~> right_diff_distrib
6984 zmult_1 ~> mult_1_left
6985 zmult_1_right ~> mult_1_right
6986 zle_refl ~> order_refl
6987 zle_trans ~> order_trans
6988 zle_antisym ~> order_antisym
6989 zle_linear ~> linorder_linear
6990 zless_linear ~> linorder_less_linear
6991 zadd_left_mono ~> add_left_mono
6992 zadd_strict_right_mono ~> add_strict_right_mono
6993 zadd_zless_mono ~> add_less_le_mono
6994 int_0_less_1 ~> zero_less_one
6995 int_0_neq_1 ~> zero_neq_one
6997 zpower_zadd_distrib ~> power_add
6998 zero_less_zpower_abs_iff ~> zero_less_power_abs_iff
6999 zero_le_zpower_abs ~> zero_le_power_abs
7001 * Theory Deriv: Renamed
7003 DERIV_nonneg_imp_nonincreasing ~> DERIV_nonneg_imp_nondecreasing
7005 * Theory Library/Multiset: Improved code generation of multisets.
7007 * Theory HOL/Library/Set_Algebras: Addition and multiplication on sets
7008 are expressed via type classes again. The special syntax
7009 \<oplus>/\<otimes> has been replaced by plain +/*. Removed constant
7010 setsum_set, which is now subsumed by Big_Operators.setsum.
7013 * Theory HOL/Library/Diagonalize has been removed. INCOMPATIBILITY,
7014 use theory HOL/Library/Nat_Bijection instead.
7016 * Theory HOL/Library/RBT_Impl: Backing implementation of red-black
7017 trees is now inside a type class context. Names of affected
7018 operations and lemmas have been prefixed by rbt_. INCOMPATIBILITY for
7019 theories working directly with raw red-black trees, adapt the names as
7023 bulkload -> rbt_bulkload
7024 del_from_left -> rbt_del_from_left
7025 del_from_right -> rbt_del_from_right
7027 delete -> rbt_delete
7029 insert -> rbt_insert
7030 insertw -> rbt_insert_with
7031 insert_with_key -> rbt_insert_with_key
7032 map_entry -> rbt_map_entry
7033 lookup -> rbt_lookup
7034 sorted -> rbt_sorted
7035 tree_greater -> rbt_greater
7036 tree_less -> rbt_less
7037 tree_less_symbol -> rbt_less_symbol
7039 union_with -> rbt_union_with
7040 union_with_key -> rbt_union_with_key
7043 balance_left_sorted -> balance_left_rbt_sorted
7044 balance_left_tree_greater -> balance_left_rbt_greater
7045 balance_left_tree_less -> balance_left_rbt_less
7046 balance_right_sorted -> balance_right_rbt_sorted
7047 balance_right_tree_greater -> balance_right_rbt_greater
7048 balance_right_tree_less -> balance_right_rbt_less
7049 balance_sorted -> balance_rbt_sorted
7050 balance_tree_greater -> balance_rbt_greater
7051 balance_tree_less -> balance_rbt_less
7052 bulkload_is_rbt -> rbt_bulkload_is_rbt
7053 combine_sorted -> combine_rbt_sorted
7054 combine_tree_greater -> combine_rbt_greater
7055 combine_tree_less -> combine_rbt_less
7056 delete_in_tree -> rbt_delete_in_tree
7057 delete_is_rbt -> rbt_delete_is_rbt
7058 del_from_left_tree_greater -> rbt_del_from_left_rbt_greater
7059 del_from_left_tree_less -> rbt_del_from_left_rbt_less
7060 del_from_right_tree_greater -> rbt_del_from_right_rbt_greater
7061 del_from_right_tree_less -> rbt_del_from_right_rbt_less
7062 del_in_tree -> rbt_del_in_tree
7063 del_inv1_inv2 -> rbt_del_inv1_inv2
7064 del_sorted -> rbt_del_rbt_sorted
7065 del_tree_greater -> rbt_del_rbt_greater
7066 del_tree_less -> rbt_del_rbt_less
7067 dom_lookup_Branch -> dom_rbt_lookup_Branch
7068 entries_lookup -> entries_rbt_lookup
7069 finite_dom_lookup -> finite_dom_rbt_lookup
7070 insert_sorted -> rbt_insert_rbt_sorted
7071 insertw_is_rbt -> rbt_insertw_is_rbt
7072 insertwk_is_rbt -> rbt_insertwk_is_rbt
7073 insertwk_sorted -> rbt_insertwk_rbt_sorted
7074 insertw_sorted -> rbt_insertw_rbt_sorted
7075 ins_sorted -> ins_rbt_sorted
7076 ins_tree_greater -> ins_rbt_greater
7077 ins_tree_less -> ins_rbt_less
7078 is_rbt_sorted -> is_rbt_rbt_sorted
7079 lookup_balance -> rbt_lookup_balance
7080 lookup_bulkload -> rbt_lookup_rbt_bulkload
7081 lookup_delete -> rbt_lookup_rbt_delete
7082 lookup_Empty -> rbt_lookup_Empty
7083 lookup_from_in_tree -> rbt_lookup_from_in_tree
7084 lookup_in_tree -> rbt_lookup_in_tree
7085 lookup_ins -> rbt_lookup_ins
7086 lookup_insert -> rbt_lookup_rbt_insert
7087 lookup_insertw -> rbt_lookup_rbt_insertw
7088 lookup_insertwk -> rbt_lookup_rbt_insertwk
7089 lookup_keys -> rbt_lookup_keys
7090 lookup_map -> rbt_lookup_map
7091 lookup_map_entry -> rbt_lookup_rbt_map_entry
7092 lookup_tree_greater -> rbt_lookup_rbt_greater
7093 lookup_tree_less -> rbt_lookup_rbt_less
7094 lookup_union -> rbt_lookup_rbt_union
7095 map_entry_color_of -> rbt_map_entry_color_of
7096 map_entry_inv1 -> rbt_map_entry_inv1
7097 map_entry_inv2 -> rbt_map_entry_inv2
7098 map_entry_is_rbt -> rbt_map_entry_is_rbt
7099 map_entry_sorted -> rbt_map_entry_rbt_sorted
7100 map_entry_tree_greater -> rbt_map_entry_rbt_greater
7101 map_entry_tree_less -> rbt_map_entry_rbt_less
7102 map_tree_greater -> map_rbt_greater
7103 map_tree_less -> map_rbt_less
7104 map_sorted -> map_rbt_sorted
7105 paint_sorted -> paint_rbt_sorted
7106 paint_lookup -> paint_rbt_lookup
7107 paint_tree_greater -> paint_rbt_greater
7108 paint_tree_less -> paint_rbt_less
7109 sorted_entries -> rbt_sorted_entries
7110 tree_greater_eq_trans -> rbt_greater_eq_trans
7111 tree_greater_nit -> rbt_greater_nit
7112 tree_greater_prop -> rbt_greater_prop
7113 tree_greater_simps -> rbt_greater_simps
7114 tree_greater_trans -> rbt_greater_trans
7115 tree_less_eq_trans -> rbt_less_eq_trans
7116 tree_less_nit -> rbt_less_nit
7117 tree_less_prop -> rbt_less_prop
7118 tree_less_simps -> rbt_less_simps
7119 tree_less_trans -> rbt_less_trans
7120 tree_ord_props -> rbt_ord_props
7121 union_Branch -> rbt_union_Branch
7122 union_is_rbt -> rbt_union_is_rbt
7123 unionw_is_rbt -> rbt_unionw_is_rbt
7124 unionwk_is_rbt -> rbt_unionwk_is_rbt
7125 unionwk_sorted -> rbt_unionwk_rbt_sorted
7127 * Theory HOL/Library/Float: Floating point numbers are now defined as
7128 a subset of the real numbers. All operations are defined using the
7129 lifing-framework and proofs use the transfer method. INCOMPATIBILITY.
7136 round_down -> float_round_down
7137 round_up -> float_round_up
7141 ceiling_fl, lb_mult, lb_mod, ub_mult, ub_mod
7144 abs_float_def -> Float.compute_float_abs
7145 bitlen_ge0 -> bitlen_nonneg
7146 bitlen.simps -> Float.compute_bitlen
7147 float_components -> Float_mantissa_exponent
7148 float_divl.simps -> Float.compute_float_divl
7149 float_divr.simps -> Float.compute_float_divr
7150 float_eq_odd -> mult_powr_eq_mult_powr_iff
7151 float_power -> real_of_float_power
7152 lapprox_posrat_def -> Float.compute_lapprox_posrat
7153 lapprox_rat.simps -> Float.compute_lapprox_rat
7154 le_float_def' -> Float.compute_float_le
7155 le_float_def -> less_eq_float.rep_eq
7156 less_float_def' -> Float.compute_float_less
7157 less_float_def -> less_float.rep_eq
7158 normfloat_def -> Float.compute_normfloat
7159 normfloat_imp_odd_or_zero -> mantissa_not_dvd and mantissa_noteq_0
7160 normfloat -> normfloat_def
7161 normfloat_unique -> use normfloat_def
7162 number_of_float_Float -> Float.compute_float_numeral, Float.compute_float_neg_numeral
7163 one_float_def -> Float.compute_float_one
7164 plus_float_def -> Float.compute_float_plus
7165 rapprox_posrat_def -> Float.compute_rapprox_posrat
7166 rapprox_rat.simps -> Float.compute_rapprox_rat
7167 real_of_float_0 -> zero_float.rep_eq
7168 real_of_float_1 -> one_float.rep_eq
7169 real_of_float_abs -> abs_float.rep_eq
7170 real_of_float_add -> plus_float.rep_eq
7171 real_of_float_minus -> uminus_float.rep_eq
7172 real_of_float_mult -> times_float.rep_eq
7173 real_of_float_simp -> Float.rep_eq
7174 real_of_float_sub -> minus_float.rep_eq
7175 round_down.simps -> Float.compute_float_round_down
7176 round_up.simps -> Float.compute_float_round_up
7177 times_float_def -> Float.compute_float_times
7178 uminus_float_def -> Float.compute_float_uminus
7179 zero_float_def -> Float.compute_float_zero
7181 Lemmas not necessary anymore, use the transfer method:
7182 bitlen_B0, bitlen_B1, bitlen_ge1, bitlen_Min, bitlen_Pls, float_divl,
7183 float_divr, float_le_simp, float_less1_mantissa_bound,
7184 float_less_simp, float_less_zero, float_le_zero,
7185 float_pos_less1_e_neg, float_pos_m_pos, float_split, float_split2,
7186 floor_pos_exp, lapprox_posrat, lapprox_posrat_bottom, lapprox_rat,
7187 lapprox_rat_bottom, normalized_float, rapprox_posrat,
7188 rapprox_posrat_le1, rapprox_rat, real_of_float_ge0_exp,
7189 real_of_float_neg_exp, real_of_float_nge0_exp, round_down floor_fl,
7190 round_up, zero_le_float, zero_less_float
7192 * New theory HOL/Library/DAList provides an abstract type for
7193 association lists with distinct keys.
7195 * Session HOL/IMP: Added new theory of abstract interpretation of
7198 * Session HOL-Import: Re-implementation from scratch is faster,
7199 simpler, and more scalable. Requires a proof bundle, which is
7200 available as an external component. Discontinued old (and mostly
7201 dead) Importer for HOL4 and HOL Light. INCOMPATIBILITY.
7203 * Session HOL-Word: Discontinued many redundant theorems specific to
7204 type 'a word. INCOMPATIBILITY, use the corresponding generic theorems
7207 word_sub_alt ~> word_sub_wi
7208 word_add_alt ~> word_add_def
7209 word_mult_alt ~> word_mult_def
7210 word_minus_alt ~> word_minus_def
7211 word_0_alt ~> word_0_wi
7212 word_1_alt ~> word_1_wi
7213 word_add_0 ~> add_0_left
7214 word_add_0_right ~> add_0_right
7215 word_mult_1 ~> mult_1_left
7216 word_mult_1_right ~> mult_1_right
7217 word_add_commute ~> add_commute
7218 word_add_assoc ~> add_assoc
7219 word_add_left_commute ~> add_left_commute
7220 word_mult_commute ~> mult_commute
7221 word_mult_assoc ~> mult_assoc
7222 word_mult_left_commute ~> mult_left_commute
7223 word_left_distrib ~> left_distrib
7224 word_right_distrib ~> right_distrib
7225 word_left_minus ~> left_minus
7226 word_diff_0_right ~> diff_0_right
7227 word_diff_self ~> diff_self
7228 word_sub_def ~> diff_minus
7229 word_diff_minus ~> diff_minus
7230 word_add_ac ~> add_ac
7231 word_mult_ac ~> mult_ac
7232 word_plus_ac0 ~> add_0_left add_0_right add_ac
7233 word_times_ac1 ~> mult_1_left mult_1_right mult_ac
7234 word_order_trans ~> order_trans
7235 word_order_refl ~> order_refl
7236 word_order_antisym ~> order_antisym
7237 word_order_linear ~> linorder_linear
7238 lenw1_zero_neq_one ~> zero_neq_one
7239 word_number_of_eq ~> number_of_eq
7240 word_of_int_add_hom ~> wi_hom_add
7241 word_of_int_sub_hom ~> wi_hom_sub
7242 word_of_int_mult_hom ~> wi_hom_mult
7243 word_of_int_minus_hom ~> wi_hom_neg
7244 word_of_int_succ_hom ~> wi_hom_succ
7245 word_of_int_pred_hom ~> wi_hom_pred
7246 word_of_int_0_hom ~> word_0_wi
7247 word_of_int_1_hom ~> word_1_wi
7249 * Session HOL-Word: New proof method "word_bitwise" for splitting
7250 machine word equalities and inequalities into logical circuits,
7251 defined in HOL/Word/WordBitwise.thy. Supports addition, subtraction,
7252 multiplication, shifting by constants, bitwise operators and numeric
7253 constants. Requires fixed-length word types, not 'a word. Solves
7254 many standard word identities outright and converts more into first
7255 order problems amenable to blast or similar. See also examples in
7256 HOL/Word/Examples/WordExamples.thy.
7258 * Session HOL-Probability: Introduced the type "'a measure" to
7259 represent measures, this replaces the records 'a algebra and 'a
7260 measure_space. The locales based on subset_class now have two
7261 locale-parameters the space \<Omega> and the set of measurable sets M.
7262 The product of probability spaces uses now the same constant as the
7263 finite product of sigma-finite measure spaces "PiM :: ('i => 'a)
7264 measure". Most constants are defined now outside of locales and gain
7265 an additional parameter, like null_sets, almost_eventually or \<mu>'.
7266 Measure space constructions for distributions and densities now got
7267 their own constants distr and density. Instead of using locales to
7268 describe measure spaces with a finite space, the measure count_space
7269 and point_measure is introduced. INCOMPATIBILITY.
7273 finite_measure.\<mu>' -> measure
7274 product_algebra_generator -> prod_algebra
7275 product_prob_space.emb -> prod_emb
7276 product_prob_space.infprod_algebra -> PiM
7279 completeable_measure_space
7280 finite_measure_space
7282 finite_product_finite_prob_space
7283 finite_product_sigma_algebra
7284 finite_sigma_algebra
7286 pair_finite_prob_space
7287 pair_finite_sigma_algebra
7290 product_sigma_algebra
7294 distribution -> use distr measure, or distributed predicate
7296 joint_distribution -> use distr measure, or distributed predicate
7297 pair_measure_generator
7298 product_prob_space.infprod_algebra -> use PiM
7301 Replacement theorems:
7302 finite_additivity_sufficient -> ring_of_sets.countably_additiveI_finite
7303 finite_measure.empty_measure -> measure_empty
7304 finite_measure.finite_continuity_from_above -> finite_measure.finite_Lim_measure_decseq
7305 finite_measure.finite_continuity_from_below -> finite_measure.finite_Lim_measure_incseq
7306 finite_measure.finite_measure_countably_subadditive -> finite_measure.finite_measure_subadditive_countably
7307 finite_measure.finite_measure_eq -> finite_measure.emeasure_eq_measure
7308 finite_measure.finite_measure -> finite_measure.emeasure_finite
7309 finite_measure.finite_measure_finite_singleton -> finite_measure.finite_measure_eq_setsum_singleton
7310 finite_measure.positive_measure' -> measure_nonneg
7311 finite_measure.real_measure -> finite_measure.emeasure_real
7312 finite_product_prob_space.finite_measure_times -> finite_product_prob_space.finite_measure_PiM_emb
7313 finite_product_sigma_algebra.in_P -> sets_PiM_I_finite
7314 finite_product_sigma_algebra.P_empty -> space_PiM_empty, sets_PiM_empty
7315 information_space.conditional_entropy_eq -> information_space.conditional_entropy_simple_distributed
7316 information_space.conditional_entropy_positive -> information_space.conditional_entropy_nonneg_simple
7317 information_space.conditional_mutual_information_eq_mutual_information -> information_space.conditional_mutual_information_eq_mutual_information_simple
7318 information_space.conditional_mutual_information_generic_positive -> information_space.conditional_mutual_information_nonneg_simple
7319 information_space.conditional_mutual_information_positive -> information_space.conditional_mutual_information_nonneg_simple
7320 information_space.entropy_commute -> information_space.entropy_commute_simple
7321 information_space.entropy_eq -> information_space.entropy_simple_distributed
7322 information_space.entropy_generic_eq -> information_space.entropy_simple_distributed
7323 information_space.entropy_positive -> information_space.entropy_nonneg_simple
7324 information_space.entropy_uniform_max -> information_space.entropy_uniform
7325 information_space.KL_eq_0_imp -> information_space.KL_eq_0_iff_eq
7326 information_space.KL_eq_0 -> information_space.KL_same_eq_0
7327 information_space.KL_ge_0 -> information_space.KL_nonneg
7328 information_space.mutual_information_eq -> information_space.mutual_information_simple_distributed
7329 information_space.mutual_information_positive -> information_space.mutual_information_nonneg_simple
7330 Int_stable_cuboids -> Int_stable_atLeastAtMost
7331 Int_stable_product_algebra_generator -> positive_integral
7332 measure_preserving -> equality "distr M N f = N" "f : measurable M N"
7333 measure_space.additive -> emeasure_additive
7334 measure_space.AE_iff_null_set -> AE_iff_null
7335 measure_space.almost_everywhere_def -> eventually_ae_filter
7336 measure_space.almost_everywhere_vimage -> AE_distrD
7337 measure_space.continuity_from_above -> INF_emeasure_decseq
7338 measure_space.continuity_from_above_Lim -> Lim_emeasure_decseq
7339 measure_space.continuity_from_below_Lim -> Lim_emeasure_incseq
7340 measure_space.continuity_from_below -> SUP_emeasure_incseq
7341 measure_space_density -> emeasure_density
7342 measure_space.density_is_absolutely_continuous -> absolutely_continuousI_density
7343 measure_space.integrable_vimage -> integrable_distr
7344 measure_space.integral_translated_density -> integral_density
7345 measure_space.integral_vimage -> integral_distr
7346 measure_space.measure_additive -> plus_emeasure
7347 measure_space.measure_compl -> emeasure_compl
7348 measure_space.measure_countable_increasing -> emeasure_countable_increasing
7349 measure_space.measure_countably_subadditive -> emeasure_subadditive_countably
7350 measure_space.measure_decseq -> decseq_emeasure
7351 measure_space.measure_Diff -> emeasure_Diff
7352 measure_space.measure_Diff_null_set -> emeasure_Diff_null_set
7353 measure_space.measure_eq_0 -> emeasure_eq_0
7354 measure_space.measure_finitely_subadditive -> emeasure_subadditive_finite
7355 measure_space.measure_finite_singleton -> emeasure_eq_setsum_singleton
7356 measure_space.measure_incseq -> incseq_emeasure
7357 measure_space.measure_insert -> emeasure_insert
7358 measure_space.measure_mono -> emeasure_mono
7359 measure_space.measure_not_negative -> emeasure_not_MInf
7360 measure_space.measure_preserving_Int_stable -> measure_eqI_generator_eq
7361 measure_space.measure_setsum -> setsum_emeasure
7362 measure_space.measure_setsum_split -> setsum_emeasure_cover
7363 measure_space.measure_space_vimage -> emeasure_distr
7364 measure_space.measure_subadditive_finite -> emeasure_subadditive_finite
7365 measure_space.measure_subadditive -> subadditive
7366 measure_space.measure_top -> emeasure_space
7367 measure_space.measure_UN_eq_0 -> emeasure_UN_eq_0
7368 measure_space.measure_Un_null_set -> emeasure_Un_null_set
7369 measure_space.positive_integral_translated_density -> positive_integral_density
7370 measure_space.positive_integral_vimage -> positive_integral_distr
7371 measure_space.real_continuity_from_above -> Lim_measure_decseq
7372 measure_space.real_continuity_from_below -> Lim_measure_incseq
7373 measure_space.real_measure_countably_subadditive -> measure_subadditive_countably
7374 measure_space.real_measure_Diff -> measure_Diff
7375 measure_space.real_measure_finite_Union -> measure_finite_Union
7376 measure_space.real_measure_setsum_singleton -> measure_eq_setsum_singleton
7377 measure_space.real_measure_subadditive -> measure_subadditive
7378 measure_space.real_measure_Union -> measure_Union
7379 measure_space.real_measure_UNION -> measure_UNION
7380 measure_space.simple_function_vimage -> simple_function_comp
7381 measure_space.simple_integral_vimage -> simple_integral_distr
7382 measure_space.simple_integral_vimage -> simple_integral_distr
7383 measure_unique_Int_stable -> measure_eqI_generator_eq
7384 measure_unique_Int_stable_vimage -> measure_eqI_generator_eq
7385 pair_sigma_algebra.measurable_cut_fst -> sets_Pair1
7386 pair_sigma_algebra.measurable_cut_snd -> sets_Pair2
7387 pair_sigma_algebra.measurable_pair_image_fst -> measurable_Pair1
7388 pair_sigma_algebra.measurable_pair_image_snd -> measurable_Pair2
7389 pair_sigma_algebra.measurable_product_swap -> measurable_pair_swap_iff
7390 pair_sigma_algebra.pair_sigma_algebra_measurable -> measurable_pair_swap
7391 pair_sigma_algebra.pair_sigma_algebra_swap_measurable -> measurable_pair_swap'
7392 pair_sigma_algebra.sets_swap -> sets_pair_swap
7393 pair_sigma_finite.measure_cut_measurable_fst -> pair_sigma_finite.measurable_emeasure_Pair1
7394 pair_sigma_finite.measure_cut_measurable_snd -> pair_sigma_finite.measurable_emeasure_Pair2
7395 pair_sigma_finite.measure_preserving_swap -> pair_sigma_finite.distr_pair_swap
7396 pair_sigma_finite.pair_measure_alt2 -> pair_sigma_finite.emeasure_pair_measure_alt2
7397 pair_sigma_finite.pair_measure_alt -> pair_sigma_finite.emeasure_pair_measure_alt
7398 pair_sigma_finite.pair_measure_times -> pair_sigma_finite.emeasure_pair_measure_Times
7399 prob_space.indep_distribution_eq_measure -> prob_space.indep_vars_iff_distr_eq_PiM
7400 prob_space.indep_var_distributionD -> prob_space.indep_var_distribution_eq
7401 prob_space.measure_space_1 -> prob_space.emeasure_space_1
7402 prob_space.prob_space_vimage -> prob_space_distr
7403 prob_space.random_variable_restrict -> measurable_restrict
7404 prob_space_unique_Int_stable -> measure_eqI_prob_space
7405 product_algebraE -> prod_algebraE_all
7406 product_algebra_generator_der -> prod_algebra_eq_finite
7407 product_algebra_generator_into_space -> prod_algebra_sets_into_space
7408 product_algebraI -> sets_PiM_I_finite
7409 product_measure_exists -> product_sigma_finite.sigma_finite
7410 product_prob_space.finite_index_eq_finite_product -> product_prob_space.sets_PiM_generator
7411 product_prob_space.finite_measure_infprod_emb_Pi -> product_prob_space.measure_PiM_emb
7412 product_prob_space.infprod_spec -> product_prob_space.emeasure_PiM_emb_not_empty
7413 product_prob_space.measurable_component -> measurable_component_singleton
7414 product_prob_space.measurable_emb -> measurable_prod_emb
7415 product_prob_space.measurable_into_infprod_algebra -> measurable_PiM_single
7416 product_prob_space.measurable_singleton_infprod -> measurable_component_singleton
7417 product_prob_space.measure_emb -> emeasure_prod_emb
7418 product_prob_space.measure_preserving_restrict -> product_prob_space.distr_restrict
7419 product_sigma_algebra.product_algebra_into_space -> space_closed
7420 product_sigma_finite.measure_fold -> product_sigma_finite.distr_merge
7421 product_sigma_finite.measure_preserving_component_singelton -> product_sigma_finite.distr_singleton
7422 product_sigma_finite.measure_preserving_merge -> product_sigma_finite.distr_merge
7423 sequence_space.measure_infprod -> sequence_space.measure_PiM_countable
7424 sets_product_algebra -> sets_PiM
7425 sigma_algebra.measurable_sigma -> measurable_measure_of
7426 sigma_finite_measure.disjoint_sigma_finite -> sigma_finite_disjoint
7427 sigma_finite_measure.RN_deriv_vimage -> sigma_finite_measure.RN_deriv_distr
7428 sigma_product_algebra_sigma_eq -> sigma_prod_algebra_sigma_eq
7429 space_product_algebra -> space_PiM
7431 * Session HOL-TPTP: support to parse and import TPTP problems (all
7432 languages) into Isabelle/HOL.
7437 * New "case_product" attribute (see HOL).
7442 * Greater support for structured proofs involving induction or case
7445 * Much greater use of mathematical symbols.
7447 * Removal of many ML theorem bindings. INCOMPATIBILITY.
7452 * Antiquotation @{keyword "name"} produces a parser for outer syntax
7453 from a minor keyword introduced via theory header declaration.
7455 * Antiquotation @{command_spec "name"} produces the
7456 Outer_Syntax.command_spec from a major keyword introduced via theory
7457 header declaration; it can be passed to Outer_Syntax.command etc.
7459 * Local_Theory.define no longer hard-wires default theorem name
7460 "foo_def", but retains the binding as given. If that is Binding.empty
7461 / Attrib.empty_binding, the result is not registered as user-level
7462 fact. The Local_Theory.define_internal variant allows to specify a
7463 non-empty name (used for the foundation in the background theory),
7464 while omitting the fact binding in the user-context. Potential
7465 INCOMPATIBILITY for derived definitional packages: need to specify
7466 naming policy for primitive definitions more explicitly.
7468 * Renamed Thm.capply to Thm.apply, and Thm.cabs to Thm.lambda in
7469 conformance with similar operations in structure Term and Logic.
7471 * Antiquotation @{attributes [...]} embeds attribute source
7472 representation into the ML text, which is particularly useful with
7473 declarations like Local_Theory.note.
7475 * Structure Proof_Context follows standard naming scheme. Old
7476 ProofContext has been discontinued. INCOMPATIBILITY.
7478 * Refined Local_Theory.declaration {syntax, pervasive}, with subtle
7479 change of semantics: update is applied to auxiliary local theory
7482 * Modernized some old-style infix operations:
7484 addeqcongs ~> Simplifier.add_eqcong
7485 deleqcongs ~> Simplifier.del_eqcong
7486 addcongs ~> Simplifier.add_cong
7487 delcongs ~> Simplifier.del_cong
7488 setmksimps ~> Simplifier.set_mksimps
7489 setmkcong ~> Simplifier.set_mkcong
7490 setmksym ~> Simplifier.set_mksym
7491 setmkeqTrue ~> Simplifier.set_mkeqTrue
7492 settermless ~> Simplifier.set_termless
7493 setsubgoaler ~> Simplifier.set_subgoaler
7494 addsplits ~> Splitter.add_split
7495 delsplits ~> Splitter.del_split
7500 * USER_HOME settings variable points to cross-platform user home
7501 directory, which coincides with HOME on POSIX systems only. Likewise,
7502 the Isabelle path specification "~" now expands to $USER_HOME, instead
7503 of former $HOME. A different default for USER_HOME may be set
7504 explicitly in shell environment, before Isabelle settings are
7505 evaluated. Minor INCOMPATIBILITY: need to adapt Isabelle path where
7506 the generic user home was intended.
7508 * ISABELLE_HOME_WINDOWS refers to ISABELLE_HOME in windows file name
7509 notation, which is useful for the jEdit file browser, for example.
7511 * ISABELLE_JDK_HOME settings variable points to JDK with javac and jar
7516 New in Isabelle2011-1 (October 2011)
7517 ------------------------------------
7521 * Improved Isabelle/jEdit Prover IDE (PIDE), which can be invoked as
7522 "isabelle jedit" or "ISABELLE_HOME/Isabelle" on the command line.
7524 - Management of multiple theory files directly from the editor
7525 buffer store -- bypassing the file-system (no requirement to save
7526 files for checking).
7528 - Markup of formal entities within the text buffer, with semantic
7529 highlighting, tooltips and hyperlinks to jump to defining source
7532 - Improved text rendering, with sub/superscripts in the source
7533 buffer (including support for copy/paste wrt. output panel, HTML
7534 theory output and other non-Isabelle text boxes).
7536 - Refined scheduling of proof checking and printing of results,
7537 based on interactive editor view. (Note: jEdit folding and
7538 narrowing allows to restrict buffer perspectives explicitly.)
7540 - Reduced CPU performance requirements, usable on machines with few
7543 - Reduced memory requirements due to pruning of unused document
7544 versions (garbage collection).
7546 See also ~~/src/Tools/jEdit/README.html for further information,
7547 including some remaining limitations.
7549 * Theory loader: source files are exclusively located via the master
7550 directory of each theory node (where the .thy file itself resides).
7551 The global load path (such as src/HOL/Library) has been discontinued.
7552 Note that the path element ~~ may be used to reference theories in the
7553 Isabelle home folder -- for instance, "~~/src/HOL/Library/FuncSet".
7556 * Theory loader: source files are identified by content via SHA1
7557 digests. Discontinued former path/modtime identification and optional
7558 ISABELLE_FILE_IDENT plugin scripts.
7560 * Parallelization of nested Isar proofs is subject to
7561 Goal.parallel_proofs_threshold (default 100). See also isabelle
7564 * Name space: former unsynchronized references are now proper
7565 configuration options, with more conventional names:
7567 long_names ~> names_long
7568 short_names ~> names_short
7569 unique_names ~> names_unique
7571 Minor INCOMPATIBILITY, need to declare options in context like this:
7573 declare [[names_unique = false]]
7575 * Literal facts `prop` may contain dummy patterns, e.g. `_ = _`. Note
7576 that the result needs to be unique, which means fact specifications
7577 may have to be refined after enriching a proof context.
7579 * Attribute "case_names" has been refined: the assumptions in each case
7580 can be named now by following the case name with [name1 name2 ...].
7582 * Isabelle/Isar reference manual has been updated and extended:
7583 - "Synopsis" provides a catalog of main Isar language concepts.
7584 - Formal references in syntax diagrams, via @{rail} antiquotation.
7585 - Updated material from classic "ref" manual, notably about
7586 "Classical Reasoner".
7591 * Class bot and top require underlying partial order rather than
7592 preorder: uniqueness of bot and top is guaranteed. INCOMPATIBILITY.
7594 * Class complete_lattice: generalized a couple of lemmas from sets;
7595 generalized theorems INF_cong and SUP_cong. New type classes for
7596 complete boolean algebras and complete linear orders. Lemmas
7597 Inf_less_iff, less_Sup_iff, INF_less_iff, less_SUP_iff now reside in
7598 class complete_linorder.
7600 Changed proposition of lemmas Inf_bool_def, Sup_bool_def, Inf_fun_def,
7601 Sup_fun_def, Inf_apply, Sup_apply.
7603 Removed redundant lemmas (the right hand side gives hints how to
7604 replace them for (metis ...), or (simp only: ...) proofs):
7606 Inf_singleton ~> Inf_insert [where A="{}", unfolded Inf_empty inf_top_right]
7607 Sup_singleton ~> Sup_insert [where A="{}", unfolded Sup_empty sup_bot_right]
7608 Inf_binary ~> Inf_insert, Inf_empty, and inf_top_right
7609 Sup_binary ~> Sup_insert, Sup_empty, and sup_bot_right
7610 Int_eq_Inter ~> Inf_insert, Inf_empty, and inf_top_right
7611 Un_eq_Union ~> Sup_insert, Sup_empty, and sup_bot_right
7612 Inter_def ~> INF_def, image_def
7613 Union_def ~> SUP_def, image_def
7614 INT_eq ~> INF_def, and image_def
7615 UN_eq ~> SUP_def, and image_def
7616 INF_subset ~> INF_superset_mono [OF _ order_refl]
7618 More consistent and comprehensive names:
7620 INTER_eq_Inter_image ~> INF_def
7621 UNION_eq_Union_image ~> SUP_def
7624 INF_leI ~> INF_lower
7625 INF_leI2 ~> INF_lower2
7626 le_INFI ~> INF_greatest
7627 le_SUPI ~> SUP_upper
7628 le_SUPI2 ~> SUP_upper2
7629 SUP_leI ~> SUP_least
7630 INFI_bool_eq ~> INF_bool_eq
7631 SUPR_bool_eq ~> SUP_bool_eq
7632 INFI_apply ~> INF_apply
7633 SUPR_apply ~> SUP_apply
7634 INTER_def ~> INTER_eq
7635 UNION_def ~> UNION_eq
7639 * Renamed theory Complete_Lattice to Complete_Lattices.
7642 * Theory Complete_Lattices: lemmas Inf_eq_top_iff, INF_eq_top_iff,
7643 INF_image, Inf_insert, INF_top, Inf_top_conv, INF_top_conv, SUP_bot,
7644 Sup_bot_conv, SUP_bot_conv, Sup_eq_top_iff, SUP_eq_top_iff, SUP_image,
7645 Sup_insert are now declared as [simp]. INCOMPATIBILITY.
7647 * Theory Lattice: lemmas compl_inf_bot, compl_le_comp_iff,
7648 compl_sup_top, inf_idem, inf_left_idem, inf_sup_absorb, sup_idem,
7649 sup_inf_absob, sup_left_idem are now declared as [simp]. Minor
7652 * Added syntactic classes "inf" and "sup" for the respective
7653 constants. INCOMPATIBILITY: Changes in the argument order of the
7654 (mostly internal) locale predicates for some derived classes.
7656 * Theorem collections ball_simps and bex_simps do not contain theorems
7657 referring to UNION any longer; these have been moved to collection
7658 UN_ball_bex_simps. INCOMPATIBILITY.
7660 * Theory Archimedean_Field: floor now is defined as parameter of a
7661 separate type class floor_ceiling.
7663 * Theory Finite_Set: more coherent development of fold_set locales:
7665 locale fun_left_comm ~> locale comp_fun_commute
7666 locale fun_left_comm_idem ~> locale comp_fun_idem
7668 Both use point-free characterization; interpretation proofs may need
7669 adjustment. INCOMPATIBILITY.
7671 * Theory Limits: Type "'a net" has been renamed to "'a filter", in
7672 accordance with standard mathematical terminology. INCOMPATIBILITY.
7674 * Theory Complex_Main: The locale interpretations for the
7675 bounded_linear and bounded_bilinear locales have been removed, in
7676 order to reduce the number of duplicate lemmas. Users must use the
7677 original names for distributivity theorems, potential INCOMPATIBILITY.
7679 divide.add ~> add_divide_distrib
7680 divide.diff ~> diff_divide_distrib
7681 divide.setsum ~> setsum_divide_distrib
7682 mult.add_right ~> right_distrib
7683 mult.diff_right ~> right_diff_distrib
7684 mult_right.setsum ~> setsum_right_distrib
7685 mult_left.diff ~> left_diff_distrib
7687 * Theory Complex_Main: Several redundant theorems have been removed or
7688 replaced by more general versions. INCOMPATIBILITY.
7690 real_diff_def ~> minus_real_def
7691 real_divide_def ~> divide_real_def
7692 real_less_def ~> less_le
7693 real_abs_def ~> abs_real_def
7694 real_sgn_def ~> sgn_real_def
7695 real_mult_commute ~> mult_commute
7696 real_mult_assoc ~> mult_assoc
7697 real_mult_1 ~> mult_1_left
7698 real_add_mult_distrib ~> left_distrib
7699 real_zero_not_eq_one ~> zero_neq_one
7700 real_mult_inverse_left ~> left_inverse
7701 INVERSE_ZERO ~> inverse_zero
7702 real_le_refl ~> order_refl
7703 real_le_antisym ~> order_antisym
7704 real_le_trans ~> order_trans
7705 real_le_linear ~> linear
7706 real_le_eq_diff ~> le_iff_diff_le_0
7707 real_add_left_mono ~> add_left_mono
7708 real_mult_order ~> mult_pos_pos
7709 real_mult_less_mono2 ~> mult_strict_left_mono
7710 real_of_int_real_of_nat ~> real_of_int_of_nat_eq
7711 real_0_le_divide_iff ~> zero_le_divide_iff
7712 realpow_two_disj ~> power2_eq_iff
7713 real_squared_diff_one_factored ~> square_diff_one_factored
7714 realpow_two_diff ~> square_diff_square_factored
7715 reals_complete2 ~> complete_real
7716 real_sum_squared_expand ~> power2_sum
7717 exp_ln_eq ~> ln_unique
7719 expi_zero ~> exp_zero
7720 lemma_DERIV_subst ~> DERIV_cong
7721 LIMSEQ_Zfun_iff ~> tendsto_Zfun_iff
7722 LIMSEQ_const ~> tendsto_const
7723 LIMSEQ_norm ~> tendsto_norm
7724 LIMSEQ_add ~> tendsto_add
7725 LIMSEQ_minus ~> tendsto_minus
7726 LIMSEQ_minus_cancel ~> tendsto_minus_cancel
7727 LIMSEQ_diff ~> tendsto_diff
7728 bounded_linear.LIMSEQ ~> bounded_linear.tendsto
7729 bounded_bilinear.LIMSEQ ~> bounded_bilinear.tendsto
7730 LIMSEQ_mult ~> tendsto_mult
7731 LIMSEQ_inverse ~> tendsto_inverse
7732 LIMSEQ_divide ~> tendsto_divide
7733 LIMSEQ_pow ~> tendsto_power
7734 LIMSEQ_setsum ~> tendsto_setsum
7735 LIMSEQ_setprod ~> tendsto_setprod
7736 LIMSEQ_norm_zero ~> tendsto_norm_zero_iff
7737 LIMSEQ_rabs_zero ~> tendsto_rabs_zero_iff
7738 LIMSEQ_imp_rabs ~> tendsto_rabs
7739 LIMSEQ_add_minus ~> tendsto_add [OF _ tendsto_minus]
7740 LIMSEQ_add_const ~> tendsto_add [OF _ tendsto_const]
7741 LIMSEQ_diff_const ~> tendsto_diff [OF _ tendsto_const]
7742 LIMSEQ_Complex ~> tendsto_Complex
7743 LIM_ident ~> tendsto_ident_at
7744 LIM_const ~> tendsto_const
7745 LIM_add ~> tendsto_add
7746 LIM_add_zero ~> tendsto_add_zero
7747 LIM_minus ~> tendsto_minus
7748 LIM_diff ~> tendsto_diff
7749 LIM_norm ~> tendsto_norm
7750 LIM_norm_zero ~> tendsto_norm_zero
7751 LIM_norm_zero_cancel ~> tendsto_norm_zero_cancel
7752 LIM_norm_zero_iff ~> tendsto_norm_zero_iff
7753 LIM_rabs ~> tendsto_rabs
7754 LIM_rabs_zero ~> tendsto_rabs_zero
7755 LIM_rabs_zero_cancel ~> tendsto_rabs_zero_cancel
7756 LIM_rabs_zero_iff ~> tendsto_rabs_zero_iff
7757 LIM_compose ~> tendsto_compose
7758 LIM_mult ~> tendsto_mult
7759 LIM_scaleR ~> tendsto_scaleR
7760 LIM_of_real ~> tendsto_of_real
7761 LIM_power ~> tendsto_power
7762 LIM_inverse ~> tendsto_inverse
7763 LIM_sgn ~> tendsto_sgn
7764 isCont_LIM_compose ~> isCont_tendsto_compose
7765 bounded_linear.LIM ~> bounded_linear.tendsto
7766 bounded_linear.LIM_zero ~> bounded_linear.tendsto_zero
7767 bounded_bilinear.LIM ~> bounded_bilinear.tendsto
7768 bounded_bilinear.LIM_prod_zero ~> bounded_bilinear.tendsto_zero
7769 bounded_bilinear.LIM_left_zero ~> bounded_bilinear.tendsto_left_zero
7770 bounded_bilinear.LIM_right_zero ~> bounded_bilinear.tendsto_right_zero
7771 LIM_inverse_fun ~> tendsto_inverse [OF tendsto_ident_at]
7773 * Theory Complex_Main: The definition of infinite series was
7774 generalized. Now it is defined on the type class {topological_space,
7775 comm_monoid_add}. Hence it is useable also for extended real numbers.
7777 * Theory Complex_Main: The complex exponential function "expi" is now
7778 a type-constrained abbreviation for "exp :: complex => complex"; thus
7779 several polymorphic lemmas about "exp" are now applicable to "expi".
7783 - Theory Library/Code_Char_ord provides native ordering of
7784 characters in the target language.
7786 - Commands code_module and code_library are legacy, use export_code
7789 - Method "evaluation" is legacy, use method "eval" instead.
7791 - Legacy evaluator "SML" is deactivated by default. May be
7792 reactivated by the following theory command:
7794 setup {* Value.add_evaluator ("SML", Codegen.eval_term) *}
7796 * Declare ext [intro] by default. Rare INCOMPATIBILITY.
7798 * New proof method "induction" that gives induction hypotheses the
7799 name "IH", thus distinguishing them from further hypotheses that come
7800 from rule induction. The latter are still called "hyps". Method
7801 "induction" is a thin wrapper around "induct" and follows the same
7804 * Method "fastsimp" has been renamed to "fastforce", but "fastsimp" is
7805 still available as a legacy feature for some time.
7808 - Added "need" and "total_consts" options.
7809 - Reintroduced "show_skolems" option by popular demand.
7810 - Renamed attribute: nitpick_def ~> nitpick_unfold.
7814 - Use quasi-sound (and efficient) translations by default.
7815 - Added support for the following provers: E-ToFoF, LEO-II,
7816 Satallax, SNARK, Waldmeister, and Z3 with TPTP syntax.
7817 - Automatically preplay and minimize proofs before showing them if
7818 this can be done within reasonable time.
7819 - sledgehammer available_provers ~> sledgehammer supported_provers.
7821 - Added "preplay_timeout", "slicing", "type_enc", "sound",
7822 "max_mono_iters", and "max_new_mono_instances" options.
7823 - Removed "explicit_apply" and "full_types" options as well as "Full
7824 Types" Proof General menu item. INCOMPATIBILITY.
7827 - Removed "metisF" -- use "metis" instead. INCOMPATIBILITY.
7828 - Obsoleted "metisFT" -- use "metis (full_types)" instead.
7832 - Renamed 'try_methods' and added "simp:", "intro:", "dest:", and
7833 "elim:" options. INCOMPATIBILITY.
7834 - Introduced 'try' that not only runs 'try_methods' but also
7835 'solve_direct', 'sledgehammer', 'quickcheck', and 'nitpick'.
7838 - Added "eval" option to evaluate terms for the found counterexample
7839 (currently only supported by the default (exhaustive) tester).
7840 - Added post-processing of terms to obtain readable counterexamples
7841 (currently only supported by the default (exhaustive) tester).
7842 - New counterexample generator quickcheck[narrowing] enables
7843 narrowing-based testing. Requires the Glasgow Haskell compiler
7844 with its installation location defined in the Isabelle settings
7845 environment as ISABELLE_GHC.
7846 - Removed quickcheck tester "SML" based on the SML code generator
7847 (formly in HOL/Library).
7849 * Function package: discontinued option "tailrec". INCOMPATIBILITY,
7850 use 'partial_function' instead.
7852 * Theory Library/Extended_Reals replaces now the positive extended
7853 reals found in probability theory. This file is extended by
7854 Multivariate_Analysis/Extended_Real_Limits.
7856 * Theory Library/Old_Recdef: old 'recdef' package has been moved here,
7857 from where it must be imported explicitly if it is really required.
7860 * Theory Library/Wfrec: well-founded recursion combinator "wfrec" has
7861 been moved here. INCOMPATIBILITY.
7863 * Theory Library/Saturated provides type of numbers with saturated
7866 * Theory Library/Product_Lattice defines a pointwise ordering for the
7867 product type 'a * 'b, and provides instance proofs for various order
7868 and lattice type classes.
7870 * Theory Library/Countable now provides the "countable_datatype" proof
7871 method for proving "countable" class instances for datatypes.
7873 * Theory Library/Cset_Monad allows do notation for computable sets
7874 (cset) via the generic monad ad-hoc overloading facility.
7876 * Library: Theories of common data structures are split into theories
7877 for implementation, an invariant-ensuring type, and connection to an
7878 abstract type. INCOMPATIBILITY.
7880 - RBT is split into RBT and RBT_Mapping.
7881 - AssocList is split and renamed into AList and AList_Mapping.
7882 - DList is split into DList_Impl, DList, and DList_Cset.
7883 - Cset is split into Cset and List_Cset.
7885 * Theory Library/Nat_Infinity has been renamed to
7886 Library/Extended_Nat, with name changes of the following types and
7889 type inat ~> type enat
7891 Infty ~> infinity (overloaded)
7895 Every theorem name containing "inat", "Fin", "Infty", or "iSuc" has
7896 been renamed accordingly. INCOMPATIBILITY.
7898 * Session Multivariate_Analysis: The euclidean_space type class now
7899 fixes a constant "Basis :: 'a set" consisting of the standard
7900 orthonormal basis for the type. Users now have the option of
7901 quantifying over this set instead of using the "basis" function, e.g.
7902 "ALL x:Basis. P x" vs "ALL i<DIM('a). P (basis i)".
7904 * Session Multivariate_Analysis: Type "('a, 'b) cart" has been renamed
7905 to "('a, 'b) vec" (the syntax "'a ^ 'b" remains unaffected). Constants
7906 "Cart_nth" and "Cart_lambda" have been respectively renamed to
7907 "vec_nth" and "vec_lambda"; theorems mentioning those names have
7908 changed to match. Definition theorems for overloaded constants now use
7909 the standard "foo_vec_def" naming scheme. A few other theorems have
7910 been renamed as follows (INCOMPATIBILITY):
7912 Cart_eq ~> vec_eq_iff
7913 dist_nth_le_cart ~> dist_vec_nth_le
7914 tendsto_vector ~> vec_tendstoI
7915 Cauchy_vector ~> vec_CauchyI
7917 * Session Multivariate_Analysis: Several duplicate theorems have been
7918 removed, and other theorems have been renamed or replaced with more
7919 general versions. INCOMPATIBILITY.
7921 finite_choice ~> finite_set_choice
7922 eventually_conjI ~> eventually_conj
7923 eventually_and ~> eventually_conj_iff
7924 eventually_false ~> eventually_False
7925 setsum_norm ~> norm_setsum
7926 Lim_sequentially ~> LIMSEQ_def
7927 Lim_ident_at ~> LIM_ident
7928 Lim_const ~> tendsto_const
7929 Lim_cmul ~> tendsto_scaleR [OF tendsto_const]
7930 Lim_neg ~> tendsto_minus
7931 Lim_add ~> tendsto_add
7932 Lim_sub ~> tendsto_diff
7933 Lim_mul ~> tendsto_scaleR
7934 Lim_vmul ~> tendsto_scaleR [OF _ tendsto_const]
7935 Lim_null_norm ~> tendsto_norm_zero_iff [symmetric]
7936 Lim_linear ~> bounded_linear.tendsto
7937 Lim_component ~> tendsto_euclidean_component
7938 Lim_component_cart ~> tendsto_vec_nth
7939 Lim_inner ~> tendsto_inner [OF tendsto_const]
7940 dot_lsum ~> inner_setsum_left
7941 dot_rsum ~> inner_setsum_right
7942 continuous_cmul ~> continuous_scaleR [OF continuous_const]
7943 continuous_neg ~> continuous_minus
7944 continuous_sub ~> continuous_diff
7945 continuous_vmul ~> continuous_scaleR [OF _ continuous_const]
7946 continuous_mul ~> continuous_scaleR
7947 continuous_inv ~> continuous_inverse
7948 continuous_at_within_inv ~> continuous_at_within_inverse
7949 continuous_at_inv ~> continuous_at_inverse
7950 continuous_at_norm ~> continuous_norm [OF continuous_at_id]
7951 continuous_at_infnorm ~> continuous_infnorm [OF continuous_at_id]
7952 continuous_at_component ~> continuous_component [OF continuous_at_id]
7953 continuous_on_neg ~> continuous_on_minus
7954 continuous_on_sub ~> continuous_on_diff
7955 continuous_on_cmul ~> continuous_on_scaleR [OF continuous_on_const]
7956 continuous_on_vmul ~> continuous_on_scaleR [OF _ continuous_on_const]
7957 continuous_on_mul ~> continuous_on_scaleR
7958 continuous_on_mul_real ~> continuous_on_mult
7959 continuous_on_inner ~> continuous_on_inner [OF continuous_on_const]
7960 continuous_on_norm ~> continuous_on_norm [OF continuous_on_id]
7961 continuous_on_inverse ~> continuous_on_inv
7962 uniformly_continuous_on_neg ~> uniformly_continuous_on_minus
7963 uniformly_continuous_on_sub ~> uniformly_continuous_on_diff
7964 subset_interior ~> interior_mono
7965 subset_closure ~> closure_mono
7966 closure_univ ~> closure_UNIV
7967 real_arch_lt ~> reals_Archimedean2
7968 real_arch ~> reals_Archimedean3
7969 real_abs_norm ~> abs_norm_cancel
7970 real_abs_sub_norm ~> norm_triangle_ineq3
7971 norm_cauchy_schwarz_abs ~> Cauchy_Schwarz_ineq2
7973 * Session HOL-Probability:
7974 - Caratheodory's extension lemma is now proved for ring_of_sets.
7975 - Infinite products of probability measures are now available.
7976 - Sigma closure is independent, if the generator is independent
7977 - Use extended reals instead of positive extended
7978 reals. INCOMPATIBILITY.
7980 * Session HOLCF: Discontinued legacy theorem names, INCOMPATIBILITY.
7982 expand_fun_below ~> fun_below_iff
7983 below_fun_ext ~> fun_belowI
7984 expand_cfun_eq ~> cfun_eq_iff
7985 ext_cfun ~> cfun_eqI
7986 expand_cfun_below ~> cfun_below_iff
7987 below_cfun_ext ~> cfun_belowI
7988 monofun_fun_fun ~> fun_belowD
7989 monofun_fun_arg ~> monofunE
7990 monofun_lub_fun ~> adm_monofun [THEN admD]
7991 cont_lub_fun ~> adm_cont [THEN admD]
7992 cont2cont_Rep_CFun ~> cont2cont_APP
7993 cont_Rep_CFun_app ~> cont_APP_app
7994 cont_Rep_CFun_app_app ~> cont_APP_app_app
7995 cont_cfun_fun ~> cont_Rep_cfun1 [THEN contE]
7996 cont_cfun_arg ~> cont_Rep_cfun2 [THEN contE]
7997 contlub_cfun ~> lub_APP [symmetric]
7998 contlub_LAM ~> lub_LAM [symmetric]
8001 lift_distinct1 ~> lift.distinct(1)
8002 lift_distinct2 ~> lift.distinct(2)
8003 Def_not_UU ~> lift.distinct(2)
8004 Def_inject ~> lift.inject
8005 below_UU_iff ~> below_bottom_iff
8006 eq_UU_iff ~> eq_bottom_iff
8009 *** Document preparation ***
8011 * Antiquotation @{rail} layouts railroad syntax diagrams, see also
8012 isar-ref manual, both for description and actual application of the
8015 * Antiquotation @{value} evaluates the given term and presents its
8018 * Antiquotations: term style "isub" provides ad-hoc conversion of
8019 variables x1, y23 into subscripted form x\<^isub>1,
8020 y\<^isub>2\<^isub>3.
8022 * Predefined LaTeX macros for Isabelle symbols \<bind> and \<then>
8023 (e.g. see ~~/src/HOL/Library/Monad_Syntax.thy).
8025 * Localized \isabellestyle switch can be used within blocks or groups
8028 \isabellestyle{it} %preferred default
8029 {\isabellestylett @{text "typewriter stuff"}}
8031 * Discontinued special treatment of hard tabulators. Implicit
8032 tab-width is now defined as 1. Potential INCOMPATIBILITY for visual
8038 * The inner syntax of sort/type/term/prop supports inlined YXML
8039 representations within quoted string tokens. By encoding logical
8040 entities via Term_XML (in ML or Scala) concrete syntax can be
8041 bypassed, which is particularly useful for producing bits of text
8042 under external program control.
8044 * Antiquotations for ML and document preparation are managed as theory
8045 data, which requires explicit setup.
8047 * Isabelle_Process.is_active allows tools to check if the official
8048 process wrapper is running (Isabelle/Scala/jEdit) or the old TTY loop
8049 (better known as Proof General).
8051 * Structure Proof_Context follows standard naming scheme. Old
8052 ProofContext is still available for some time as legacy alias.
8054 * Structure Timing provides various operations for timing; supersedes
8055 former start_timing/end_timing etc.
8057 * Path.print is the official way to show file-system paths to users
8058 (including quotes etc.).
8060 * Inner syntax: identifiers in parse trees of generic categories
8061 "logic", "aprop", "idt" etc. carry position information (disguised as
8062 type constraints). Occasional INCOMPATIBILITY with non-compliant
8063 translations that choke on unexpected type constraints. Positions can
8064 be stripped in ML translations via Syntax.strip_positions /
8065 Syntax.strip_positions_ast, or via the syntax constant
8066 "_strip_positions" within parse trees. As last resort, positions can
8067 be disabled via the configuration option Syntax.positions, which is
8068 called "syntax_positions" in Isar attribute syntax.
8070 * Discontinued special status of various ML structures that contribute
8071 to structure Syntax (Ast, Lexicon, Mixfix, Parser, Printer etc.): less
8072 pervasive content, no inclusion in structure Syntax. INCOMPATIBILITY,
8073 refer directly to Ast.Constant, Lexicon.is_identifier,
8074 Syntax_Trans.mk_binder_tr etc.
8076 * Typed print translation: discontinued show_sorts argument, which is
8077 already available via context of "advanced" translation.
8079 * Refined PARALLEL_GOALS tactical: degrades gracefully for schematic
8080 goal states; body tactic needs to address all subgoals uniformly.
8082 * Slightly more special eq_list/eq_set, with shortcut involving
8083 pointer equality (assumes that eq relation is reflexive).
8085 * Classical tactics use proper Proof.context instead of historic types
8086 claset/clasimpset. Old-style declarations like addIs, addEs, addDs
8087 operate directly on Proof.context. Raw type claset retains its use as
8088 snapshot of the classical context, which can be recovered via
8089 (put_claset HOL_cs) etc. Type clasimpset has been discontinued.
8090 INCOMPATIBILITY, classical tactics and derived proof methods require
8091 proper Proof.context.
8096 * Discontinued support for Poly/ML 5.2, which was the last version
8097 without proper multithreading and TimeLimit implementation.
8099 * Discontinued old lib/scripts/polyml-platform, which has been
8100 obsolete since Isabelle2009-2.
8102 * Various optional external tools are referenced more robustly and
8103 uniformly by explicit Isabelle settings as follows:
8105 ISABELLE_CSDP (formerly CSDP_EXE)
8106 ISABELLE_GHC (formerly EXEC_GHC or GHC_PATH)
8107 ISABELLE_OCAML (formerly EXEC_OCAML)
8108 ISABELLE_SWIPL (formerly EXEC_SWIPL)
8109 ISABELLE_YAP (formerly EXEC_YAP)
8111 Note that automated detection from the file-system or search path has
8112 been discontinued. INCOMPATIBILITY.
8114 * Scala layer provides JVM method invocation service for static
8115 methods of type (String)String, see Invoke_Scala.method in ML. For
8118 Invoke_Scala.method "java.lang.System.getProperty" "java.home"
8120 Together with YXML.string_of_body/parse_body and XML.Encode/Decode
8121 this allows to pass structured values between ML and Scala.
8123 * The IsabelleText fonts includes some further glyphs to support the
8124 Prover IDE. Potential INCOMPATIBILITY: users who happen to have
8125 installed a local copy (which is normally *not* required) need to
8126 delete or update it from ~~/lib/fonts/.
8130 New in Isabelle2011 (January 2011)
8131 ----------------------------------
8135 * Experimental Prover IDE based on Isabelle/Scala and jEdit (see
8136 src/Tools/jEdit). This also serves as IDE for Isabelle/ML, with
8137 useful tooltips and hyperlinks produced from its static analysis. The
8138 bundled component provides an executable Isabelle tool that can be run
8141 Isabelle2011/bin/isabelle jedit
8143 * Significantly improved Isabelle/Isar implementation manual.
8145 * System settings: ISABELLE_HOME_USER now includes ISABELLE_IDENTIFIER
8146 (and thus refers to something like $HOME/.isabelle/Isabelle2011),
8147 while the default heap location within that directory lacks that extra
8148 suffix. This isolates multiple Isabelle installations from each
8149 other, avoiding problems with old settings in new versions.
8150 INCOMPATIBILITY, need to copy/upgrade old user settings manually.
8152 * Source files are always encoded as UTF-8, instead of old-fashioned
8153 ISO-Latin-1. INCOMPATIBILITY. Isabelle LaTeX documents might require
8154 the following package declarations:
8156 \usepackage[utf8]{inputenc}
8157 \usepackage{textcomp}
8159 * Explicit treatment of UTF-8 sequences as Isabelle symbols, such that
8160 a Unicode character is treated as a single symbol, not a sequence of
8161 non-ASCII bytes as before. Since Isabelle/ML string literals may
8162 contain symbols without further backslash escapes, Unicode can now be
8163 used here as well. Recall that Symbol.explode in ML provides a
8164 consistent view on symbols, while raw explode (or String.explode)
8165 merely give a byte-oriented representation.
8167 * Theory loader: source files are primarily located via the master
8168 directory of each theory node (where the .thy file itself resides).
8169 The global load path is still partially available as legacy feature.
8170 Minor INCOMPATIBILITY due to subtle change in file lookup: use
8171 explicit paths, relatively to the theory.
8173 * Special treatment of ML file names has been discontinued.
8174 Historically, optional extensions .ML or .sml were added on demand --
8175 at the cost of clarity of file dependencies. Recall that Isabelle/ML
8176 files exclusively use the .ML extension. Minor INCOMPATIBILITY.
8178 * Various options that affect pretty printing etc. are now properly
8179 handled within the context via configuration options, instead of
8180 unsynchronized references or print modes. There are both ML Config.T
8181 entities and Isar declaration attributes to access these.
8183 ML (Config.T) Isar (attribute)
8185 eta_contract eta_contract
8186 show_brackets show_brackets
8187 show_sorts show_sorts
8188 show_types show_types
8189 show_question_marks show_question_marks
8190 show_consts show_consts
8191 show_abbrevs show_abbrevs
8193 Syntax.ast_trace syntax_ast_trace
8194 Syntax.ast_stat syntax_ast_stat
8195 Syntax.ambiguity_level syntax_ambiguity_level
8197 Goal_Display.goals_limit goals_limit
8198 Goal_Display.show_main_goal show_main_goal
8200 Method.rule_trace rule_trace
8202 Thy_Output.display thy_output_display
8203 Thy_Output.quotes thy_output_quotes
8204 Thy_Output.indent thy_output_indent
8205 Thy_Output.source thy_output_source
8206 Thy_Output.break thy_output_break
8208 Note that corresponding "..._default" references in ML may only be
8209 changed globally at the ROOT session setup, but *not* within a theory.
8210 The option "show_abbrevs" supersedes the former print mode
8211 "no_abbrevs" with inverted meaning.
8213 * More systematic naming of some configuration options.
8216 trace_simp ~> simp_trace
8217 debug_simp ~> simp_debug
8219 * Support for real valued configuration options, using simplistic
8220 floating-point notation that coincides with the inner syntax for
8223 * Support for real valued preferences (with approximative PGIP type):
8224 front-ends need to accept "pgint" values in float notation.
8227 * The IsabelleText font now includes Cyrillic, Hebrew, Arabic from
8230 * Discontinued support for Poly/ML 5.0 and 5.1 versions.
8235 * Command 'type_synonym' (with single argument) replaces somewhat
8236 outdated 'types', which is still available as legacy feature for some
8239 * Command 'nonterminal' (with 'and' separated list of arguments)
8240 replaces somewhat outdated 'nonterminals'. INCOMPATIBILITY.
8242 * Command 'notepad' replaces former 'example_proof' for
8243 experimentation in Isar without any result. INCOMPATIBILITY.
8245 * Locale interpretation commands 'interpret' and 'sublocale' accept
8246 lists of equations to map definitions in a locale to appropriate
8247 entities in the context of the interpretation. The 'interpretation'
8248 command already provided this functionality.
8250 * Diagnostic command 'print_dependencies' prints the locale instances
8251 that would be activated if the specified expression was interpreted in
8252 the current context. Variant "print_dependencies!" assumes a context
8253 without interpretations.
8255 * Diagnostic command 'print_interps' prints interpretations in proofs
8256 in addition to interpretations in theories.
8258 * Discontinued obsolete 'global' and 'local' commands to manipulate
8259 the theory name space. Rare INCOMPATIBILITY. The ML functions
8260 Sign.root_path and Sign.local_path may be applied directly where this
8261 feature is still required for historical reasons.
8263 * Discontinued obsolete 'constdefs' command. INCOMPATIBILITY, use
8264 'definition' instead.
8266 * The "prems" fact, which refers to the accidental collection of
8267 foundational premises in the context, is now explicitly marked as
8268 legacy feature and will be discontinued soon. Consider using "assms"
8269 of the head statement or reference facts by explicit names.
8271 * Document antiquotations @{class} and @{type} print classes and type
8274 * Document antiquotation @{file} checks file/directory entries within
8275 the local file system.
8280 * Coercive subtyping: functions can be declared as coercions and type
8281 inference will add them as necessary upon input of a term. Theory
8282 Complex_Main declares real :: nat => real and real :: int => real as
8283 coercions. A coercion function f is declared like this:
8285 declare [[coercion f]]
8287 To lift coercions through type constructors (e.g. from nat => real to
8288 nat list => real list), map functions can be declared, e.g.
8290 declare [[coercion_map map]]
8292 Currently coercion inference is activated only in theories including
8293 real numbers, i.e. descendants of Complex_Main. This is controlled by
8294 the configuration option "coercion_enabled", e.g. it can be enabled in
8295 other theories like this:
8297 declare [[coercion_enabled]]
8299 * Command 'partial_function' provides basic support for recursive
8300 function definitions over complete partial orders. Concrete instances
8301 are provided for i) the option type, ii) tail recursion on arbitrary
8302 types, and iii) the heap monad of Imperative_HOL. See
8303 src/HOL/ex/Fundefs.thy and src/HOL/Imperative_HOL/ex/Linked_Lists.thy
8306 * Function package: f.psimps rules are no longer implicitly declared
8307 as [simp]. INCOMPATIBILITY.
8309 * Datatype package: theorems generated for executable equality (class
8310 "eq") carry proper names and are treated as default code equations.
8312 * Inductive package: now offers command 'inductive_simps' to
8313 automatically derive instantiated and simplified equations for
8314 inductive predicates, similar to 'inductive_cases'.
8316 * Command 'enriched_type' allows to register properties of the
8317 functorial structure of types.
8319 * Improved infrastructure for term evaluation using code generator
8320 techniques, in particular static evaluation conversions.
8322 * Code generator: Scala (2.8 or higher) has been added to the target
8325 * Code generator: globbing constant expressions "*" and "Theory.*"
8326 have been replaced by the more idiomatic "_" and "Theory._".
8329 * Code generator: export_code without explicit file declaration prints
8330 to standard output. INCOMPATIBILITY.
8332 * Code generator: do not print function definitions for case
8333 combinators any longer.
8335 * Code generator: simplification with rules determined with
8336 src/Tools/Code/code_simp.ML and method "code_simp".
8338 * Code generator for records: more idiomatic representation of record
8339 types. Warning: records are not covered by ancient SML code
8340 generation any longer. INCOMPATIBILITY. In cases of need, a suitable
8341 rep_datatype declaration helps to succeed then:
8345 rep_datatype foo_ext ...
8347 * Records: logical foundation type for records does not carry a
8348 '_type' suffix any longer (obsolete due to authentic syntax).
8351 * Quickcheck now by default uses exhaustive testing instead of random
8352 testing. Random testing can be invoked by "quickcheck [random]",
8353 exhaustive testing by "quickcheck [exhaustive]".
8355 * Quickcheck instantiates polymorphic types with small finite
8356 datatypes by default. This enables a simple execution mechanism to
8357 handle quantifiers and function equality over the finite datatypes.
8359 * Quickcheck random generator has been renamed from "code" to
8360 "random". INCOMPATIBILITY.
8362 * Quickcheck now has a configurable time limit which is set to 30
8363 seconds by default. This can be changed by adding [timeout = n] to the
8364 quickcheck command. The time limit for Auto Quickcheck is still set
8367 * Quickcheck in locales considers interpretations of that locale for
8368 counter example search.
8371 - Added "smt" and "remote_smt" provers based on the "smt" proof
8372 method. See the Sledgehammer manual for details ("isabelle doc
8375 sledgehammer atp_info ~> sledgehammer running_provers
8376 sledgehammer atp_kill ~> sledgehammer kill_provers
8377 sledgehammer available_atps ~> sledgehammer available_provers
8380 sledgehammer [atps = ...] ~> sledgehammer [provers = ...]
8381 sledgehammer [atp = ...] ~> sledgehammer [prover = ...]
8382 sledgehammer [timeout = 77 s] ~> sledgehammer [timeout = 77]
8383 (and "ms" and "min" are no longer supported)
8388 nitpick [timeout = 77 s] ~> nitpick [timeout = 77]
8389 nitpick [tac_timeout = 777 ms] ~> nitpick [tac_timeout = 0.777]
8391 - Added support for partial quotient types.
8392 - Added local versions of the "Nitpick.register_xxx" functions.
8393 - Added "whack" option.
8394 - Allow registration of quotient types as codatatypes.
8395 - Improved "merge_type_vars" option to merge more types.
8396 - Removed unsound "fast_descrs" option.
8397 - Added custom symmetry breaking for datatypes, making it possible to reach
8398 higher cardinalities.
8399 - Prevent the expansion of too large definitions.
8401 * Proof methods "metis" and "meson" now have configuration options
8402 "meson_trace", "metis_trace", and "metis_verbose" that can be enabled
8403 to diagnose these tools. E.g.
8405 using [[metis_trace = true]]
8407 * Auto Solve: Renamed "Auto Solve Direct". The tool is now available
8408 manually as command 'solve_direct'.
8410 * The default SMT solver Z3 must be enabled explicitly (due to
8411 licensing issues) by setting the environment variable
8412 Z3_NON_COMMERCIAL in etc/settings of the component, for example. For
8413 commercial applications, the SMT solver CVC3 is provided as fall-back;
8414 changing the SMT solver is done via the configuration option
8417 * Remote SMT solvers need to be referred to by the "remote_" prefix,
8418 i.e. "remote_cvc3" and "remote_z3".
8420 * Added basic SMT support for datatypes, records, and typedefs using
8421 the oracle mode (no proofs). Direct support of pairs has been dropped
8422 in exchange (pass theorems fst_conv snd_conv pair_collapse to the SMT
8423 support for a similar behavior). Minor INCOMPATIBILITY.
8425 * Changed SMT configuration options:
8427 z3_proofs ~> smt_oracle (with inverted meaning)
8428 z3_trace_assms ~> smt_trace_used_facts
8441 * Boogie output files (.b2i files) need to be declared in the theory
8444 * Simplification procedure "list_to_set_comprehension" rewrites list
8445 comprehensions applied to List.set to set comprehensions. Occasional
8446 INCOMPATIBILITY, may be deactivated like this:
8448 declare [[simproc del: list_to_set_comprehension]]
8450 * Removed old version of primrec package. INCOMPATIBILITY.
8452 * Removed simplifier congruence rule of "prod_case", as has for long
8453 been the case with "split". INCOMPATIBILITY.
8455 * String.literal is a type, but not a datatype. INCOMPATIBILITY.
8457 * Removed [split_format ... and ... and ...] version of
8458 [split_format]. Potential INCOMPATIBILITY.
8460 * Predicate "sorted" now defined inductively, with nice induction
8461 rules. INCOMPATIBILITY: former sorted.simps now named sorted_simps.
8463 * Constant "contents" renamed to "the_elem", to free the generic name
8464 contents for other uses. INCOMPATIBILITY.
8466 * Renamed class eq and constant eq (for code generation) to class
8467 equal and constant equal, plus renaming of related facts and various
8468 tuning. INCOMPATIBILITY.
8470 * Dropped type classes mult_mono and mult_mono1. INCOMPATIBILITY.
8472 * Removed output syntax "'a ~=> 'b" for "'a => 'b option".
8475 * Renamed theory Fset to Cset, type Fset.fset to Cset.set, in order to
8476 avoid confusion with finite sets. INCOMPATIBILITY.
8478 * Abandoned locales equiv, congruent and congruent2 for equivalence
8479 relations. INCOMPATIBILITY: use equivI rather than equiv_intro (same
8482 * Some previously unqualified names have been qualified:
8489 Trueprop ~> HOL.Trueprop
8494 op --> ~> HOL.implies
8506 Pair ~> Product_Type.Pair
8507 fst ~> Product_Type.fst
8508 snd ~> Product_Type.snd
8509 curry ~> Product_Type.curry
8511 Collect ~> Set.Collect
8515 * More canonical naming convention for some fundamental definitions:
8517 bot_bool_eq ~> bot_bool_def
8518 top_bool_eq ~> top_bool_def
8519 inf_bool_eq ~> inf_bool_def
8520 sup_bool_eq ~> sup_bool_def
8521 bot_fun_eq ~> bot_fun_def
8522 top_fun_eq ~> top_fun_def
8523 inf_fun_eq ~> inf_fun_def
8524 sup_fun_eq ~> sup_fun_def
8528 * More stylized fact names:
8530 expand_fun_eq ~> fun_eq_iff
8531 expand_set_eq ~> set_eq_iff
8533 nat_number ~> eval_nat_numeral
8537 * Refactoring of code-generation specific operations in theory List:
8543 mem_iff ~> member_def
8544 null_empty ~> null_def
8546 INCOMPATIBILITY. Note that these were not supposed to be used
8547 regularly unless for striking reasons; their main purpose was code
8550 Various operations from the Haskell prelude are used for generating
8553 * Term "bij f" is now an abbreviation of "bij_betw f UNIV UNIV". Term
8554 "surj f" is now an abbreviation of "range f = UNIV". The theorems
8555 bij_def and surj_def are unchanged. INCOMPATIBILITY.
8557 * Abolished some non-alphabetic type names: "prod" and "sum" replace
8558 "*" and "+" respectively. INCOMPATIBILITY.
8560 * Name "Plus" of disjoint sum operator "<+>" is now hidden. Write
8561 "Sum_Type.Plus" instead.
8563 * Constant "split" has been merged with constant "prod_case"; names of
8564 ML functions, facts etc. involving split have been retained so far,
8565 though. INCOMPATIBILITY.
8567 * Dropped old infix syntax "_ mem _" for List.member; use "_ : set _"
8568 instead. INCOMPATIBILITY.
8570 * Removed lemma "Option.is_none_none" which duplicates "is_none_def".
8573 * Former theory Library/Enum is now part of the HOL-Main image.
8574 INCOMPATIBILITY: all constants of the Enum theory now have to be
8575 referred to by its qualified name.
8578 nlists ~> Enum.nlists
8579 product ~> Enum.product
8581 * Theory Library/Monad_Syntax provides do-syntax for monad types.
8582 Syntax in Library/State_Monad has been changed to avoid ambiguities.
8585 * Theory Library/SetsAndFunctions has been split into
8586 Library/Function_Algebras and Library/Set_Algebras; canonical names
8587 for instance definitions for functions; various improvements.
8590 * Theory Library/Multiset provides stable quicksort implementation of
8593 * Theory Library/Multiset: renamed empty_idemp ~> empty_neutral.
8596 * Session Multivariate_Analysis: introduced a type class for euclidean
8597 space. Most theorems are now stated in terms of euclidean spaces
8598 instead of finite cartesian products.
8601 real ^ 'n ~> 'a::real_vector
8602 ~> 'a::euclidean_space
8603 ~> 'a::ordered_euclidean_space
8604 (depends on your needs)
8608 \<chi> x. _ ~> \<chi>\<chi> x. _
8611 Also note that the indices are now natural numbers and not from some
8612 finite type. Finite cartesian products of euclidean spaces, products
8613 of euclidean spaces the real and complex numbers are instantiated to
8614 be euclidean_spaces. INCOMPATIBILITY.
8616 * Session Probability: introduced pextreal as positive extended real
8617 numbers. Use pextreal as value for measures. Introduce the
8618 Radon-Nikodym derivative, product spaces and Fubini's theorem for
8619 arbitrary sigma finite measures. Introduces Lebesgue measure based on
8620 the integral in Multivariate Analysis. INCOMPATIBILITY.
8622 * Session Imperative_HOL: revamped, corrected dozens of inadequacies.
8625 * Session SPARK (with image HOL-SPARK) provides commands to load and
8626 prove verification conditions generated by the SPARK Ada program
8627 verifier. See also src/HOL/SPARK and src/HOL/SPARK/Examples.
8632 * Theorems for additive ring operations (locale abelian_monoid and
8633 descendants) are generated by interpretation from their multiplicative
8634 counterparts. Names (in particular theorem names) have the mandatory
8635 qualifier 'add'. Previous theorem names are redeclared for
8638 * Structure "int_ring" is now an abbreviation (previously a
8639 definition). This fits more natural with advanced interpretations.
8644 * The domain package now runs in definitional mode by default: The
8645 former command 'new_domain' is now called 'domain'. To use the domain
8646 package in its original axiomatic mode, use 'domain (unsafe)'.
8649 * The new class "domain" is now the default sort. Class "predomain"
8650 is an unpointed version of "domain". Theories can be updated by
8651 replacing sort annotations as shown below. INCOMPATIBILITY.
8653 'a::type ~> 'a::countable
8654 'a::cpo ~> 'a::predomain
8655 'a::pcpo ~> 'a::domain
8657 * The old type class "rep" has been superseded by class "domain".
8658 Accordingly, users of the definitional package must remove any
8659 "default_sort rep" declarations. INCOMPATIBILITY.
8661 * The domain package (definitional mode) now supports unpointed
8662 predomain argument types, as long as they are marked 'lazy'. (Strict
8663 arguments must be in class "domain".) For example, the following
8664 domain definition now works:
8666 domain natlist = nil | cons (lazy "nat discr") (lazy "natlist")
8668 * Theory HOLCF/Library/HOL_Cpo provides cpo and predomain class
8669 instances for types from main HOL: bool, nat, int, char, 'a + 'b,
8670 'a option, and 'a list. Additionally, it configures fixrec and the
8671 domain package to work with these types. For example:
8673 fixrec isInl :: "('a + 'b) u -> tr"
8674 where "isInl$(up$(Inl x)) = TT" | "isInl$(up$(Inr y)) = FF"
8676 domain V = VFun (lazy "V -> V") | VCon (lazy "nat") (lazy "V list")
8678 * The "(permissive)" option of fixrec has been replaced with a
8679 per-equation "(unchecked)" option. See
8680 src/HOL/HOLCF/Tutorial/Fixrec_ex.thy for examples. INCOMPATIBILITY.
8682 * The "bifinite" class no longer fixes a constant "approx"; the class
8683 now just asserts that such a function exists. INCOMPATIBILITY.
8685 * Former type "alg_defl" has been renamed to "defl". HOLCF no longer
8686 defines an embedding of type 'a defl into udom by default; instances
8687 of "bifinite" and "domain" classes are available in
8688 src/HOL/HOLCF/Library/Defl_Bifinite.thy.
8690 * The syntax "REP('a)" has been replaced with "DEFL('a)".
8692 * The predicate "directed" has been removed. INCOMPATIBILITY.
8694 * The type class "finite_po" has been removed. INCOMPATIBILITY.
8696 * The function "cprod_map" has been renamed to "prod_map".
8699 * The monadic bind operator on each powerdomain has new binder syntax
8700 similar to sets, e.g. "\<Union>\<sharp>x\<in>xs. t" represents
8701 "upper_bind\<cdot>xs\<cdot>(\<Lambda> x. t)".
8703 * The infix syntax for binary union on each powerdomain has changed
8704 from e.g. "+\<sharp>" to "\<union>\<sharp>", for consistency with set
8705 syntax. INCOMPATIBILITY.
8707 * The constant "UU" has been renamed to "bottom". The syntax "UU" is
8708 still supported as an input translation.
8710 * Renamed some theorems (the original names are also still available).
8712 expand_fun_below ~> fun_below_iff
8713 below_fun_ext ~> fun_belowI
8714 expand_cfun_eq ~> cfun_eq_iff
8715 ext_cfun ~> cfun_eqI
8716 expand_cfun_below ~> cfun_below_iff
8717 below_cfun_ext ~> cfun_belowI
8718 cont2cont_Rep_CFun ~> cont2cont_APP
8720 * The Abs and Rep functions for various types have changed names.
8721 Related theorem names have also changed to match. INCOMPATIBILITY.
8723 Rep_CFun ~> Rep_cfun
8724 Abs_CFun ~> Abs_cfun
8725 Rep_Sprod ~> Rep_sprod
8726 Abs_Sprod ~> Abs_sprod
8727 Rep_Ssum ~> Rep_ssum
8728 Abs_Ssum ~> Abs_ssum
8730 * Lemmas with names of the form *_defined_iff or *_strict_iff have
8731 been renamed to *_bottom_iff. INCOMPATIBILITY.
8733 * Various changes to bisimulation/coinduction with domain package:
8735 - Definitions of "bisim" constants no longer mention definedness.
8736 - With mutual recursion, "bisim" predicate is now curried.
8737 - With mutual recursion, each type gets a separate coind theorem.
8738 - Variable names in bisim_def and coinduct rules have changed.
8742 * Case combinators generated by the domain package for type "foo" are
8743 now named "foo_case" instead of "foo_when". INCOMPATIBILITY.
8745 * Several theorems have been renamed to more accurately reflect the
8746 names of constants and types involved. INCOMPATIBILITY.
8748 thelub_const ~> lub_const
8749 lub_const ~> is_lub_const
8751 is_lub_lub ~> is_lubD2
8753 unique_lub ~> is_lub_unique
8754 is_ub_lub ~> is_lub_rangeD1
8755 lub_bin_chain ~> is_lub_bin_chain
8756 lub_fun ~> is_lub_fun
8757 thelub_fun ~> lub_fun
8758 thelub_cfun ~> lub_cfun
8759 thelub_Pair ~> lub_Pair
8760 lub_cprod ~> is_lub_prod
8761 thelub_cprod ~> lub_prod
8762 minimal_cprod ~> minimal_prod
8763 inst_cprod_pcpo ~> inst_prod_pcpo
8765 compact_UU ~> compact_bottom
8766 deflation_UU ~> deflation_bottom
8767 finite_deflation_UU ~> finite_deflation_bottom
8769 * Many legacy theorem names have been discontinued. INCOMPATIBILITY.
8771 sq_ord_less_eq_trans ~> below_eq_trans
8772 sq_ord_eq_less_trans ~> eq_below_trans
8773 refl_less ~> below_refl
8774 trans_less ~> below_trans
8775 antisym_less ~> below_antisym
8776 antisym_less_inverse ~> po_eq_conv [THEN iffD1]
8777 box_less ~> box_below
8778 rev_trans_less ~> rev_below_trans
8779 not_less2not_eq ~> not_below2not_eq
8780 less_UU_iff ~> below_UU_iff
8781 flat_less_iff ~> flat_below_iff
8782 adm_less ~> adm_below
8783 adm_not_less ~> adm_not_below
8784 adm_compact_not_less ~> adm_compact_not_below
8785 less_fun_def ~> below_fun_def
8786 expand_fun_less ~> fun_below_iff
8787 less_fun_ext ~> fun_belowI
8788 less_discr_def ~> below_discr_def
8789 discr_less_eq ~> discr_below_eq
8790 less_unit_def ~> below_unit_def
8791 less_cprod_def ~> below_prod_def
8792 prod_lessI ~> prod_belowI
8793 Pair_less_iff ~> Pair_below_iff
8794 fst_less_iff ~> fst_below_iff
8795 snd_less_iff ~> snd_below_iff
8796 expand_cfun_less ~> cfun_below_iff
8797 less_cfun_ext ~> cfun_belowI
8798 injection_less ~> injection_below
8799 less_up_def ~> below_up_def
8800 not_Iup_less ~> not_Iup_below
8801 Iup_less ~> Iup_below
8803 Def_inject_less_eq ~> Def_below_Def
8804 Def_less_is_eq ~> Def_below_iff
8805 spair_less_iff ~> spair_below_iff
8806 less_sprod ~> below_sprod
8807 spair_less ~> spair_below
8808 sfst_less_iff ~> sfst_below_iff
8809 ssnd_less_iff ~> ssnd_below_iff
8810 fix_least_less ~> fix_least_below
8811 dist_less_one ~> dist_below_one
8812 less_ONE ~> below_ONE
8813 ONE_less_iff ~> ONE_below_iff
8814 less_sinlD ~> below_sinlD
8815 less_sinrD ~> below_sinrD
8820 * All constant names are now qualified internally and use proper
8821 identifiers, e.g. "IFOL.eq" instead of "op =". INCOMPATIBILITY.
8826 * Antiquotation @{assert} inlines a function bool -> unit that raises
8827 Fail if the argument is false. Due to inlining the source position of
8828 failed assertions is included in the error output.
8830 * Discontinued antiquotation @{theory_ref}, which is obsolete since ML
8831 text is in practice always evaluated with a stable theory checkpoint.
8832 Minor INCOMPATIBILITY, use (Theory.check_thy @{theory}) instead.
8834 * Antiquotation @{theory A} refers to theory A from the ancestry of
8835 the current context, not any accidental theory loader state as before.
8836 Potential INCOMPATIBILITY, subtle change in semantics.
8838 * Syntax.pretty_priority (default 0) configures the required priority
8839 of pretty-printed output and thus affects insertion of parentheses.
8841 * Syntax.default_root (default "any") configures the inner syntax
8842 category (nonterminal symbol) for parsing of terms.
8844 * Former exception Library.UnequalLengths now coincides with
8845 ListPair.UnequalLengths.
8847 * Renamed structure MetaSimplifier to Raw_Simplifier. Note that the
8848 main functionality is provided by structure Simplifier.
8850 * Renamed raw "explode" function to "raw_explode" to emphasize its
8851 meaning. Note that internally to Isabelle, Symbol.explode is used in
8852 almost all situations.
8854 * Discontinued obsolete function sys_error and exception SYS_ERROR.
8855 See implementation manual for further details on exceptions in
8858 * Renamed setmp_noncritical to Unsynchronized.setmp to emphasize its
8861 * Renamed structure PureThy to Pure_Thy and moved most of its
8862 operations to structure Global_Theory, to emphasize that this is
8863 rarely-used global-only stuff.
8865 * Discontinued Output.debug. Minor INCOMPATIBILITY, use plain writeln
8866 instead (or tracing for high-volume output).
8868 * Configuration option show_question_marks only affects regular pretty
8869 printing of types and terms, not raw Term.string_of_vname.
8871 * ML_Context.thm and ML_Context.thms are no longer pervasive. Rare
8872 INCOMPATIBILITY, superseded by static antiquotations @{thm} and
8873 @{thms} for most purposes.
8875 * ML structure Unsynchronized is never opened, not even in Isar
8876 interaction mode as before. Old Unsynchronized.set etc. have been
8877 discontinued -- use plain := instead. This should be *rare* anyway,
8878 since modern tools always work via official context data, notably
8879 configuration options.
8881 * Parallel and asynchronous execution requires special care concerning
8882 interrupts. Structure Exn provides some convenience functions that
8883 avoid working directly with raw Interrupt. User code must not absorb
8884 interrupts -- intermediate handling (for cleanup etc.) needs to be
8885 followed by re-raising of the original exception. Another common
8886 source of mistakes are "handle _" patterns, which make the meaning of
8887 the program subject to physical effects of the environment.
8891 New in Isabelle2009-2 (June 2010)
8892 ---------------------------------
8896 * Authentic syntax for *all* logical entities (type classes, type
8897 constructors, term constants): provides simple and robust
8898 correspondence between formal entities and concrete syntax. Within
8899 the parse tree / AST representations, "constants" are decorated by
8900 their category (class, type, const) and spelled out explicitly with
8901 their full internal name.
8903 Substantial INCOMPATIBILITY concerning low-level syntax declarations
8904 and translations (translation rules and translation functions in ML).
8905 Some hints on upgrading:
8907 - Many existing uses of 'syntax' and 'translations' can be replaced
8908 by more modern 'type_notation', 'notation' and 'abbreviation',
8909 which are independent of this issue.
8911 - 'translations' require markup within the AST; the term syntax
8912 provides the following special forms:
8914 CONST c -- produces syntax version of constant c from context
8915 XCONST c -- literally c, checked as constant from context
8916 c -- literally c, if declared by 'syntax'
8918 Plain identifiers are treated as AST variables -- occasionally the
8919 system indicates accidental variables via the error "rhs contains
8922 Type classes and type constructors are marked according to their
8923 concrete syntax. Some old translations rules need to be written
8924 for the "type" category, using type constructor application
8925 instead of pseudo-term application of the default category
8928 - 'parse_translation' etc. in ML may use the following
8931 @{class_syntax c} -- type class c within parse tree / AST
8932 @{term_syntax c} -- type constructor c within parse tree / AST
8933 @{const_syntax c} -- ML version of "CONST c" above
8934 @{syntax_const c} -- literally c (checked wrt. 'syntax' declarations)
8936 - Literal types within 'typed_print_translations', i.e. those *not*
8937 represented as pseudo-terms are represented verbatim. Use @{class
8938 c} or @{type_name c} here instead of the above syntax
8941 Note that old non-authentic syntax was based on unqualified base
8942 names, so all of the above "constant" names would coincide. Recall
8943 that 'print_syntax' and ML_command "set Syntax.trace_ast" help to
8944 diagnose syntax problems.
8946 * Type constructors admit general mixfix syntax, not just infix.
8948 * Concrete syntax may be attached to local entities without a proof
8949 body, too. This works via regular mixfix annotations for 'fix',
8950 'def', 'obtain' etc. or via the explicit 'write' command, which is
8951 similar to the 'notation' command in theory specifications.
8953 * Discontinued unnamed infix syntax (legacy feature for many years) --
8954 need to specify constant name and syntax separately. Internal ML
8955 datatype constructors have been renamed from InfixName to Infix etc.
8956 Minor INCOMPATIBILITY.
8958 * Schematic theorem statements need to be explicitly markup as such,
8959 via commands 'schematic_lemma', 'schematic_theorem',
8960 'schematic_corollary'. Thus the relevance of the proof is made
8961 syntactically clear, which impacts performance in a parallel or
8962 asynchronous interactive environment. Minor INCOMPATIBILITY.
8964 * Use of cumulative prems via "!" in some proof methods has been
8965 discontinued (old legacy feature).
8967 * References 'trace_simp' and 'debug_simp' have been replaced by
8968 configuration options stored in the context. Enabling tracing (the
8969 case of debugging is similar) in proofs works via
8971 using [[trace_simp = true]]
8973 Tracing is then active for all invocations of the simplifier in
8974 subsequent goal refinement steps. Tracing may also still be enabled or
8975 disabled via the ProofGeneral settings menu.
8977 * Separate commands 'hide_class', 'hide_type', 'hide_const',
8978 'hide_fact' replace the former 'hide' KIND command. Minor
8981 * Improved parallelism of proof term normalization: usedir -p2 -q0 is
8982 more efficient than combinations with -q1 or -q2.
8987 * Proofterms record type-class reasoning explicitly, using the
8988 "unconstrain" operation internally. This eliminates all sort
8989 constraints from a theorem and proof, introducing explicit
8990 OFCLASS-premises. On the proof term level, this operation is
8991 automatically applied at theorem boundaries, such that closed proofs
8992 are always free of sort constraints. INCOMPATIBILITY for tools that
8993 inspect proof terms.
8995 * Local theory specifications may depend on extra type variables that
8996 are not present in the result type -- arguments TYPE('a) :: 'a itself
8997 are added internally. For example:
8999 definition unitary :: bool where "unitary = (ALL (x::'a) y. x = y)"
9001 * Predicates of locales introduced by classes carry a mandatory
9002 "class" prefix. INCOMPATIBILITY.
9004 * Vacuous class specifications observe default sort. INCOMPATIBILITY.
9006 * Old 'axclass' command has been discontinued. INCOMPATIBILITY, use
9009 * Command 'code_reflect' allows to incorporate generated ML code into
9010 runtime environment; replaces immature code_datatype antiquotation.
9013 * Code generator: simple concept for abstract datatypes obeying
9016 * Code generator: details of internal data cache have no impact on the
9017 user space functionality any longer.
9019 * Methods "unfold_locales" and "intro_locales" ignore non-locale
9020 subgoals. This is more appropriate for interpretations with 'where'.
9023 * Command 'example_proof' opens an empty proof body. This allows to
9024 experiment with Isar, without producing any persistent result.
9026 * Commands 'type_notation' and 'no_type_notation' declare type syntax
9027 within a local theory context, with explicit checking of the
9028 constructors involved (in contrast to the raw 'syntax' versions).
9030 * Commands 'types' and 'typedecl' now work within a local theory
9031 context -- without introducing dependencies on parameters or
9032 assumptions, which is not possible in Isabelle/Pure.
9034 * Command 'defaultsort' has been renamed to 'default_sort', it works
9035 within a local theory context. Minor INCOMPATIBILITY.
9040 * Command 'typedef' now works within a local theory context -- without
9041 introducing dependencies on parameters or assumptions, which is not
9042 possible in Isabelle/Pure/HOL. Note that the logical environment may
9043 contain multiple interpretations of local typedefs (with different
9044 non-emptiness proofs), even in a global theory context.
9046 * New package for quotient types. Commands 'quotient_type' and
9047 'quotient_definition' may be used for defining types and constants by
9048 quotient constructions. An example is the type of integers created by
9049 quotienting pairs of natural numbers:
9052 intrel :: "(nat * nat) => (nat * nat) => bool"
9054 "intrel (x, y) (u, v) = (x + v = u + y)"
9056 quotient_type int = "nat * nat" / intrel
9057 by (auto simp add: equivp_def expand_fun_eq)
9060 "0::int" is "(0::nat, 0::nat)"
9062 The method "lifting" can be used to lift of theorems from the
9063 underlying "raw" type to the quotient type. The example
9064 src/HOL/Quotient_Examples/FSet.thy includes such a quotient
9065 construction and provides a reasoning infrastructure for finite sets.
9067 * Renamed Library/Quotient.thy to Library/Quotient_Type.thy to avoid
9068 clash with new theory Quotient in Main HOL.
9070 * Moved the SMT binding into the main HOL session, eliminating
9071 separate HOL-SMT session.
9073 * List membership infix mem operation is only an input abbreviation.
9076 * Theory Library/Word.thy has been removed. Use library Word/Word.thy
9077 for future developements; former Library/Word.thy is still present in
9078 the AFP entry RSAPPS.
9080 * Theorem Int.int_induct renamed to Int.int_of_nat_induct and is no
9081 longer shadowed. INCOMPATIBILITY.
9083 * Dropped theorem duplicate comp_arith; use semiring_norm instead.
9086 * Dropped theorem RealPow.real_sq_order; use power2_le_imp_le instead.
9089 * Dropped normalizing_semiring etc; use the facts in semiring classes
9090 instead. INCOMPATIBILITY.
9092 * Dropped several real-specific versions of lemmas about floor and
9093 ceiling; use the generic lemmas from theory "Archimedean_Field"
9094 instead. INCOMPATIBILITY.
9096 floor_number_of_eq ~> floor_number_of
9097 le_floor_eq_number_of ~> number_of_le_floor
9098 le_floor_eq_zero ~> zero_le_floor
9099 le_floor_eq_one ~> one_le_floor
9100 floor_less_eq_number_of ~> floor_less_number_of
9101 floor_less_eq_zero ~> floor_less_zero
9102 floor_less_eq_one ~> floor_less_one
9103 less_floor_eq_number_of ~> number_of_less_floor
9104 less_floor_eq_zero ~> zero_less_floor
9105 less_floor_eq_one ~> one_less_floor
9106 floor_le_eq_number_of ~> floor_le_number_of
9107 floor_le_eq_zero ~> floor_le_zero
9108 floor_le_eq_one ~> floor_le_one
9109 floor_subtract_number_of ~> floor_diff_number_of
9110 floor_subtract_one ~> floor_diff_one
9111 ceiling_number_of_eq ~> ceiling_number_of
9112 ceiling_le_eq_number_of ~> ceiling_le_number_of
9113 ceiling_le_zero_eq ~> ceiling_le_zero
9114 ceiling_le_eq_one ~> ceiling_le_one
9115 less_ceiling_eq_number_of ~> number_of_less_ceiling
9116 less_ceiling_eq_zero ~> zero_less_ceiling
9117 less_ceiling_eq_one ~> one_less_ceiling
9118 ceiling_less_eq_number_of ~> ceiling_less_number_of
9119 ceiling_less_eq_zero ~> ceiling_less_zero
9120 ceiling_less_eq_one ~> ceiling_less_one
9121 le_ceiling_eq_number_of ~> number_of_le_ceiling
9122 le_ceiling_eq_zero ~> zero_le_ceiling
9123 le_ceiling_eq_one ~> one_le_ceiling
9124 ceiling_subtract_number_of ~> ceiling_diff_number_of
9125 ceiling_subtract_one ~> ceiling_diff_one
9127 * Theory "Finite_Set": various folding_XXX locales facilitate the
9128 application of the various fold combinators on finite sets.
9130 * Library theory "RBT" renamed to "RBT_Impl"; new library theory "RBT"
9131 provides abstract red-black tree type which is backed by "RBT_Impl" as
9132 implementation. INCOMPATIBILITY.
9134 * Theory Library/Coinductive_List has been removed -- superseded by
9135 AFP/thys/Coinductive.
9137 * Theory PReal, including the type "preal" and related operations, has
9138 been removed. INCOMPATIBILITY.
9140 * Real: new development using Cauchy Sequences.
9142 * Split off theory "Big_Operators" containing setsum, setprod,
9143 Inf_fin, Sup_fin, Min, Max from theory Finite_Set. INCOMPATIBILITY.
9145 * Theory "Rational" renamed to "Rat", for consistency with "Nat",
9146 "Int" etc. INCOMPATIBILITY.
9148 * Constant Rat.normalize needs to be qualified. INCOMPATIBILITY.
9150 * New set of rules "ac_simps" provides combined assoc / commute
9151 rewrites for all interpretations of the appropriate generic locales.
9153 * Renamed theory "OrderedGroup" to "Groups" and split theory
9154 "Ring_and_Field" into theories "Rings" and "Fields"; for more
9155 appropriate and more consistent names suitable for name prefixes
9156 within the HOL theories. INCOMPATIBILITY.
9158 * Some generic constants have been put to appropriate theories:
9159 - less_eq, less: Orderings
9160 - zero, one, plus, minus, uminus, times, abs, sgn: Groups
9161 - inverse, divide: Rings
9164 * More consistent naming of type classes involving orderings (and
9167 lower_semilattice ~> semilattice_inf
9168 upper_semilattice ~> semilattice_sup
9170 dense_linear_order ~> dense_linorder
9172 pordered_ab_group_add ~> ordered_ab_group_add
9173 pordered_ab_group_add_abs ~> ordered_ab_group_add_abs
9174 pordered_ab_semigroup_add ~> ordered_ab_semigroup_add
9175 pordered_ab_semigroup_add_imp_le ~> ordered_ab_semigroup_add_imp_le
9176 pordered_cancel_ab_semigroup_add ~> ordered_cancel_ab_semigroup_add
9177 pordered_cancel_comm_semiring ~> ordered_cancel_comm_semiring
9178 pordered_cancel_semiring ~> ordered_cancel_semiring
9179 pordered_comm_monoid_add ~> ordered_comm_monoid_add
9180 pordered_comm_ring ~> ordered_comm_ring
9181 pordered_comm_semiring ~> ordered_comm_semiring
9182 pordered_ring ~> ordered_ring
9183 pordered_ring_abs ~> ordered_ring_abs
9184 pordered_semiring ~> ordered_semiring
9186 ordered_ab_group_add ~> linordered_ab_group_add
9187 ordered_ab_semigroup_add ~> linordered_ab_semigroup_add
9188 ordered_cancel_ab_semigroup_add ~> linordered_cancel_ab_semigroup_add
9189 ordered_comm_semiring_strict ~> linordered_comm_semiring_strict
9190 ordered_field ~> linordered_field
9191 ordered_field_no_lb ~> linordered_field_no_lb
9192 ordered_field_no_ub ~> linordered_field_no_ub
9193 ordered_field_dense_linear_order ~> dense_linordered_field
9194 ordered_idom ~> linordered_idom
9195 ordered_ring ~> linordered_ring
9196 ordered_ring_le_cancel_factor ~> linordered_ring_le_cancel_factor
9197 ordered_ring_less_cancel_factor ~> linordered_ring_less_cancel_factor
9198 ordered_ring_strict ~> linordered_ring_strict
9199 ordered_semidom ~> linordered_semidom
9200 ordered_semiring ~> linordered_semiring
9201 ordered_semiring_1 ~> linordered_semiring_1
9202 ordered_semiring_1_strict ~> linordered_semiring_1_strict
9203 ordered_semiring_strict ~> linordered_semiring_strict
9205 The following slightly odd type classes have been moved to a
9206 separate theory Library/Lattice_Algebras:
9208 lordered_ab_group_add ~> lattice_ab_group_add
9209 lordered_ab_group_add_abs ~> lattice_ab_group_add_abs
9210 lordered_ab_group_add_meet ~> semilattice_inf_ab_group_add
9211 lordered_ab_group_add_join ~> semilattice_sup_ab_group_add
9212 lordered_ring ~> lattice_ring
9216 * Refined field classes:
9217 - classes division_ring_inverse_zero, field_inverse_zero,
9218 linordered_field_inverse_zero include rule inverse 0 = 0 --
9219 subsumes former division_by_zero class;
9220 - numerous lemmas have been ported from field to division_ring.
9223 * Refined algebra theorem collections:
9224 - dropped theorem group group_simps, use algebra_simps instead;
9225 - dropped theorem group ring_simps, use field_simps instead;
9226 - proper theorem collection field_simps subsumes former theorem
9227 groups field_eq_simps and field_simps;
9228 - dropped lemma eq_minus_self_iff which is a duplicate for
9232 * Theory Finite_Set and List: some lemmas have been generalized from
9235 fun_left_comm_idem_inter ~> fun_left_comm_idem_inf
9236 fun_left_comm_idem_union ~> fun_left_comm_idem_sup
9237 inter_Inter_fold_inter ~> inf_Inf_fold_inf
9238 union_Union_fold_union ~> sup_Sup_fold_sup
9239 Inter_fold_inter ~> Inf_fold_inf
9240 Union_fold_union ~> Sup_fold_sup
9241 inter_INTER_fold_inter ~> inf_INFI_fold_inf
9242 union_UNION_fold_union ~> sup_SUPR_fold_sup
9243 INTER_fold_inter ~> INFI_fold_inf
9244 UNION_fold_union ~> SUPR_fold_sup
9246 * Theory "Complete_Lattice": lemmas top_def and bot_def have been
9247 replaced by the more convenient lemmas Inf_empty and Sup_empty.
9248 Dropped lemmas Inf_insert_simp and Sup_insert_simp, which are subsumed
9249 by Inf_insert and Sup_insert. Lemmas Inf_UNIV and Sup_UNIV replace
9250 former Inf_Univ and Sup_Univ. Lemmas inf_top_right and sup_bot_right
9251 subsume inf_top and sup_bot respectively. INCOMPATIBILITY.
9253 * Reorganized theory Multiset: swapped notation of pointwise and
9256 - pointwise ordering is instance of class order with standard syntax
9258 - multiset ordering has syntax <=# and <#; partial order properties
9259 are provided by means of interpretation with prefix
9261 - less duplication, less historical organization of sections,
9262 conversion from associations lists to multisets, rudimentary code
9264 - use insert_DiffM2 [symmetric] instead of elem_imp_eq_diff_union,
9269 multiset_eq_conv_count_eq ~> multiset_ext_iff
9270 multi_count_ext ~> multiset_ext
9271 diff_union_inverse2 ~> diff_union_cancelR
9275 * Theory Permutation: replaced local "remove" by List.remove1.
9277 * Code generation: ML and OCaml code is decorated with signatures.
9279 * Theory List: added transpose.
9281 * Library/Nat_Bijection.thy is a collection of bijective functions
9282 between nat and other types, which supersedes the older libraries
9283 Library/Nat_Int_Bij.thy and HOLCF/NatIso.thy. INCOMPATIBILITY.
9286 Nat_Int_Bij.nat2_to_nat ~> prod_encode
9287 Nat_Int_Bij.nat_to_nat2 ~> prod_decode
9288 Nat_Int_Bij.int_to_nat_bij ~> int_encode
9289 Nat_Int_Bij.nat_to_int_bij ~> int_decode
9290 Countable.pair_encode ~> prod_encode
9291 NatIso.prod2nat ~> prod_encode
9292 NatIso.nat2prod ~> prod_decode
9293 NatIso.sum2nat ~> sum_encode
9294 NatIso.nat2sum ~> sum_decode
9295 NatIso.list2nat ~> list_encode
9296 NatIso.nat2list ~> list_decode
9297 NatIso.set2nat ~> set_encode
9298 NatIso.nat2set ~> set_decode
9301 Nat_Int_Bij.bij_nat_to_int_bij ~> bij_int_decode
9302 Nat_Int_Bij.nat2_to_nat_inj ~> inj_prod_encode
9303 Nat_Int_Bij.nat2_to_nat_surj ~> surj_prod_encode
9304 Nat_Int_Bij.nat_to_nat2_inj ~> inj_prod_decode
9305 Nat_Int_Bij.nat_to_nat2_surj ~> surj_prod_decode
9306 Nat_Int_Bij.i2n_n2i_id ~> int_encode_inverse
9307 Nat_Int_Bij.n2i_i2n_id ~> int_decode_inverse
9308 Nat_Int_Bij.surj_nat_to_int_bij ~> surj_int_encode
9309 Nat_Int_Bij.surj_int_to_nat_bij ~> surj_int_decode
9310 Nat_Int_Bij.inj_nat_to_int_bij ~> inj_int_encode
9311 Nat_Int_Bij.inj_int_to_nat_bij ~> inj_int_decode
9312 Nat_Int_Bij.bij_nat_to_int_bij ~> bij_int_encode
9313 Nat_Int_Bij.bij_int_to_nat_bij ~> bij_int_decode
9316 - Renamed ATP commands:
9317 atp_info ~> sledgehammer running_atps
9318 atp_kill ~> sledgehammer kill_atps
9319 atp_messages ~> sledgehammer messages
9320 atp_minimize ~> sledgehammer minimize
9321 print_atps ~> sledgehammer available_atps
9323 - Added user's manual ("isabelle doc sledgehammer").
9324 - Added option syntax and "sledgehammer_params" to customize
9325 Sledgehammer's behavior. See the manual for details.
9326 - Modified the Isar proof reconstruction code so that it produces
9327 direct proofs rather than proofs by contradiction. (This feature
9328 is still experimental.)
9329 - Made Isar proof reconstruction work for SPASS, remote ATPs, and in
9331 - Added support for TPTP syntax for SPASS via the "spass_tptp" ATP.
9334 - Added and implemented "binary_ints" and "bits" options.
9335 - Added "std" option and implemented support for nonstandard models.
9336 - Added and implemented "finitize" option to improve the precision
9337 of infinite datatypes based on a monotonicity analysis.
9338 - Added support for quotient types.
9339 - Added support for "specification" and "ax_specification"
9341 - Added support for local definitions (for "function" and
9342 "termination" proofs).
9343 - Added support for term postprocessors.
9344 - Optimized "Multiset.multiset" and "FinFun.finfun".
9345 - Improved efficiency of "destroy_constrs" optimization.
9346 - Fixed soundness bugs related to "destroy_constrs" optimization and
9348 - Fixed soundness bug related to higher-order constructors.
9349 - Fixed soundness bug when "full_descrs" is enabled.
9350 - Improved precision of set constructs.
9351 - Added "atoms" option.
9352 - Added cache to speed up repeated Kodkod invocations on the same
9354 - Renamed "MiniSatJNI", "zChaffJNI", "BerkMinAlloy", and
9355 "SAT4JLight" to "MiniSat_JNI", "zChaff_JNI", "BerkMin_Alloy", and
9356 "SAT4J_Light". INCOMPATIBILITY.
9357 - Removed "skolemize", "uncurry", "sym_break", "flatten_prop",
9358 "sharing_depth", and "show_skolems" options. INCOMPATIBILITY.
9359 - Removed "nitpick_intro" attribute. INCOMPATIBILITY.
9361 * Method "induct" now takes instantiations of the form t, where t is not
9362 a variable, as a shorthand for "x == t", where x is a fresh variable.
9363 If this is not intended, t has to be enclosed in parentheses.
9364 By default, the equalities generated by definitional instantiations
9365 are pre-simplified, which may cause parameters of inductive cases
9366 to disappear, or may even delete some of the inductive cases.
9367 Use "induct (no_simp)" instead of "induct" to restore the old
9368 behaviour. The (no_simp) option is also understood by the "cases"
9369 and "nominal_induct" methods, which now perform pre-simplification, too.
9375 * Variable names in lemmas generated by the domain package have
9376 changed; the naming scheme is now consistent with the HOL datatype
9377 package. Some proof scripts may be affected, INCOMPATIBILITY.
9379 * The domain package no longer defines the function "foo_copy" for
9380 recursive domain "foo". The reach lemma is now stated directly in
9381 terms of "foo_take". Lemmas and proofs that mention "foo_copy" must
9382 be reformulated in terms of "foo_take", INCOMPATIBILITY.
9384 * Most definedness lemmas generated by the domain package (previously
9385 of the form "x ~= UU ==> foo$x ~= UU") now have an if-and-only-if form
9386 like "foo$x = UU <-> x = UU", which works better as a simp rule.
9387 Proofs that used definedness lemmas as intro rules may break,
9388 potential INCOMPATIBILITY.
9390 * Induction and casedist rules generated by the domain package now
9391 declare proper case_names (one called "bottom", and one named for each
9392 constructor). INCOMPATIBILITY.
9394 * For mutually-recursive domains, separate "reach" and "take_lemma"
9395 rules are generated for each domain, INCOMPATIBILITY.
9397 foo_bar.reach ~> foo.reach bar.reach
9398 foo_bar.take_lemmas ~> foo.take_lemma bar.take_lemma
9400 * Some lemmas generated by the domain package have been renamed for
9401 consistency with the datatype package, INCOMPATIBILITY.
9403 foo.ind ~> foo.induct
9404 foo.finite_ind ~> foo.finite_induct
9405 foo.coind ~> foo.coinduct
9406 foo.casedist ~> foo.exhaust
9407 foo.exhaust ~> foo.nchotomy
9409 * For consistency with other definition packages, the fixrec package
9410 now generates qualified theorem names, INCOMPATIBILITY.
9412 foo_simps ~> foo.simps
9413 foo_unfold ~> foo.unfold
9414 foo_induct ~> foo.induct
9416 * The "fixrec_simp" attribute has been removed. The "fixrec_simp"
9417 method and internal fixrec proofs now use the default simpset instead.
9420 * The "contlub" predicate has been removed. Proof scripts should use
9421 lemma contI2 in place of monocontlub2cont, INCOMPATIBILITY.
9423 * The "admw" predicate has been removed, INCOMPATIBILITY.
9425 * The constants cpair, cfst, and csnd have been removed in favor of
9426 Pair, fst, and snd from Isabelle/HOL, INCOMPATIBILITY.
9431 * Antiquotations for basic formal entities:
9433 @{class NAME} -- type class
9434 @{class_syntax NAME} -- syntax representation of the above
9436 @{type_name NAME} -- logical type
9437 @{type_abbrev NAME} -- type abbreviation
9438 @{nonterminal NAME} -- type of concrete syntactic category
9439 @{type_syntax NAME} -- syntax representation of any of the above
9441 @{const_name NAME} -- logical constant (INCOMPATIBILITY)
9442 @{const_abbrev NAME} -- abbreviated constant
9443 @{const_syntax NAME} -- syntax representation of any of the above
9445 * Antiquotation @{syntax_const NAME} ensures that NAME refers to a raw
9446 syntax constant (cf. 'syntax' command).
9448 * Antiquotation @{make_string} inlines a function to print arbitrary
9449 values similar to the ML toplevel. The result is compiler dependent
9450 and may fall back on "?" in certain situations.
9452 * Diagnostic commands 'ML_val' and 'ML_command' may refer to
9453 antiquotations @{Isar.state} and @{Isar.goal}. This replaces impure
9454 Isar.state() and Isar.goal(), which belong to the old TTY loop and do
9455 not work with the asynchronous Isar document model.
9457 * Configuration options now admit dynamic default values, depending on
9458 the context or even global references.
9460 * SHA1.digest digests strings according to SHA-1 (see RFC 3174). It
9461 uses an efficient external library if available (for Poly/ML).
9463 * Renamed some important ML structures, while keeping the old names
9464 for some time as aliases within the structure Legacy:
9466 OuterKeyword ~> Keyword
9469 OuterSyntax ~> Outer_Syntax
9470 PrintMode ~> Print_Mode
9471 SpecParse ~> Parse_Spec
9474 ThyOutput ~> Thy_Output
9475 TypeInfer ~> Type_Infer
9477 Note that "open Legacy" simplifies porting of sources, but forgetting
9478 to remove it again will complicate porting again in the future.
9480 * Most operations that refer to a global context are named
9481 accordingly, e.g. Simplifier.global_context or
9482 ProofContext.init_global. There are some situations where a global
9483 context actually works, but under normal circumstances one needs to
9484 pass the proper local context through the code!
9486 * Discontinued old TheoryDataFun with its copy/init operation -- data
9487 needs to be pure. Functor Theory_Data_PP retains the traditional
9488 Pretty.pp argument to merge, which is absent in the standard
9489 Theory_Data version.
9491 * Sorts.certify_sort and derived "cert" operations for types and terms
9492 no longer minimize sorts. Thus certification at the boundary of the
9493 inference kernel becomes invariant under addition of class relations,
9494 which is an important monotonicity principle. Sorts are now minimized
9495 in the syntax layer only, at the boundary between the end-user and the
9496 system. Subtle INCOMPATIBILITY, may have to use Sign.minimize_sort
9497 explicitly in rare situations.
9499 * Renamed old-style Drule.standard to Drule.export_without_context, to
9500 emphasize that this is in no way a standard operation.
9503 * Subgoal.FOCUS (and variants): resulting goal state is normalized as
9504 usual for resolution. Rare INCOMPATIBILITY.
9506 * Renamed varify/unvarify operations to varify_global/unvarify_global
9507 to emphasize that these only work in a global situation (which is
9510 * Curried take and drop in library.ML; negative length is interpreted
9511 as infinity (as in chop). Subtle INCOMPATIBILITY.
9513 * Proof terms: type substitutions on proof constants now use canonical
9514 order of type variables. INCOMPATIBILITY for tools working with proof
9517 * Raw axioms/defs may no longer carry sort constraints, and raw defs
9518 may no longer carry premises. User-level specifications are
9519 transformed accordingly by Thm.add_axiom/add_def.
9524 * Discontinued special HOL_USEDIR_OPTIONS for the main HOL image;
9525 ISABELLE_USEDIR_OPTIONS applies uniformly to all sessions. Note that
9526 proof terms are enabled unconditionally in the new HOL-Proofs image.
9528 * Discontinued old ISABELLE and ISATOOL environment settings (legacy
9529 feature since Isabelle2009). Use ISABELLE_PROCESS and ISABELLE_TOOL,
9532 * Old lib/scripts/polyml-platform is superseded by the
9533 ISABELLE_PLATFORM setting variable, which defaults to the 32 bit
9534 variant, even on a 64 bit machine. The following example setting
9535 prefers 64 bit if available:
9537 ML_PLATFORM="${ISABELLE_PLATFORM64:-$ISABELLE_PLATFORM}"
9539 * The preliminary Isabelle/jEdit application demonstrates the emerging
9540 Isabelle/Scala layer for advanced prover interaction and integration.
9541 See src/Tools/jEdit or "isabelle jedit" provided by the properly built
9544 * "IsabelleText" is a Unicode font derived from Bitstream Vera Mono
9545 and Bluesky TeX fonts. It provides the usual Isabelle symbols,
9546 similar to the default assignment of the document preparation system
9547 (cf. isabellesym.sty). The Isabelle/Scala class Isabelle_System
9548 provides some operations for direct access to the font without asking
9549 the user for manual installation.
9553 New in Isabelle2009-1 (December 2009)
9554 -------------------------------------
9558 * Discontinued old form of "escaped symbols" such as \\<forall>. Only
9559 one backslash should be used, even in ML sources.
9564 * Locale interpretation propagates mixins along the locale hierarchy.
9565 The currently only available mixins are the equations used to map
9566 local definitions to terms of the target domain of an interpretation.
9568 * Reactivated diagnostic command 'print_interps'. Use "print_interps
9569 loc" to print all interpretations of locale "loc" in the theory.
9570 Interpretations in proofs are not shown.
9572 * Thoroughly revised locales tutorial. New section on conditional
9575 * On instantiation of classes, remaining undefined class parameters
9576 are formally declared. INCOMPATIBILITY.
9579 *** Document preparation ***
9581 * New generalized style concept for printing terms: @{foo (style) ...}
9582 instead of @{foo_style style ...} (old form is still retained for
9583 backward compatibility). Styles can be also applied for
9584 antiquotations prop, term_type and typeof.
9589 * New proof method "smt" for a combination of first-order logic with
9590 equality, linear and nonlinear (natural/integer/real) arithmetic, and
9591 fixed-size bitvectors; there is also basic support for higher-order
9592 features (esp. lambda abstractions). It is an incomplete decision
9593 procedure based on external SMT solvers using the oracle mechanism;
9594 for the SMT solver Z3, this method is proof-producing. Certificates
9595 are provided to avoid calling the external solvers solely for
9596 re-checking proofs. Due to a remote SMT service there is no need for
9597 installing SMT solvers locally. See src/HOL/SMT.
9599 * New commands to load and prove verification conditions generated by
9600 the Boogie program verifier or derived systems (e.g. the Verifying C
9601 Compiler (VCC) or Spec#). See src/HOL/Boogie.
9603 * New counterexample generator tool 'nitpick' based on the Kodkod
9604 relational model finder. See src/HOL/Tools/Nitpick and
9605 src/HOL/Nitpick_Examples.
9607 * New commands 'code_pred' and 'values' to invoke the predicate
9608 compiler and to enumerate values of inductive predicates.
9610 * A tabled implementation of the reflexive transitive closure.
9612 * New implementation of quickcheck uses generic code generator;
9613 default generators are provided for all suitable HOL types, records
9614 and datatypes. Old quickcheck can be re-activated importing theory
9615 Library/SML_Quickcheck.
9617 * New testing tool Mirabelle for automated proof tools. Applies
9618 several tools and tactics like sledgehammer, metis, or quickcheck, to
9619 every proof step in a theory. To be used in batch mode via the
9620 "mirabelle" utility.
9622 * New proof method "sos" (sum of squares) for nonlinear real
9623 arithmetic (originally due to John Harison). It requires theory
9624 Library/Sum_Of_Squares. It is not a complete decision procedure but
9625 works well in practice on quantifier-free real arithmetic with +, -,
9626 *, ^, =, <= and <, i.e. boolean combinations of equalities and
9627 inequalities between polynomials. It makes use of external
9628 semidefinite programming solvers. Method "sos" generates a
9629 certificate that can be pasted into the proof thus avoiding the need
9630 to call an external tool every time the proof is checked. See
9631 src/HOL/Library/Sum_Of_Squares.
9633 * New method "linarith" invokes existing linear arithmetic decision
9636 * New command 'atp_minimal' reduces result produced by Sledgehammer.
9638 * New Sledgehammer option "Full Types" in Proof General settings menu.
9639 Causes full type information to be output to the ATPs. This slows
9640 ATPs down considerably but eliminates a source of unsound "proofs"
9643 * New method "metisFT": A version of metis that uses full type
9644 information in order to avoid failures of proof reconstruction.
9646 * New evaluator "approximate" approximates an real valued term using
9647 the same method as the approximation method.
9649 * Method "approximate" now supports arithmetic expressions as
9650 boundaries of intervals and implements interval splitting and Taylor
9653 * ML antiquotation @{code_datatype} inserts definition of a datatype
9654 generated by the code generator; e.g. see src/HOL/Predicate.thy.
9656 * New theory SupInf of the supremum and infimum operators for sets of
9659 * New theory Probability, which contains a development of measure
9660 theory, eventually leading to Lebesgue integration and probability.
9662 * Extended Multivariate Analysis to include derivation and Brouwer's
9665 * Reorganization of number theory, INCOMPATIBILITY:
9666 - new number theory development for nat and int, in theories Divides
9667 and GCD as well as in new session Number_Theory
9668 - some constants and facts now suffixed with _nat and _int
9670 - former session NumberTheory now named Old_Number_Theory, including
9671 theories Legacy_GCD and Primes (prefer Number_Theory if possible)
9672 - moved theory Pocklington from src/HOL/Library to
9673 src/HOL/Old_Number_Theory
9675 * Theory GCD includes functions Gcd/GCD and Lcm/LCM for the gcd and
9676 lcm of finite and infinite sets. It is shown that they form a complete
9679 * Class semiring_div requires superclass no_zero_divisors and proof of
9680 div_mult_mult1; theorems div_mult_mult1, div_mult_mult2,
9681 div_mult_mult1_if, div_mult_mult1 and div_mult_mult2 have been
9682 generalized to class semiring_div, subsuming former theorems
9683 zdiv_zmult_zmult1, zdiv_zmult_zmult1_if, zdiv_zmult_zmult1 and
9684 zdiv_zmult_zmult2. div_mult_mult1 is now [simp] by default.
9687 * Refinements to lattice classes and sets:
9688 - less default intro/elim rules in locale variant, more default
9689 intro/elim rules in class variant: more uniformity
9690 - lemma ge_sup_conv renamed to le_sup_iff, in accordance with
9692 - dropped lemma alias inf_ACI for inf_aci (same for sup_ACI and
9694 - renamed ACI to inf_sup_aci
9695 - new class "boolean_algebra"
9696 - class "complete_lattice" moved to separate theory
9697 "Complete_Lattice"; corresponding constants (and abbreviations)
9698 renamed and with authentic syntax:
9699 Set.Inf ~> Complete_Lattice.Inf
9700 Set.Sup ~> Complete_Lattice.Sup
9701 Set.INFI ~> Complete_Lattice.INFI
9702 Set.SUPR ~> Complete_Lattice.SUPR
9703 Set.Inter ~> Complete_Lattice.Inter
9704 Set.Union ~> Complete_Lattice.Union
9705 Set.INTER ~> Complete_Lattice.INTER
9706 Set.UNION ~> Complete_Lattice.UNION
9707 - authentic syntax for
9710 - mere abbreviations:
9713 Set.inter (for inf, formerly Set.Int)
9714 Set.union (for sup, formerly Set.Un)
9715 Complete_Lattice.Inter (for Inf)
9716 Complete_Lattice.Union (for Sup)
9717 Complete_Lattice.INTER (for INFI)
9718 Complete_Lattice.UNION (for SUPR)
9719 - object-logic definitions as far as appropriate
9721 INCOMPATIBILITY. Care is required when theorems Int_subset_iff or
9722 Un_subset_iff are explicitly deleted as default simp rules; then also
9723 their lattice counterparts le_inf_iff and le_sup_iff have to be
9724 deleted to achieve the desired effect.
9726 * Rules inf_absorb1, inf_absorb2, sup_absorb1, sup_absorb2 are no simp
9727 rules by default any longer; the same applies to min_max.inf_absorb1
9728 etc. INCOMPATIBILITY.
9730 * Rules sup_Int_eq and sup_Un_eq are no longer declared as
9731 pred_set_conv by default. INCOMPATIBILITY.
9733 * Power operations on relations and functions are now one dedicated
9734 constant "compow" with infix syntax "^^". Power operation on
9735 multiplicative monoids retains syntax "^" and is now defined generic
9736 in class power. INCOMPATIBILITY.
9738 * Relation composition "R O S" now has a more standard argument order:
9739 "R O S = {(x, z). EX y. (x, y) : R & (y, z) : S}". INCOMPATIBILITY,
9740 rewrite propositions with "S O R" --> "R O S". Proofs may occasionally
9741 break, since the O_assoc rule was not rewritten like this. Fix using
9742 O_assoc[symmetric]. The same applies to the curried version "R OO S".
9744 * Function "Inv" is renamed to "inv_into" and function "inv" is now an
9745 abbreviation for "inv_into UNIV". Lemmas are renamed accordingly.
9748 * Most rules produced by inductive and datatype package have mandatory
9749 prefixes. INCOMPATIBILITY.
9751 * Changed "DERIV_intros" to a dynamic fact, which can be augmented by
9752 the attribute of the same name. Each of the theorems in the list
9753 DERIV_intros assumes composition with an additional function and
9754 matches a variable to the derivative, which has to be solved by the
9755 Simplifier. Hence (auto intro!: DERIV_intros) computes the derivative
9756 of most elementary terms. Former Maclauren.DERIV_tac and
9757 Maclauren.deriv_tac should be replaced by (auto intro!: DERIV_intros).
9760 * Code generator attributes follow the usual underscore convention:
9761 code_unfold replaces code unfold
9762 code_post replaces code post
9767 sizechange -> size_change
9768 induct_scheme -> induction_schema
9771 * Discontinued abbreviation "arbitrary" of constant "undefined".
9772 INCOMPATIBILITY, use "undefined" directly.
9775 Suc_eq_add_numeral_1 -> Suc_eq_plus1
9776 Suc_eq_add_numeral_1_left -> Suc_eq_plus1_left
9777 Suc_plus1 -> Suc_eq_plus1
9778 *anti_sym -> *antisym*
9779 vector_less_eq_def -> vector_le_def
9782 * Added theorem List.map_map as [simp]. Removed List.map_compose.
9785 * Removed predicate "M hassize n" (<--> card M = n & finite M).
9791 * Theory Representable defines a class "rep" of domains that are
9792 representable (via an ep-pair) in the universal domain type "udom".
9793 Instances are provided for all type constructors defined in HOLCF.
9795 * The 'new_domain' command is a purely definitional version of the
9796 domain package, for representable domains. Syntax is identical to the
9797 old domain package. The 'new_domain' package also supports indirect
9798 recursion using previously-defined type constructors. See
9799 src/HOLCF/ex/New_Domain.thy for examples.
9801 * Method "fixrec_simp" unfolds one step of a fixrec-defined constant
9802 on the left-hand side of an equation, and then performs
9803 simplification. Rewriting is done using rules declared with the
9804 "fixrec_simp" attribute. The "fixrec_simp" method is intended as a
9805 replacement for "fixpat"; see src/HOLCF/ex/Fixrec_ex.thy for examples.
9807 * The pattern-match compiler in 'fixrec' can now handle constructors
9808 with HOL function types. Pattern-match combinators for the Pair
9809 constructor are pre-configured.
9811 * The 'fixrec' package now produces better fixed-point induction rules
9812 for mutually-recursive definitions: Induction rules have conclusions
9813 of the form "P foo bar" instead of "P <foo, bar>".
9815 * The constant "sq_le" (with infix syntax "<<" or "\<sqsubseteq>") has
9816 been renamed to "below". The name "below" now replaces "less" in many
9817 theorem names. (Legacy theorem names using "less" are still supported
9820 * The 'fixrec' package now supports "bottom patterns". Bottom
9821 patterns can be used to generate strictness rules, or to make
9822 functions more strict (much like the bang-patterns supported by the
9823 Glasgow Haskell Compiler). See src/HOLCF/ex/Fixrec_ex.thy for
9829 * Support for Poly/ML 5.3.0, with improved reporting of compiler
9830 errors and run-time exceptions, including detailed source positions.
9832 * Structure Name_Space (formerly NameSpace) now manages uniquely
9833 identified entries, with some additional information such as source
9834 position, logical grouping etc.
9836 * Theory and context data is now introduced by the simplified and
9837 modernized functors Theory_Data, Proof_Data, Generic_Data. Data needs
9838 to be pure, but the old TheoryDataFun for mutable data (with explicit
9839 copy operation) is still available for some time.
9841 * Structure Synchronized (cf. src/Pure/Concurrent/synchronized.ML)
9842 provides a high-level programming interface to synchronized state
9843 variables with atomic update. This works via pure function
9844 application within a critical section -- its runtime should be as
9845 short as possible; beware of deadlocks if critical code is nested,
9846 either directly or indirectly via other synchronized variables!
9848 * Structure Unsynchronized (cf. src/Pure/ML-Systems/unsynchronized.ML)
9849 wraps raw ML references, explicitly indicating their non-thread-safe
9850 behaviour. The Isar toplevel keeps this structure open, to
9851 accommodate Proof General as well as quick and dirty interactive
9852 experiments with references.
9854 * PARALLEL_CHOICE and PARALLEL_GOALS provide basic support for
9855 parallel tactical reasoning.
9857 * Tacticals Subgoal.FOCUS, Subgoal.FOCUS_PREMS, Subgoal.FOCUS_PARAMS
9858 are similar to SUBPROOF, but are slightly more flexible: only the
9859 specified parts of the subgoal are imported into the context, and the
9860 body tactic may introduce new subgoals and schematic variables.
9862 * Old tactical METAHYPS, which does not observe the proof context, has
9863 been renamed to Old_Goals.METAHYPS and awaits deletion. Use SUBPROOF
9864 or Subgoal.FOCUS etc.
9866 * Renamed functor TableFun to Table, and GraphFun to Graph. (Since
9867 functors have their own ML name space there is no point to mark them
9868 separately.) Minor INCOMPATIBILITY.
9870 * Renamed NamedThmsFun to Named_Thms. INCOMPATIBILITY.
9872 * Renamed several structures FooBar to Foo_Bar. Occasional,
9875 * Operations of structure Skip_Proof no longer require quick_and_dirty
9876 mode, which avoids critical setmp.
9878 * Eliminated old Attrib.add_attributes, Method.add_methods and related
9879 combinators for "args". INCOMPATIBILITY, need to use simplified
9880 Attrib/Method.setup introduced in Isabelle2009.
9882 * Proper context for simpset_of, claset_of, clasimpset_of. May fall
9883 back on global_simpset_of, global_claset_of, global_clasimpset_of as
9884 last resort. INCOMPATIBILITY.
9886 * Display.pretty_thm now requires a proper context (cf. former
9887 ProofContext.pretty_thm). May fall back on Display.pretty_thm_global
9888 or even Display.pretty_thm_without_context as last resort.
9891 * Discontinued Display.pretty_ctyp/cterm etc. INCOMPATIBILITY, use
9892 Syntax.pretty_typ/term directly, preferably with proper context
9893 instead of global theory.
9898 * Further fine tuning of parallel proof checking, scales up to 8 cores
9899 (max. speedup factor 5.0). See also Goal.parallel_proofs in ML and
9902 * Support for additional "Isabelle components" via etc/components, see
9903 also the system manual.
9905 * The isabelle makeall tool now operates on all components with
9906 IsaMakefile, not just hardwired "logics".
9908 * Removed "compress" option from isabelle-process and isabelle usedir;
9909 this is always enabled.
9911 * Discontinued support for Poly/ML 4.x versions.
9913 * Isabelle tool "wwwfind" provides web interface for 'find_theorems'
9914 on a given logic image. This requires the lighttpd webserver and is
9915 currently supported on Linux only.
9919 New in Isabelle2009 (April 2009)
9920 --------------------------------
9924 * Simplified main Isabelle executables, with less surprises on
9925 case-insensitive file-systems (such as Mac OS).
9927 - The main Isabelle tool wrapper is now called "isabelle" instead of
9930 - The former "isabelle" alias for "isabelle-process" has been
9931 removed (should rarely occur to regular users).
9933 - The former "isabelle-interface" and its alias "Isabelle" have been
9934 removed (interfaces are now regular Isabelle tools).
9936 Within scripts and make files, the Isabelle environment variables
9937 ISABELLE_TOOL and ISABELLE_PROCESS replace old ISATOOL and ISABELLE,
9938 respectively. (The latter are still available as legacy feature.)
9940 The old isabelle-interface wrapper could react in confusing ways if
9941 the interface was uninstalled or changed otherwise. Individual
9942 interface tool configuration is now more explicit, see also the
9943 Isabelle system manual. In particular, Proof General is now available
9944 via "isabelle emacs".
9946 INCOMPATIBILITY, need to adapt derivative scripts. Users may need to
9947 purge installed copies of Isabelle executables and re-run "isabelle
9948 install -p ...", or use symlinks.
9950 * The default for ISABELLE_HOME_USER is now ~/.isabelle instead of the
9951 old ~/isabelle, which was slightly non-standard and apt to cause
9952 surprises on case-insensitive file-systems (such as Mac OS).
9954 INCOMPATIBILITY, need to move existing ~/isabelle/etc,
9955 ~/isabelle/heaps, ~/isabelle/browser_info to the new place. Special
9956 care is required when using older releases of Isabelle. Note that
9957 ISABELLE_HOME_USER can be changed in Isabelle/etc/settings of any
9958 Isabelle distribution, in order to use the new ~/.isabelle uniformly.
9960 * Proofs of fully specified statements are run in parallel on
9961 multi-core systems. A speedup factor of 2.5 to 3.2 can be expected on
9962 a regular 4-core machine, if the initial heap space is made reasonably
9963 large (cf. Poly/ML option -H). (Requires Poly/ML 5.2.1 or later.)
9965 * The main reference manuals ("isar-ref", "implementation", and
9966 "system") have been updated and extended. Formally checked references
9967 as hyperlinks are now available uniformly.
9972 * Complete re-implementation of locales. INCOMPATIBILITY in several
9973 respects. The most important changes are listed below. See the
9974 Tutorial on Locales ("locales" manual) for details.
9976 - In locale expressions, instantiation replaces renaming. Parameters
9977 must be declared in a for clause. To aid compatibility with previous
9978 parameter inheritance, in locale declarations, parameters that are not
9979 'touched' (instantiation position "_" or omitted) are implicitly added
9980 with their syntax at the beginning of the for clause.
9982 - Syntax from abbreviations and definitions in locales is available in
9983 locale expressions and context elements. The latter is particularly
9984 useful in locale declarations.
9986 - More flexible mechanisms to qualify names generated by locale
9987 expressions. Qualifiers (prefixes) may be specified in locale
9988 expressions, and can be marked as mandatory (syntax: "name!:") or
9989 optional (syntax "name?:"). The default depends for plain "name:"
9990 depends on the situation where a locale expression is used: in
9991 commands 'locale' and 'sublocale' prefixes are optional, in
9992 'interpretation' and 'interpret' prefixes are mandatory. The old
9993 implicit qualifiers derived from the parameter names of a locale are
9994 no longer generated.
9996 - Command "sublocale l < e" replaces "interpretation l < e". The
9997 instantiation clause in "interpretation" and "interpret" (square
9998 brackets) is no longer available. Use locale expressions.
10000 - When converting proof scripts, mandatory qualifiers in
10001 'interpretation' and 'interpret' should be retained by default, even
10002 if this is an INCOMPATIBILITY compared to former behavior. In the
10003 worst case, use the "name?:" form for non-mandatory ones. Qualifiers
10004 in locale expressions range over a single locale instance only.
10006 - Dropped locale element "includes". This is a major INCOMPATIBILITY.
10007 In existing theorem specifications replace the includes element by the
10008 respective context elements of the included locale, omitting those
10009 that are already present in the theorem specification. Multiple
10010 assume elements of a locale should be replaced by a single one
10011 involving the locale predicate. In the proof body, declarations (most
10012 notably theorems) may be regained by interpreting the respective
10013 locales in the proof context as required (command "interpret").
10015 If using "includes" in replacement of a target solely because the
10016 parameter types in the theorem are not as general as in the target,
10017 consider declaring a new locale with additional type constraints on
10018 the parameters (context element "constrains").
10020 - Discontinued "locale (open)". INCOMPATIBILITY.
10022 - Locale interpretation commands no longer attempt to simplify goal.
10023 INCOMPATIBILITY: in rare situations the generated goal differs. Use
10024 methods intro_locales and unfold_locales to clarify.
10026 - Locale interpretation commands no longer accept interpretation
10027 attributes. INCOMPATIBILITY.
10029 * Class declaration: so-called "base sort" must not be given in import
10030 list any longer, but is inferred from the specification. Particularly
10037 class foo = type + ...
10039 * Class target: global versions of theorems stemming do not carry a
10040 parameter prefix any longer. INCOMPATIBILITY.
10042 * Class 'instance' command no longer accepts attached definitions.
10043 INCOMPATIBILITY, use proper 'instantiation' target instead.
10045 * Recovered hiding of consts, which was accidentally broken in
10046 Isabelle2007. Potential INCOMPATIBILITY, ``hide const c'' really
10047 makes c inaccessible; consider using ``hide (open) const c'' instead.
10049 * Slightly more coherent Pure syntax, with updated documentation in
10050 isar-ref manual. Removed locales meta_term_syntax and
10051 meta_conjunction_syntax: TERM and &&& (formerly &&) are now permanent,
10052 INCOMPATIBILITY in rare situations. Note that &&& should not be used
10053 directly in regular applications.
10055 * There is a new syntactic category "float_const" for signed decimal
10056 fractions (e.g. 123.45 or -123.45).
10058 * Removed exotic 'token_translation' command. INCOMPATIBILITY, use ML
10059 interface with 'setup' command instead.
10061 * Command 'local_setup' is similar to 'setup', but operates on a local
10064 * The 'axiomatization' command now only works within a global theory
10065 context. INCOMPATIBILITY.
10067 * Goal-directed proof now enforces strict proof irrelevance wrt. sort
10068 hypotheses. Sorts required in the course of reasoning need to be
10069 covered by the constraints in the initial statement, completed by the
10070 type instance information of the background theory. Non-trivial sort
10071 hypotheses, which rarely occur in practice, may be specified via
10072 vacuous propositions of the form SORT_CONSTRAINT('a::c). For example:
10074 lemma assumes "SORT_CONSTRAINT('a::empty)" shows False ...
10076 The result contains an implicit sort hypotheses as before --
10077 SORT_CONSTRAINT premises are eliminated as part of the canonical rule
10080 * Generalized Isar history, with support for linear undo, direct state
10083 * Changed defaults for unify configuration options:
10085 unify_trace_bound = 50 (formerly 25)
10086 unify_search_bound = 60 (formerly 30)
10088 * Different bookkeeping for code equations (INCOMPATIBILITY):
10090 a) On theory merge, the last set of code equations for a particular
10091 constant is taken (in accordance with the policy applied by other
10092 parts of the code generator framework).
10094 b) Code equations stemming from explicit declarations (e.g. code
10095 attribute) gain priority over default code equations stemming
10096 from definition, primrec, fun etc.
10098 * Keyword 'code_exception' now named 'code_abort'. INCOMPATIBILITY.
10100 * Unified theorem tables for both code generators. Thus [code
10101 func] has disappeared and only [code] remains. INCOMPATIBILITY.
10103 * Command 'find_consts' searches for constants based on type and name
10106 find_consts "_ => bool"
10108 By default, matching is against subtypes, but it may be restricted to
10109 the whole type. Searching by name is possible. Multiple queries are
10110 conjunctive and queries may be negated by prefixing them with a
10113 find_consts strict: "_ => bool" name: "Int" -"int => int"
10115 * New 'find_theorems' criterion "solves" matches theorems that
10116 directly solve the current goal (modulo higher-order unification).
10118 * Auto solve feature for main theorem statements: whenever a new goal
10119 is stated, "find_theorems solves" is called; any theorems that could
10120 solve the lemma directly are listed as part of the goal state.
10121 Cf. associated options in Proof General Isabelle settings menu,
10122 enabled by default, with reasonable timeout for pathological cases of
10123 higher-order unification.
10126 *** Document preparation ***
10128 * Antiquotation @{lemma} now imitates a regular terminal proof,
10129 demanding keyword 'by' and supporting the full method expression
10130 syntax just like the Isar command 'by'.
10135 * Integrated main parts of former image HOL-Complex with HOL. Entry
10136 points Main and Complex_Main remain as before.
10138 * Logic image HOL-Plain provides a minimal HOL with the most important
10139 tools available (inductive, datatype, primrec, ...). This facilitates
10140 experimentation and tool development. Note that user applications
10141 (and library theories) should never refer to anything below theory
10144 * Logic image HOL-Main stops at theory Main, and thus facilitates
10145 experimentation due to shorter build times.
10147 * Logic image HOL-NSA contains theories of nonstandard analysis which
10148 were previously part of former HOL-Complex. Entry point Hyperreal
10149 remains valid, but theories formerly using Complex_Main should now use
10150 new entry point Hypercomplex.
10152 * Generic ATP manager for Sledgehammer, based on ML threads instead of
10153 Posix processes. Avoids potentially expensive forking of the ML
10154 process. New thread-based implementation also works on non-Unix
10155 platforms (Cygwin). Provers are no longer hardwired, but defined
10156 within the theory via plain ML wrapper functions. Basic Sledgehammer
10157 commands are covered in the isar-ref manual.
10159 * Wrapper scripts for remote SystemOnTPTP service allows to use
10160 sledgehammer without local ATP installation (Vampire etc.). Other
10161 provers may be included via suitable ML wrappers, see also
10162 src/HOL/ATP_Linkup.thy.
10164 * ATP selection (E/Vampire/Spass) is now via Proof General's settings
10167 * The metis method no longer fails because the theorem is too trivial
10168 (contains the empty clause).
10170 * The metis method now fails in the usual manner, rather than raising
10171 an exception, if it determines that it cannot prove the theorem.
10173 * Method "coherent" implements a prover for coherent logic (see also
10174 src/Tools/coherent.ML).
10176 * Constants "undefined" and "default" replace "arbitrary". Usually
10177 "undefined" is the right choice to replace "arbitrary", though
10178 logically there is no difference. INCOMPATIBILITY.
10180 * Command "value" now integrates different evaluation mechanisms. The
10181 result of the first successful evaluation mechanism is printed. In
10182 square brackets a particular named evaluation mechanisms may be
10183 specified (currently, [SML], [code] or [nbe]). See further
10184 src/HOL/ex/Eval_Examples.thy.
10186 * Normalization by evaluation now allows non-leftlinear equations.
10187 Declare with attribute [code nbe].
10189 * Methods "case_tac" and "induct_tac" now refer to the very same rules
10190 as the structured Isar versions "cases" and "induct", cf. the
10191 corresponding "cases" and "induct" attributes. Mutual induction rules
10192 are now presented as a list of individual projections
10193 (e.g. foo_bar.inducts for types foo and bar); the old format with
10194 explicit HOL conjunction is no longer supported. INCOMPATIBILITY, in
10195 rare situations a different rule is selected --- notably nested tuple
10196 elimination instead of former prod.exhaust: use explicit (case_tac t
10197 rule: prod.exhaust) here.
10199 * Attributes "cases", "induct", "coinduct" support "del" option.
10201 * Removed fact "case_split_thm", which duplicates "case_split".
10203 * The option datatype has been moved to a new theory Option. Renamed
10204 option_map to Option.map, and o2s to Option.set, INCOMPATIBILITY.
10206 * New predicate "strict_mono" classifies strict functions on partial
10207 orders. With strict functions on linear orders, reasoning about
10208 (in)equalities is facilitated by theorems "strict_mono_eq",
10209 "strict_mono_less_eq" and "strict_mono_less".
10211 * Some set operations are now proper qualified constants with
10212 authentic syntax. INCOMPATIBILITY:
10223 * Class complete_lattice with operations Inf, Sup, INFI, SUPR now in
10226 * Auxiliary class "itself" has disappeared -- classes without any
10227 parameter are treated as expected by the 'class' command.
10229 * Leibnitz's Series for Pi and the arcus tangens and logarithm series.
10231 * Common decision procedures (Cooper, MIR, Ferrack, Approximation,
10232 Dense_Linear_Order) are now in directory HOL/Decision_Procs.
10234 * Theory src/HOL/Decision_Procs/Approximation provides the new proof
10235 method "approximation". It proves formulas on real values by using
10236 interval arithmetic. In the formulas are also the transcendental
10237 functions sin, cos, tan, atan, ln, exp and the constant pi are
10238 allowed. For examples see
10239 src/HOL/Descision_Procs/ex/Approximation_Ex.thy.
10241 * Theory "Reflection" now resides in HOL/Library.
10243 * Entry point to Word library now simply named "Word".
10246 * Made source layout more coherent with logical distribution
10249 src/HOL/Library/RType.thy ~> src/HOL/Typerep.thy
10250 src/HOL/Library/Code_Message.thy ~> src/HOL/
10251 src/HOL/Library/GCD.thy ~> src/HOL/
10252 src/HOL/Library/Order_Relation.thy ~> src/HOL/
10253 src/HOL/Library/Parity.thy ~> src/HOL/
10254 src/HOL/Library/Univ_Poly.thy ~> src/HOL/
10255 src/HOL/Real/ContNotDenum.thy ~> src/HOL/Library/
10256 src/HOL/Real/Lubs.thy ~> src/HOL/
10257 src/HOL/Real/PReal.thy ~> src/HOL/
10258 src/HOL/Real/Rational.thy ~> src/HOL/
10259 src/HOL/Real/RComplete.thy ~> src/HOL/
10260 src/HOL/Real/RealDef.thy ~> src/HOL/
10261 src/HOL/Real/RealPow.thy ~> src/HOL/
10262 src/HOL/Real/Real.thy ~> src/HOL/
10263 src/HOL/Complex/Complex_Main.thy ~> src/HOL/
10264 src/HOL/Complex/Complex.thy ~> src/HOL/
10265 src/HOL/Complex/FrechetDeriv.thy ~> src/HOL/Library/
10266 src/HOL/Complex/Fundamental_Theorem_Algebra.thy ~> src/HOL/Library/
10267 src/HOL/Hyperreal/Deriv.thy ~> src/HOL/
10268 src/HOL/Hyperreal/Fact.thy ~> src/HOL/
10269 src/HOL/Hyperreal/Integration.thy ~> src/HOL/
10270 src/HOL/Hyperreal/Lim.thy ~> src/HOL/
10271 src/HOL/Hyperreal/Ln.thy ~> src/HOL/
10272 src/HOL/Hyperreal/Log.thy ~> src/HOL/
10273 src/HOL/Hyperreal/MacLaurin.thy ~> src/HOL/
10274 src/HOL/Hyperreal/NthRoot.thy ~> src/HOL/
10275 src/HOL/Hyperreal/Series.thy ~> src/HOL/
10276 src/HOL/Hyperreal/SEQ.thy ~> src/HOL/
10277 src/HOL/Hyperreal/Taylor.thy ~> src/HOL/
10278 src/HOL/Hyperreal/Transcendental.thy ~> src/HOL/
10279 src/HOL/Real/Float ~> src/HOL/Library/
10280 src/HOL/Real/HahnBanach ~> src/HOL/HahnBanach
10281 src/HOL/Real/RealVector.thy ~> src/HOL/
10283 src/HOL/arith_data.ML ~> src/HOL/Tools
10284 src/HOL/hologic.ML ~> src/HOL/Tools
10285 src/HOL/simpdata.ML ~> src/HOL/Tools
10286 src/HOL/int_arith1.ML ~> src/HOL/Tools/int_arith.ML
10287 src/HOL/int_factor_simprocs.ML ~> src/HOL/Tools
10288 src/HOL/nat_simprocs.ML ~> src/HOL/Tools
10289 src/HOL/Real/float_arith.ML ~> src/HOL/Tools
10290 src/HOL/Real/float_syntax.ML ~> src/HOL/Tools
10291 src/HOL/Real/rat_arith.ML ~> src/HOL/Tools
10292 src/HOL/Real/real_arith.ML ~> src/HOL/Tools
10294 src/HOL/Library/Array.thy ~> src/HOL/Imperative_HOL
10295 src/HOL/Library/Heap_Monad.thy ~> src/HOL/Imperative_HOL
10296 src/HOL/Library/Heap.thy ~> src/HOL/Imperative_HOL
10297 src/HOL/Library/Imperative_HOL.thy ~> src/HOL/Imperative_HOL
10298 src/HOL/Library/Ref.thy ~> src/HOL/Imperative_HOL
10299 src/HOL/Library/Relational.thy ~> src/HOL/Imperative_HOL
10301 * If methods "eval" and "evaluation" encounter a structured proof
10302 state with !!/==>, only the conclusion is evaluated to True (if
10303 possible), avoiding strange error messages.
10305 * Method "sizechange" automates termination proofs using (a
10306 modification of) the size-change principle. Requires SAT solver. See
10307 src/HOL/ex/Termination.thy for examples.
10309 * Simplifier: simproc for let expressions now unfolds if bound
10310 variable occurs at most once in let expression body. INCOMPATIBILITY.
10312 * Method "arith": Linear arithmetic now ignores all inequalities when
10313 fast_arith_neq_limit is exceeded, instead of giving up entirely.
10315 * New attribute "arith" for facts that should always be used
10316 automatically by arithmetic. It is intended to be used locally in
10319 assumes [arith]: "x > 0"
10321 Global usage is discouraged because of possible performance impact.
10323 * New classes "top" and "bot" with corresponding operations "top" and
10324 "bot" in theory Orderings; instantiation of class "complete_lattice"
10325 requires instantiation of classes "top" and "bot". INCOMPATIBILITY.
10327 * Changed definition lemma "less_fun_def" in order to provide an
10328 instance for preorders on functions; use lemma "less_le" instead.
10331 * Theory Orderings: class "wellorder" moved here, with explicit
10332 induction rule "less_induct" as assumption. For instantiation of
10333 "wellorder" by means of predicate "wf", use rule wf_wellorderI.
10336 * Theory Orderings: added class "preorder" as superclass of "order".
10337 INCOMPATIBILITY: Instantiation proofs for order, linorder
10338 etc. slightly changed. Some theorems named order_class.* now named
10341 * Theory Relation: renamed "refl" to "refl_on", "reflexive" to "refl,
10344 * Theory Finite_Set: added a new fold combinator of type
10346 ('a => 'b => 'b) => 'b => 'a set => 'b
10348 Occasionally this is more convenient than the old fold combinator
10349 which is now defined in terms of the new one and renamed to
10352 * Theories Ring_and_Field and OrderedGroup: The lemmas "group_simps"
10353 and "ring_simps" have been replaced by "algebra_simps" (which can be
10354 extended with further lemmas!). At the moment both still exist but
10355 the former will disappear at some point.
10357 * Theory Power: Lemma power_Suc is now declared as a simp rule in
10358 class recpower. Type-specific simp rules for various recpower types
10359 have been removed. INCOMPATIBILITY, rename old lemmas as follows:
10361 rat_power_0 -> power_0
10362 rat_power_Suc -> power_Suc
10363 realpow_0 -> power_0
10364 realpow_Suc -> power_Suc
10365 complexpow_0 -> power_0
10366 complexpow_Suc -> power_Suc
10367 power_poly_0 -> power_0
10368 power_poly_Suc -> power_Suc
10370 * Theories Ring_and_Field and Divides: Definition of "op dvd" has been
10371 moved to separate class dvd in Ring_and_Field; a couple of lemmas on
10372 dvd has been generalized to class comm_semiring_1. Likewise a bunch
10373 of lemmas from Divides has been generalized from nat to class
10374 semiring_div. INCOMPATIBILITY. This involves the following theorem
10375 renames resulting from duplicate elimination:
10377 dvd_def_mod ~> dvd_eq_mod_eq_0
10378 zero_dvd_iff ~> dvd_0_left_iff
10379 dvd_0 ~> dvd_0_right
10380 DIVISION_BY_ZERO_DIV ~> div_by_0
10381 DIVISION_BY_ZERO_MOD ~> mod_by_0
10382 mult_div ~> div_mult_self2_is_id
10383 mult_mod ~> mod_mult_self2_is_0
10385 * Theory IntDiv: removed many lemmas that are instances of class-based
10386 generalizations (from Divides and Ring_and_Field). INCOMPATIBILITY,
10387 rename old lemmas as follows:
10389 dvd_diff -> nat_dvd_diff
10390 dvd_zminus_iff -> dvd_minus_iff
10391 mod_add1_eq -> mod_add_eq
10392 mod_mult1_eq -> mod_mult_right_eq
10393 mod_mult1_eq' -> mod_mult_left_eq
10394 mod_mult_distrib_mod -> mod_mult_eq
10395 nat_mod_add_left_eq -> mod_add_left_eq
10396 nat_mod_add_right_eq -> mod_add_right_eq
10397 nat_mod_div_trivial -> mod_div_trivial
10398 nat_mod_mod_trivial -> mod_mod_trivial
10399 zdiv_zadd_self1 -> div_add_self1
10400 zdiv_zadd_self2 -> div_add_self2
10401 zdiv_zmult_self1 -> div_mult_self2_is_id
10402 zdiv_zmult_self2 -> div_mult_self1_is_id
10403 zdvd_triv_left -> dvd_triv_left
10404 zdvd_triv_right -> dvd_triv_right
10405 zdvd_zmult_cancel_disj -> dvd_mult_cancel_left
10406 zmod_eq0_zdvd_iff -> dvd_eq_mod_eq_0[symmetric]
10407 zmod_zadd_left_eq -> mod_add_left_eq
10408 zmod_zadd_right_eq -> mod_add_right_eq
10409 zmod_zadd_self1 -> mod_add_self1
10410 zmod_zadd_self2 -> mod_add_self2
10411 zmod_zadd1_eq -> mod_add_eq
10412 zmod_zdiff1_eq -> mod_diff_eq
10413 zmod_zdvd_zmod -> mod_mod_cancel
10414 zmod_zmod_cancel -> mod_mod_cancel
10415 zmod_zmult_self1 -> mod_mult_self2_is_0
10416 zmod_zmult_self2 -> mod_mult_self1_is_0
10419 zdvd_abs1 -> abs_dvd_iff
10420 zdvd_abs2 -> dvd_abs_iff
10421 zdvd_refl -> dvd_refl
10422 zdvd_trans -> dvd_trans
10423 zdvd_zadd -> dvd_add
10424 zdvd_zdiff -> dvd_diff
10425 zdvd_zminus_iff -> dvd_minus_iff
10426 zdvd_zminus2_iff -> minus_dvd_iff
10427 zdvd_zmultD -> dvd_mult_right
10428 zdvd_zmultD2 -> dvd_mult_left
10429 zdvd_zmult_mono -> mult_dvd_mono
10430 zdvd_0_right -> dvd_0_right
10431 zdvd_0_left -> dvd_0_left_iff
10432 zdvd_1_left -> one_dvd
10433 zminus_dvd_iff -> minus_dvd_iff
10435 * Theory Rational: 'Fract k 0' now equals '0'. INCOMPATIBILITY.
10437 * The real numbers offer decimal input syntax: 12.34 is translated
10438 into 1234/10^2. This translation is not reversed upon output.
10440 * Theory Library/Polynomial defines an abstract type 'a poly of
10441 univariate polynomials with coefficients of type 'a. In addition to
10442 the standard ring operations, it also supports div and mod. Code
10443 generation is also supported, using list-style constructors.
10445 * Theory Library/Inner_Product defines a class of real_inner for real
10446 inner product spaces, with an overloaded operation inner :: 'a => 'a
10447 => real. Class real_inner is a subclass of real_normed_vector from
10450 * Theory Library/Product_Vector provides instances for the product
10451 type 'a * 'b of several classes from RealVector and Inner_Product.
10452 Definitions of addition, subtraction, scalar multiplication, norms,
10453 and inner products are included.
10455 * Theory Library/Bit defines the field "bit" of integers modulo 2. In
10456 addition to the field operations, numerals and case syntax are also
10459 * Theory Library/Diagonalize provides constructive version of Cantor's
10460 first diagonalization argument.
10462 * Theory Library/GCD: Curried operations gcd, lcm (for nat) and zgcd,
10463 zlcm (for int); carried together from various gcd/lcm developements in
10464 the HOL Distribution. Constants zgcd and zlcm replace former igcd and
10465 ilcm; corresponding theorems renamed accordingly. INCOMPATIBILITY,
10466 may recover tupled syntax as follows:
10468 hide (open) const gcd
10469 abbreviation gcd where
10470 "gcd == (%(a, b). GCD.gcd a b)"
10472 GCD.gcd ("gcd '(_, _')")
10474 The same works for lcm, zgcd, zlcm.
10476 * Theory Library/Nat_Infinity: added addition, numeral syntax and more
10477 instantiations for algebraic structures. Removed some duplicate
10478 theorems. Changes in simp rules. INCOMPATIBILITY.
10480 * ML antiquotation @{code} takes a constant as argument and generates
10481 corresponding code in background and inserts name of the corresponding
10482 resulting ML value/function/datatype constructor binding in place.
10483 All occurrences of @{code} with a single ML block are generated
10484 simultaneously. Provides a generic and safe interface for
10485 instrumentalizing code generation. See
10486 src/HOL/Decision_Procs/Ferrack.thy for a more ambitious application.
10487 In future you ought to refrain from ad-hoc compiling generated SML
10488 code on the ML toplevel. Note that (for technical reasons) @{code}
10489 cannot refer to constants for which user-defined serializations are
10490 set. Refer to the corresponding ML counterpart directly in that
10493 * Command 'rep_datatype': instead of theorem names the command now
10494 takes a list of terms denoting the constructors of the type to be
10495 represented as datatype. The characteristic theorems have to be
10496 proven. INCOMPATIBILITY. Also observe that the following theorems
10497 have disappeared in favour of existing ones:
10499 unit_induct ~> unit.induct
10500 prod_induct ~> prod.induct
10501 sum_induct ~> sum.induct
10502 Suc_Suc_eq ~> nat.inject
10503 Suc_not_Zero Zero_not_Suc ~> nat.distinct
10506 *** HOL-Algebra ***
10508 * New locales for orders and lattices where the equivalence relation
10509 is not restricted to equality. INCOMPATIBILITY: all order and lattice
10510 locales use a record structure with field eq for the equivalence.
10512 * New theory of factorial domains.
10514 * Units_l_inv and Units_r_inv are now simp rules by default.
10515 INCOMPATIBILITY. Simplifier proof that require deletion of l_inv
10516 and/or r_inv will now also require deletion of these lemmas.
10518 * Renamed the following theorems, INCOMPATIBILITY:
10520 UpperD ~> Upper_memD
10521 LowerD ~> Lower_memD
10522 least_carrier ~> least_closed
10523 greatest_carrier ~> greatest_closed
10524 greatest_Lower_above ~> greatest_Lower_below
10525 one_zero ~> carrier_one_zero
10526 one_not_zero ~> carrier_one_not_zero (collision with assumption)
10529 *** HOL-Nominal ***
10531 * Nominal datatypes can now contain type-variables.
10533 * Commands 'nominal_inductive' and 'equivariance' work with local
10536 * Nominal primrec can now works with local theory targets and its
10537 specification syntax now conforms to the general format as seen in
10540 * Method "perm_simp" honours the standard simplifier attributes
10541 (no_asm), (no_asm_use) etc.
10543 * The new predicate #* is defined like freshness, except that on the
10544 left hand side can be a set or list of atoms.
10546 * Experimental command 'nominal_inductive2' derives strong induction
10547 principles for inductive definitions. In contrast to
10548 'nominal_inductive', which can only deal with a fixed number of
10549 binders, it can deal with arbitrary expressions standing for sets of
10550 atoms to be avoided. The only inductive definition we have at the
10551 moment that needs this generalisation is the typing rule for Lets in
10554 Gamma |- t1 : T1 (x,close Gamma T1)::Gamma |- t2 : T2 x#Gamma
10555 -----------------------------------------------------------------
10556 Gamma |- Let x be t1 in t2 : T2
10558 In this rule one wants to avoid all the binders that are introduced by
10559 "close Gamma T1". We are looking for other examples where this
10560 feature might be useful. Please let us know.
10565 * Reimplemented the simplification procedure for proving continuity
10566 subgoals. The new simproc is extensible; users can declare additional
10567 continuity introduction rules with the attribute [cont2cont].
10569 * The continuity simproc now uses a different introduction rule for
10570 solving continuity subgoals on terms with lambda abstractions. In
10571 some rare cases the new simproc may fail to solve subgoals that the
10572 old one could solve, and "simp add: cont2cont_LAM" may be necessary.
10573 Potential INCOMPATIBILITY.
10575 * Command 'fixrec': specification syntax now conforms to the general
10576 format as seen in 'inductive' etc. See src/HOLCF/ex/Fixrec_ex.thy for
10577 examples. INCOMPATIBILITY.
10582 * Proof of Zorn's Lemma for partial orders.
10587 * Multithreading for Poly/ML 5.1/5.2 is no longer supported, only for
10588 Poly/ML 5.2.1 or later. Important note: the TimeLimit facility
10589 depends on multithreading, so timouts will not work before Poly/ML
10592 * High-level support for concurrent ML programming, see
10593 src/Pure/Cuncurrent. The data-oriented model of "future values" is
10594 particularly convenient to organize independent functional
10595 computations. The concept of "synchronized variables" provides a
10596 higher-order interface for components with shared state, avoiding the
10597 delicate details of mutexes and condition variables. (Requires
10598 Poly/ML 5.2.1 or later.)
10600 * ML bindings produced via Isar commands are stored within the Isar
10601 context (theory or proof). Consequently, commands like 'use' and 'ML'
10602 become thread-safe and work with undo as expected (concerning
10603 top-level bindings, not side-effects on global references).
10604 INCOMPATIBILITY, need to provide proper Isar context when invoking the
10605 compiler at runtime; really global bindings need to be given outside a
10606 theory. (Requires Poly/ML 5.2 or later.)
10608 * Command 'ML_prf' is analogous to 'ML' but works within a proof
10609 context. Top-level ML bindings are stored within the proof context in
10610 a purely sequential fashion, disregarding the nested proof structure.
10611 ML bindings introduced by 'ML_prf' are discarded at the end of the
10612 proof. (Requires Poly/ML 5.2 or later.)
10614 * Simplified ML attribute and method setup, cf. functions Attrib.setup
10615 and Method.setup, as well as Isar commands 'attribute_setup' and
10616 'method_setup'. INCOMPATIBILITY for 'method_setup', need to simplify
10617 existing code accordingly, or use plain 'setup' together with old
10620 * Simplified ML oracle interface Thm.add_oracle promotes 'a -> cterm
10621 to 'a -> thm, while results are always tagged with an authentic oracle
10622 name. The Isar command 'oracle' is now polymorphic, no argument type
10623 is specified. INCOMPATIBILITY, need to simplify existing oracle code
10624 accordingly. Note that extra performance may be gained by producing
10625 the cterm carefully, avoiding slow Thm.cterm_of.
10627 * Simplified interface for defining document antiquotations via
10628 ThyOutput.antiquotation, ThyOutput.output, and optionally
10629 ThyOutput.maybe_pretty_source. INCOMPATIBILITY, need to simplify user
10630 antiquotations accordingly, see src/Pure/Thy/thy_output.ML for common
10633 * More systematic treatment of long names, abstract name bindings, and
10634 name space operations. Basic operations on qualified names have been
10635 move from structure NameSpace to Long_Name, e.g. Long_Name.base_name,
10636 Long_Name.append. Old type bstring has been mostly replaced by
10637 abstract type binding (see structure Binding), which supports precise
10638 qualification by packages and local theory targets, as well as proper
10639 tracking of source positions. INCOMPATIBILITY, need to wrap old
10640 bstring values into Binding.name, or better pass through abstract
10641 bindings everywhere. See further src/Pure/General/long_name.ML,
10642 src/Pure/General/binding.ML and src/Pure/General/name_space.ML
10644 * Result facts (from PureThy.note_thms, ProofContext.note_thms,
10645 LocalTheory.note etc.) now refer to the *full* internal name, not the
10646 bstring as before. INCOMPATIBILITY, not detected by ML type-checking!
10648 * Disposed old type and term read functions (Sign.read_def_typ,
10649 Sign.read_typ, Sign.read_def_terms, Sign.read_term,
10650 Thm.read_def_cterms, Thm.read_cterm etc.). INCOMPATIBILITY, should
10651 use regular Syntax.read_typ, Syntax.read_term, Syntax.read_typ_global,
10652 Syntax.read_term_global etc.; see also OldGoals.read_term as last
10653 resort for legacy applications.
10655 * Disposed old declarations, tactics, tactic combinators that refer to
10656 the simpset or claset of an implicit theory (such as Addsimps,
10657 Simp_tac, SIMPSET). INCOMPATIBILITY, should use @{simpset} etc. in
10658 embedded ML text, or local_simpset_of with a proper context passed as
10659 explicit runtime argument.
10661 * Rules and tactics that read instantiations (read_instantiate,
10662 res_inst_tac, thin_tac, subgoal_tac etc.) now demand a proper proof
10663 context, which is required for parsing and type-checking. Moreover,
10664 the variables are specified as plain indexnames, not string encodings
10665 thereof. INCOMPATIBILITY.
10667 * Generic Toplevel.add_hook interface allows to analyze the result of
10668 transactions. E.g. see src/Pure/ProofGeneral/proof_general_pgip.ML
10669 for theorem dependency output of transactions resulting in a new
10672 * ML antiquotations: block-structured compilation context indicated by
10673 \<lbrace> ... \<rbrace>; additional antiquotation forms:
10675 @{binding name} - basic name binding
10676 @{let ?pat = term} - term abbreviation (HO matching)
10677 @{note name = fact} - fact abbreviation
10678 @{thm fact} - singleton fact (with attributes)
10679 @{thms fact} - general fact (with attributes)
10680 @{lemma prop by method} - singleton goal
10681 @{lemma prop by meth1 meth2} - singleton goal
10682 @{lemma prop1 ... propN by method} - general goal
10683 @{lemma prop1 ... propN by meth1 meth2} - general goal
10684 @{lemma (open) ...} - open derivation
10689 * The Isabelle "emacs" tool provides a specific interface to invoke
10690 Proof General / Emacs, with more explicit failure if that is not
10691 installed (the old isabelle-interface script silently falls back on
10692 isabelle-process). The PROOFGENERAL_HOME setting determines the
10693 installation location of the Proof General distribution.
10695 * Isabelle/lib/classes/Pure.jar provides basic support to integrate
10696 the Isabelle process into a JVM/Scala application. See
10697 Isabelle/lib/jedit/plugin for a minimal example. (The obsolete Java
10698 process wrapper has been discontinued.)
10700 * Added homegrown Isabelle font with unicode layout, see lib/fonts.
10702 * Various status messages (with exact source position information) are
10703 emitted, if proper markup print mode is enabled. This allows
10704 user-interface components to provide detailed feedback on internal
10709 New in Isabelle2008 (June 2008)
10710 -------------------------------
10714 * The Isabelle/Isar Reference Manual (isar-ref) has been reorganized
10715 and updated, with formally checked references as hyperlinks.
10717 * Theory loader: use_thy (and similar operations) no longer set the
10718 implicit ML context, which was occasionally hard to predict and in
10719 conflict with concurrency. INCOMPATIBILITY, use ML within Isar which
10720 provides a proper context already.
10722 * Theory loader: old-style ML proof scripts being *attached* to a thy
10723 file are no longer supported. INCOMPATIBILITY, regular 'uses' and
10724 'use' within a theory file will do the job.
10726 * Name space merge now observes canonical order, i.e. the second space
10727 is inserted into the first one, while existing entries in the first
10728 space take precedence. INCOMPATIBILITY in rare situations, may try to
10729 swap theory imports.
10731 * Syntax: symbol \<chi> is now considered a letter. Potential
10732 INCOMPATIBILITY in identifier syntax etc.
10734 * Outer syntax: string tokens no longer admit escaped white space,
10735 which was an accidental (undocumented) feature. INCOMPATIBILITY, use
10736 white space without escapes.
10738 * Outer syntax: string tokens may contain arbitrary character codes
10739 specified via 3 decimal digits (as in SML). E.g. "foo\095bar" for
10745 * Context-dependent token translations. Default setup reverts locally
10746 fixed variables, and adds hilite markup for undeclared frees.
10748 * Unused theorems can be found using the new command 'unused_thms'.
10749 There are three ways of invoking it:
10752 Only finds unused theorems in the current theory.
10754 (2) unused_thms thy_1 ... thy_n -
10755 Finds unused theorems in the current theory and all of its ancestors,
10756 excluding the theories thy_1 ... thy_n and all of their ancestors.
10758 (3) unused_thms thy_1 ... thy_n - thy'_1 ... thy'_m
10759 Finds unused theorems in the theories thy'_1 ... thy'_m and all of
10760 their ancestors, excluding the theories thy_1 ... thy_n and all of
10763 In order to increase the readability of the list produced by
10764 unused_thms, theorems that have been created by a particular instance
10765 of a theory command such as 'inductive' or 'function' are considered
10766 to belong to the same "group", meaning that if at least one theorem in
10767 this group is used, the other theorems in the same group are no longer
10768 reported as unused. Moreover, if all theorems in the group are
10769 unused, only one theorem in the group is displayed.
10771 Note that proof objects have to be switched on in order for
10772 unused_thms to work properly (i.e. !proofs must be >= 1, which is
10773 usually the case when using Proof General with the default settings).
10775 * Authentic naming of facts disallows ad-hoc overwriting of previous
10776 theorems within the same name space. INCOMPATIBILITY, need to remove
10777 duplicate fact bindings, or even accidental fact duplications. Note
10778 that tools may maintain dynamically scoped facts systematically, using
10779 PureThy.add_thms_dynamic.
10781 * Command 'hide' now allows to hide from "fact" name space as well.
10783 * Eliminated destructive theorem database, simpset, claset, and
10784 clasimpset. Potential INCOMPATIBILITY, really need to observe linear
10785 update of theories within ML code.
10787 * Eliminated theory ProtoPure and CPure, leaving just one Pure theory.
10788 INCOMPATIBILITY, object-logics depending on former Pure require
10789 additional setup PureThy.old_appl_syntax_setup; object-logics
10790 depending on former CPure need to refer to Pure.
10792 * Commands 'use' and 'ML' are now purely functional, operating on
10793 theory/local_theory. Removed former 'ML_setup' (on theory), use 'ML'
10794 instead. Added 'ML_val' as mere diagnostic replacement for 'ML'.
10797 * Command 'setup': discontinued implicit version with ML reference.
10799 * Instantiation target allows for simultaneous specification of class
10800 instance operations together with an instantiation proof.
10801 Type-checking phase allows to refer to class operations uniformly.
10802 See src/HOL/Complex/Complex.thy for an Isar example and
10803 src/HOL/Library/Eval.thy for an ML example.
10805 * Indexing of literal facts: be more serious about including only
10806 facts from the visible specification/proof context, but not the
10807 background context (locale etc.). Affects `prop` notation and method
10808 "fact". INCOMPATIBILITY: need to name facts explicitly in rare
10811 * Method "cases", "induct", "coinduct": removed obsolete/undocumented
10812 "(open)" option, which used to expose internal bound variables to the
10815 * Isar statements: removed obsolete case "rule_context".
10816 INCOMPATIBILITY, better use explicit fixes/assumes.
10818 * Locale proofs: default proof step now includes 'unfold_locales';
10819 hence 'proof' without argument may be used to unfold locale
10823 *** Document preparation ***
10825 * Simplified pdfsetup.sty: color/hyperref is used unconditionally for
10826 both pdf and dvi (hyperlinks usually work in xdvi as well); removed
10827 obsolete thumbpdf setup (contemporary PDF viewers do this on the
10828 spot); renamed link color from "darkblue" to "linkcolor" (default
10829 value unchanged, can be redefined via \definecolor); no longer sets
10830 "a4paper" option (unnecessary or even intrusive).
10832 * Antiquotation @{lemma A method} proves proposition A by the given
10833 method (either a method name or a method name plus (optional) method
10834 arguments in parentheses) and prints A just like @{prop A}.
10839 * New primrec package. Specification syntax conforms in style to
10840 definition/function/.... No separate induction rule is provided. The
10841 "primrec" command distinguishes old-style and new-style specifications
10842 by syntax. The former primrec package is now named OldPrimrecPackage.
10843 When adjusting theories, beware: constants stemming from new-style
10844 primrec specifications have authentic syntax.
10846 * Metis prover is now an order of magnitude faster, and also works
10847 with multithreading.
10849 * Metis: the maximum number of clauses that can be produced from a
10850 theorem is now given by the attribute max_clauses. Theorems that
10851 exceed this number are ignored, with a warning printed.
10853 * Sledgehammer no longer produces structured proofs by default. To
10854 enable, declare [[sledgehammer_full = true]]. Attributes
10855 reconstruction_modulus, reconstruction_sorts renamed
10856 sledgehammer_modulus, sledgehammer_sorts. INCOMPATIBILITY.
10858 * Method "induct_scheme" derives user-specified induction rules
10859 from well-founded induction and completeness of patterns. This factors
10860 out some operations that are done internally by the function package
10861 and makes them available separately. See
10862 src/HOL/ex/Induction_Scheme.thy for examples.
10864 * More flexible generation of measure functions for termination
10865 proofs: Measure functions can be declared by proving a rule of the
10866 form "is_measure f" and giving it the [measure_function] attribute.
10867 The "is_measure" predicate is logically meaningless (always true), and
10868 just guides the heuristic. To find suitable measure functions, the
10869 termination prover sets up the goal "is_measure ?f" of the appropriate
10870 type and generates all solutions by Prolog-style backward proof using
10871 the declared rules.
10873 This setup also deals with rules like
10875 "is_measure f ==> is_measure (list_size f)"
10877 which accommodates nested datatypes that recurse through lists.
10878 Similar rules are predeclared for products and option types.
10880 * Turned the type of sets "'a set" into an abbreviation for "'a => bool"
10884 - Definitions of overloaded constants on sets have to be replaced by
10885 definitions on => and bool.
10887 - Some definitions of overloaded operators on sets can now be proved
10888 using the definitions of the operators on => and bool. Therefore,
10889 the following theorems have been renamed:
10891 subset_def -> subset_eq
10892 psubset_def -> psubset_eq
10893 set_diff_def -> set_diff_eq
10894 Compl_def -> Compl_eq
10895 Sup_set_def -> Sup_set_eq
10896 Inf_set_def -> Inf_set_eq
10897 sup_set_def -> sup_set_eq
10898 inf_set_def -> inf_set_eq
10900 - Due to the incompleteness of the HO unification algorithm, some
10901 rules such as subst may require manual instantiation, if some of
10902 the unknowns in the rule is a set.
10904 - Higher order unification and forward proofs:
10907 have "P (S::'a set)" <...>
10908 then have "EX S. P S" ..
10910 no longer works (due to the incompleteness of the HO unification
10911 algorithm) and must be replaced by the pattern
10918 - Calculational reasoning with subst (or similar rules):
10921 have "P (S::'a set)" <...>
10922 also have "S = T" <...>
10923 finally have "P T" .
10925 no longer works (for similar reasons as the previous example) and
10926 must be replaced by something like
10928 have "P (S::'a set)" <...>
10929 moreover have "S = T" <...>
10930 ultimately have "P T" by simp
10932 - Tactics or packages written in ML code:
10933 Code performing pattern matching on types via
10935 Type ("set", [T]) => ...
10937 must be rewritten. Moreover, functions like strip_type or
10938 binder_types no longer return the right value when applied to a
10941 T1 => ... => Tn => U => bool
10945 T1 => ... => Tn => U set
10947 * Merged theories Wellfounded_Recursion, Accessible_Part and
10948 Wellfounded_Relations to theory Wellfounded.
10950 * Explicit class "eq" for executable equality. INCOMPATIBILITY.
10952 * Class finite no longer treats UNIV as class parameter. Use class
10953 enum from theory Library/Enum instead to achieve a similar effect.
10956 * Theory List: rule list_induct2 now has explicitly named cases "Nil"
10957 and "Cons". INCOMPATIBILITY.
10959 * HOL (and FOL): renamed variables in rules imp_elim and swap.
10960 Potential INCOMPATIBILITY.
10962 * Theory Product_Type: duplicated lemmas split_Pair_apply and
10963 injective_fst_snd removed, use split_eta and prod_eqI instead.
10964 Renamed upd_fst to apfst and upd_snd to apsnd. INCOMPATIBILITY.
10966 * Theory Nat: removed redundant lemmas that merely duplicate lemmas of
10967 the same name in theory Orderings:
10977 Renamed less_imp_le to less_imp_le_nat, and less_irrefl to
10978 less_irrefl_nat. Potential INCOMPATIBILITY due to more general types
10979 and different variable names.
10981 * Library/Option_ord.thy: Canonical order on option type.
10983 * Library/RBT.thy: Red-black trees, an efficient implementation of
10986 * Library/Countable.thy: Type class for countable types.
10988 * Theory Int: The representation of numerals has changed. The infix
10989 operator BIT and the bit datatype with constructors B0 and B1 have
10990 disappeared. INCOMPATIBILITY, use "Int.Bit0 x" and "Int.Bit1 y" in
10991 place of "x BIT bit.B0" and "y BIT bit.B1", respectively. Theorems
10992 involving BIT, B0, or B1 have been renamed with "Bit0" or "Bit1"
10995 * Theory Nat: definition of <= and < on natural numbers no longer
10996 depend on well-founded relations. INCOMPATIBILITY. Definitions
10997 le_def and less_def have disappeared. Consider lemmas not_less
10998 [symmetric, where ?'a = nat] and less_eq [symmetric] instead.
11000 * Theory Finite_Set: locales ACf, ACe, ACIf, ACIfSL and ACIfSLlin
11001 (whose purpose mainly is for various fold_set functionals) have been
11002 abandoned in favor of the existing algebraic classes
11003 ab_semigroup_mult, comm_monoid_mult, ab_semigroup_idem_mult,
11004 lower_semilattice (resp. upper_semilattice) and linorder.
11007 * Theory Transitive_Closure: induct and cases rules now declare proper
11008 case_names ("base" and "step"). INCOMPATIBILITY.
11010 * Theorem Inductive.lfp_ordinal_induct generalized to complete
11011 lattices. The form set-specific version is available as
11012 Inductive.lfp_ordinal_induct_set.
11014 * Renamed theorems "power.simps" to "power_int.simps".
11017 * Class semiring_div provides basic abstract properties of semirings
11018 with division and modulo operations. Subsumes former class dvd_mod.
11020 * Merged theories IntDef, Numeral and IntArith into unified theory
11021 Int. INCOMPATIBILITY.
11023 * Theory Library/Code_Index: type "index" now represents natural
11024 numbers rather than integers. INCOMPATIBILITY.
11026 * New class "uminus" with operation "uminus" (split of from class
11027 "minus" which now only has operation "minus", binary).
11030 * Constants "card", "internal_split", "option_map" now with authentic
11031 syntax. INCOMPATIBILITY.
11033 * Definitions subset_def, psubset_def, set_diff_def, Compl_def,
11034 le_bool_def, less_bool_def, le_fun_def, less_fun_def, inf_bool_def,
11035 sup_bool_def, Inf_bool_def, Sup_bool_def, inf_fun_def, sup_fun_def,
11036 Inf_fun_def, Sup_fun_def, inf_set_def, sup_set_def, Inf_set_def,
11037 Sup_set_def, le_def, less_def, option_map_def now with object
11038 equality. INCOMPATIBILITY.
11040 * Records. Removed K_record, and replaced it by pure lambda term
11041 %x. c. The simplifier setup is now more robust against eta expansion.
11042 INCOMPATIBILITY: in cases explicitly referring to K_record.
11044 * Library/Multiset: {#a, b, c#} abbreviates {#a#} + {#b#} + {#c#}.
11046 * Library/ListVector: new theory of arithmetic vector operations.
11048 * Library/Order_Relation: new theory of various orderings as sets of
11049 pairs. Defines preorders, partial orders, linear orders and
11050 well-orders on sets and on types.
11055 * Renamed some theories to allow to loading both ZF and HOL in the
11058 Datatype -> Datatype_ZF
11059 Inductive -> Inductive_ZF
11061 IntDiv -> IntDiv_ZF
11066 INCOMPATIBILITY: ZF theories that import individual theories below
11067 Main might need to be adapted. Regular theory Main is still
11068 available, as trivial extension of Main_ZF.
11073 * ML within Isar: antiquotation @{const name} or @{const
11074 name(typargs)} produces statically-checked Const term.
11076 * Functor NamedThmsFun: data is available to the user as dynamic fact
11077 (of the same name). Removed obsolete print command.
11079 * Removed obsolete "use_legacy_bindings" function.
11081 * The ``print mode'' is now a thread-local value derived from a global
11082 template (the former print_mode reference), thus access becomes
11083 non-critical. The global print_mode reference is for session
11084 management only; user-code should use print_mode_value,
11085 print_mode_active, PrintMode.setmp etc. INCOMPATIBILITY.
11087 * Functions system/system_out provide a robust way to invoke external
11088 shell commands, with propagation of interrupts (requires Poly/ML
11089 5.2.1). Do not use OS.Process.system etc. from the basis library!
11094 * Default settings: PROOFGENERAL_OPTIONS no longer impose xemacs ---
11095 in accordance with Proof General 3.7, which prefers GNU emacs.
11097 * isatool tty runs Isabelle process with plain tty interaction;
11098 optional line editor may be specified via ISABELLE_LINE_EDITOR
11099 setting, the default settings attempt to locate "ledit" and "rlwrap".
11101 * isatool browser now works with Cygwin as well, using general
11102 "javapath" function defined in Isabelle process environment.
11104 * YXML notation provides a simple and efficient alternative to
11105 standard XML transfer syntax. See src/Pure/General/yxml.ML and
11106 isatool yxml as described in the Isabelle system manual.
11108 * JVM class isabelle.IsabelleProcess (located in Isabelle/lib/classes)
11109 provides general wrapper for managing an Isabelle process in a robust
11110 fashion, with ``cooked'' output from stdin/stderr.
11112 * Rudimentary Isabelle plugin for jEdit (see Isabelle/lib/jedit),
11113 based on Isabelle/JVM process wrapper (see Isabelle/lib/classes).
11115 * Removed obsolete THIS_IS_ISABELLE_BUILD feature. NB: the documented
11116 way of changing the user's settings is via
11117 ISABELLE_HOME_USER/etc/settings, which is a fully featured bash
11120 * Multithreading.max_threads := 0 refers to the number of actual CPU
11121 cores of the underlying machine, which is a good starting point for
11122 optimal performance tuning. The corresponding usedir option -M allows
11123 "max" as an alias for "0". WARNING: does not work on certain versions
11124 of Mac OS (with Poly/ML 5.1).
11126 * isabelle-process: non-ML sessions are run with "nice", to reduce the
11127 adverse effect of Isabelle flooding interactive front-ends (notably
11128 ProofGeneral / XEmacs).
11132 New in Isabelle2007 (November 2007)
11133 -----------------------------------
11137 * More uniform information about legacy features, notably a
11138 warning/error of "Legacy feature: ...", depending on the state of the
11139 tolerate_legacy_features flag (default true). FUTURE INCOMPATIBILITY:
11140 legacy features will disappear eventually.
11142 * Theory syntax: the header format ``theory A = B + C:'' has been
11143 discontinued in favour of ``theory A imports B C begin''. Use isatool
11144 fixheaders to convert existing theory files. INCOMPATIBILITY.
11146 * Theory syntax: the old non-Isar theory file format has been
11147 discontinued altogether. Note that ML proof scripts may still be used
11148 with Isar theories; migration is usually quite simple with the ML
11149 function use_legacy_bindings. INCOMPATIBILITY.
11151 * Theory syntax: some popular names (e.g. 'class', 'declaration',
11152 'fun', 'help', 'if') are now keywords. INCOMPATIBILITY, use double
11155 * Theory loader: be more serious about observing the static theory
11156 header specifications (including optional directories), but not the
11157 accidental file locations of previously successful loads. The strict
11158 update policy of former update_thy is now already performed by
11159 use_thy, so the former has been removed; use_thys updates several
11160 theories simultaneously, just as 'imports' within a theory header
11161 specification, but without merging the results. Potential
11162 INCOMPATIBILITY: may need to refine theory headers and commands
11163 ROOT.ML which depend on load order.
11165 * Theory loader: optional support for content-based file
11166 identification, instead of the traditional scheme of full physical
11167 path plus date stamp; configured by the ISABELLE_FILE_IDENT setting
11168 (cf. the system manual). The new scheme allows to work with
11169 non-finished theories in persistent session images, such that source
11170 files may be moved later on without requiring reloads.
11172 * Theory loader: old-style ML proof scripts being *attached* to a thy
11173 file (with the same base name as the theory) are considered a legacy
11174 feature, which will disappear eventually. Even now, the theory loader
11175 no longer maintains dependencies on such files.
11177 * Syntax: the scope for resolving ambiguities via type-inference is
11178 now limited to individual terms, instead of whole simultaneous
11179 specifications as before. This greatly reduces the complexity of the
11180 syntax module and improves flexibility by separating parsing and
11181 type-checking. INCOMPATIBILITY: additional type-constraints (explicit
11182 'fixes' etc.) are required in rare situations.
11184 * Syntax: constants introduced by new-style packages ('definition',
11185 'abbreviation' etc.) are passed through the syntax module in
11186 ``authentic mode''. This means that associated mixfix annotations
11187 really stick to such constants, independently of potential name space
11188 ambiguities introduced later on. INCOMPATIBILITY: constants in parse
11189 trees are represented slightly differently, may need to adapt syntax
11190 translations accordingly. Use CONST marker in 'translations' and
11191 @{const_syntax} antiquotation in 'parse_translation' etc.
11193 * Legacy goal package: reduced interface to the bare minimum required
11194 to keep existing proof scripts running. Most other user-level
11195 functions are now part of the OldGoals structure, which is *not* open
11196 by default (consider isatool expandshort before open OldGoals).
11197 Removed top_sg, prin, printyp, pprint_term/typ altogether, because
11198 these tend to cause confusion about the actual goal (!) context being
11199 used here, which is not necessarily the same as the_context().
11201 * Command 'find_theorems': supports "*" wild-card in "name:"
11202 criterion; "with_dups" option. Certain ProofGeneral versions might
11203 support a specific search form (see ProofGeneral/CHANGES).
11205 * The ``prems limit'' option (cf. ProofContext.prems_limit) is now -1
11206 by default, which means that "prems" (and also "fixed variables") are
11207 suppressed from proof state output. Note that the ProofGeneral
11208 settings mechanism allows to change and save options persistently, but
11209 older versions of Isabelle will fail to start up if a negative prems
11212 * Local theory targets may be specified by non-nested blocks of
11213 ``context/locale/class ... begin'' followed by ``end''. The body may
11214 contain definitions, theorems etc., including any derived mechanism
11215 that has been implemented on top of these primitives. This concept
11216 generalizes the existing ``theorem (in ...)'' towards more versatility
11219 * Proof General interface: proper undo of final 'end' command;
11220 discontinued Isabelle/classic mode (ML proof scripts).
11223 *** Document preparation ***
11225 * Added antiquotation @{theory name} which prints the given name,
11226 after checking that it refers to a valid ancestor theory in the
11229 * Added antiquotations @{ML_type text} and @{ML_struct text} which
11230 check the given source text as ML type/structure, printing verbatim.
11232 * Added antiquotation @{abbrev "c args"} which prints the abbreviation
11233 "c args == rhs" given in the current context. (Any number of
11234 arguments may be given on the LHS.)
11239 * The 'class' package offers a combination of axclass and locale to
11240 achieve Haskell-like type classes in Isabelle. Definitions and
11241 theorems within a class context produce both relative results (with
11242 implicit parameters according to the locale context), and polymorphic
11243 constants with qualified polymorphism (according to the class
11244 context). Within the body context of a 'class' target, a separate
11245 syntax layer ("user space type system") takes care of converting
11246 between global polymorphic consts and internal locale representation.
11247 See src/HOL/ex/Classpackage.thy for examples (as well as main HOL).
11248 "isatool doc classes" provides a tutorial.
11250 * Generic code generator framework allows to generate executable
11251 code for ML and Haskell (including Isabelle classes). A short usage
11254 internal compilation:
11255 export_code <list of constants (term syntax)> in SML
11256 writing SML code to a file:
11257 export_code <list of constants (term syntax)> in SML <filename>
11258 writing OCaml code to a file:
11259 export_code <list of constants (term syntax)> in OCaml <filename>
11260 writing Haskell code to a bunch of files:
11261 export_code <list of constants (term syntax)> in Haskell <filename>
11263 evaluating closed propositions to True/False using code generation:
11266 Reasonable default setup of framework in HOL.
11268 Theorem attributs for selecting and transforming function equations theorems:
11270 [code fun]: select a theorem as function equation for a specific constant
11271 [code fun del]: deselect a theorem as function equation for a specific constant
11272 [code inline]: select an equation theorem for unfolding (inlining) in place
11273 [code inline del]: deselect an equation theorem for unfolding (inlining) in place
11275 User-defined serializations (target in {SML, OCaml, Haskell}):
11277 code_const <and-list of constants (term syntax)>
11278 {(target) <and-list of const target syntax>}+
11280 code_type <and-list of type constructors>
11281 {(target) <and-list of type target syntax>}+
11283 code_instance <and-list of instances>
11285 where instance ::= <type constructor> :: <class>
11287 code_class <and_list of classes>
11288 {(target) <and-list of class target syntax>}+
11289 where class target syntax ::= <class name> {where {<classop> == <target syntax>}+}?
11291 code_instance and code_class only are effective to target Haskell.
11293 For example usage see src/HOL/ex/Codegenerator.thy and
11294 src/HOL/ex/Codegenerator_Pretty.thy. A separate tutorial on code
11295 generation from Isabelle/HOL theories is available via "isatool doc
11298 * Code generator: consts in 'consts_code' Isar commands are now
11299 referred to by usual term syntax (including optional type
11302 * Command 'no_translations' removes translation rules from theory
11305 * Overloaded definitions are now actually checked for acyclic
11306 dependencies. The overloading scheme is slightly more general than
11307 that of Haskell98, although Isabelle does not demand an exact
11308 correspondence to type class and instance declarations.
11309 INCOMPATIBILITY, use ``defs (unchecked overloaded)'' to admit more
11310 exotic versions of overloading -- at the discretion of the user!
11312 Polymorphic constants are represented via type arguments, i.e. the
11313 instantiation that matches an instance against the most general
11314 declaration given in the signature. For example, with the declaration
11315 c :: 'a => 'a => 'a, an instance c :: nat => nat => nat is represented
11316 as c(nat). Overloading is essentially simultaneous structural
11317 recursion over such type arguments. Incomplete specification patterns
11318 impose global constraints on all occurrences, e.g. c('a * 'a) on the
11319 LHS means that more general c('a * 'b) will be disallowed on any RHS.
11320 Command 'print_theory' outputs the normalized system of recursive
11321 equations, see section "definitions".
11323 * Configuration options are maintained within the theory or proof
11324 context (with name and type bool/int/string), providing a very simple
11325 interface to a poor-man's version of general context data. Tools may
11326 declare options in ML (e.g. using Attrib.config_int) and then refer to
11327 these values using Config.get etc. Users may change options via an
11328 associated attribute of the same name. This form of context
11329 declaration works particularly well with commands 'declare' or
11330 'using', for example ``declare [[foo = 42]]''. Thus it has become
11331 very easy to avoid global references, which would not observe Isar
11332 toplevel undo/redo and fail to work with multithreading.
11334 Various global ML references of Pure and HOL have been turned into
11335 configuration options:
11337 Unify.search_bound unify_search_bound
11338 Unify.trace_bound unify_trace_bound
11339 Unify.trace_simp unify_trace_simp
11340 Unify.trace_types unify_trace_types
11341 Simplifier.simp_depth_limit simp_depth_limit
11342 Blast.depth_limit blast_depth_limit
11343 DatatypeProp.dtK datatype_distinctness_limit
11344 fast_arith_neq_limit fast_arith_neq_limit
11345 fast_arith_split_limit fast_arith_split_limit
11347 * Named collections of theorems may be easily installed as context
11348 data using the functor NamedThmsFun (see also
11349 src/Pure/Tools/named_thms.ML). The user may add or delete facts via
11350 attributes; there is also a toplevel print command. This facility is
11351 just a common case of general context data, which is the preferred way
11352 for anything more complex than just a list of facts in canonical
11355 * Isar: command 'declaration' augments a local theory by generic
11356 declaration functions written in ML. This enables arbitrary content
11357 being added to the context, depending on a morphism that tells the
11358 difference of the original declaration context wrt. the application
11359 context encountered later on.
11361 * Isar: proper interfaces for simplification procedures. Command
11362 'simproc_setup' declares named simprocs (with match patterns, and body
11363 text in ML). Attribute "simproc" adds/deletes simprocs in the current
11364 context. ML antiquotation @{simproc name} retrieves named simprocs.
11366 * Isar: an extra pair of brackets around attribute declarations
11367 abbreviates a theorem reference involving an internal dummy fact,
11368 which will be ignored later --- only the effect of the attribute on
11369 the background context will persist. This form of in-place
11370 declarations is particularly useful with commands like 'declare' and
11371 'using', for example ``have A using [[simproc a]] by simp''.
11373 * Isar: method "assumption" (and implicit closing of subproofs) now
11374 takes simple non-atomic goal assumptions into account: after applying
11375 an assumption as a rule the resulting subgoals are solved by atomic
11376 assumption steps. This is particularly useful to finish 'obtain'
11377 goals, such as "!!x. (!!x. P x ==> thesis) ==> P x ==> thesis",
11378 without referring to the original premise "!!x. P x ==> thesis" in the
11379 Isar proof context. POTENTIAL INCOMPATIBILITY: method "assumption" is
11382 * Isar: implicit use of prems from the Isar proof context is
11383 considered a legacy feature. Common applications like ``have A .''
11384 may be replaced by ``have A by fact'' or ``note `A`''. In general,
11385 referencing facts explicitly here improves readability and
11386 maintainability of proof texts.
11388 * Isar: improper proof element 'guess' is like 'obtain', but derives
11389 the obtained context from the course of reasoning! For example:
11391 assume "EX x y. A x & B y" -- "any previous fact"
11392 then guess x and y by clarify
11394 This technique is potentially adventurous, depending on the facts and
11395 proof tools being involved here.
11397 * Isar: known facts from the proof context may be specified as literal
11398 propositions, using ASCII back-quote syntax. This works wherever
11399 named facts used to be allowed so far, in proof commands, proof
11400 methods, attributes etc. Literal facts are retrieved from the context
11401 according to unification of type and term parameters. For example,
11402 provided that "A" and "A ==> B" and "!!x. P x ==> Q x" are known
11403 theorems in the current context, then these are valid literal facts:
11404 `A` and `A ==> B` and `!!x. P x ==> Q x" as well as `P a ==> Q a` etc.
11406 There is also a proof method "fact" which does the same composition
11407 for explicit goal states, e.g. the following proof texts coincide with
11408 certain special cases of literal facts:
11410 have "A" by fact == note `A`
11411 have "A ==> B" by fact == note `A ==> B`
11412 have "!!x. P x ==> Q x" by fact == note `!!x. P x ==> Q x`
11413 have "P a ==> Q a" by fact == note `P a ==> Q a`
11415 * Isar: ":" (colon) is no longer a symbolic identifier character in
11416 outer syntax. Thus symbolic identifiers may be used without
11417 additional white space in declarations like this: ``assume *: A''.
11419 * Isar: 'print_facts' prints all local facts of the current context,
11420 both named and unnamed ones.
11422 * Isar: 'def' now admits simultaneous definitions, e.g.:
11424 def x == "t" and y == "u"
11426 * Isar: added command 'unfolding', which is structurally similar to
11427 'using', but affects both the goal state and facts by unfolding given
11428 rewrite rules. Thus many occurrences of the 'unfold' method or
11429 'unfolded' attribute may be replaced by first-class proof text.
11431 * Isar: methods 'unfold' / 'fold', attributes 'unfolded' / 'folded',
11432 and command 'unfolding' now all support object-level equalities
11433 (potentially conditional). The underlying notion of rewrite rule is
11434 analogous to the 'rule_format' attribute, but *not* that of the
11435 Simplifier (which is usually more generous).
11437 * Isar: the new attribute [rotated n] (default n = 1) rotates the
11438 premises of a theorem by n. Useful in conjunction with drule.
11440 * Isar: the goal restriction operator [N] (default N = 1) evaluates a
11441 method expression within a sandbox consisting of the first N
11442 sub-goals, which need to exist. For example, ``simp_all [3]''
11443 simplifies the first three sub-goals, while (rule foo, simp_all)[]
11444 simplifies all new goals that emerge from applying rule foo to the
11445 originally first one.
11447 * Isar: schematic goals are no longer restricted to higher-order
11448 patterns; e.g. ``lemma "?P(?x)" by (rule TrueI)'' now works as
11451 * Isar: the conclusion of a long theorem statement is now either
11452 'shows' (a simultaneous conjunction, as before), or 'obtains'
11453 (essentially a disjunction of cases with local parameters and
11454 assumptions). The latter allows to express general elimination rules
11455 adequately; in this notation common elimination rules look like this:
11457 lemma exE: -- "EX x. P x ==> (!!x. P x ==> thesis) ==> thesis"
11458 assumes "EX x. P x"
11459 obtains x where "P x"
11461 lemma conjE: -- "A & B ==> (A ==> B ==> thesis) ==> thesis"
11465 lemma disjE: -- "A | B ==> (A ==> thesis) ==> (B ==> thesis) ==> thesis"
11471 The subsequent classical rules even refer to the formal "thesis"
11474 lemma classical: -- "(~ thesis ==> thesis) ==> thesis"
11477 lemma Peirce's_Law: -- "((thesis ==> something) ==> thesis) ==> thesis"
11478 obtains "thesis ==> something"
11480 The actual proof of an 'obtains' statement is analogous to that of the
11481 Isar proof element 'obtain', only that there may be several cases.
11482 Optional case names may be specified in parentheses; these will be
11483 available both in the present proof and as annotations in the
11484 resulting rule, for later use with the 'cases' method (cf. attribute
11487 * Isar: the assumptions of a long theorem statement are available as
11488 "assms" fact in the proof context. This is more appropriate than the
11489 (historical) "prems", which refers to all assumptions of the current
11490 context, including those from the target locale, proof body etc.
11492 * Isar: 'print_statement' prints theorems from the current theory or
11493 proof context in long statement form, according to the syntax of a
11496 * Isar: 'obtain' takes an optional case name for the local context
11497 introduction rule (default "that").
11499 * Isar: removed obsolete 'concl is' patterns. INCOMPATIBILITY, use
11500 explicit (is "_ ==> ?foo") in the rare cases where this still happens
11503 * Pure: syntax "CONST name" produces a fully internalized constant
11504 according to the current context. This is particularly useful for
11505 syntax translations that should refer to internal constant
11506 representations independently of name spaces.
11508 * Pure: syntax constant for foo (binder "FOO ") is called "foo_binder"
11509 instead of "FOO ". This allows multiple binder declarations to coexist
11510 in the same context. INCOMPATIBILITY.
11512 * Isar/locales: 'notation' provides a robust interface to the 'syntax'
11513 primitive that also works in a locale context (both for constants and
11514 fixed variables). Type declaration and internal syntactic representation
11515 of given constants retrieved from the context. Likewise, the
11516 'no_notation' command allows to remove given syntax annotations from the
11519 * Isar/locales: new derived specification elements 'axiomatization',
11520 'definition', 'abbreviation', which support type-inference, admit
11521 object-level specifications (equality, equivalence). See also the
11522 isar-ref manual. Examples:
11525 eq (infix "===" 50) where
11526 eq_refl: "x === x" and eq_subst: "x === y ==> P x ==> P y"
11528 definition "f x y = x + y + 1"
11529 definition g where "g x = f x x"
11532 neq (infix "=!=" 50) where
11533 "x =!= y == ~ (x === y)"
11535 These specifications may be also used in a locale context. Then the
11536 constants being introduced depend on certain fixed parameters, and the
11537 constant name is qualified by the locale base name. An internal
11538 abbreviation takes care for convenient input and output, making the
11539 parameters implicit and using the original short name. See also
11540 src/HOL/ex/Abstract_NAT.thy for an example of deriving polymorphic
11541 entities from a monomorphic theory.
11543 Presently, abbreviations are only available 'in' a target locale, but
11544 not inherited by general import expressions. Also note that
11545 'abbreviation' may be used as a type-safe replacement for 'syntax' +
11546 'translations' in common applications. The "no_abbrevs" print mode
11547 prevents folding of abbreviations in term output.
11549 Concrete syntax is attached to specified constants in internal form,
11550 independently of name spaces. The parse tree representation is
11551 slightly different -- use 'notation' instead of raw 'syntax', and
11552 'translations' with explicit "CONST" markup to accommodate this.
11554 * Pure/Isar: unified syntax for new-style specification mechanisms
11555 (e.g. 'definition', 'abbreviation', or 'inductive' in HOL) admits
11556 full type inference and dummy patterns ("_"). For example:
11558 definition "K x _ = x"
11560 inductive conj for A B
11561 where "A ==> B ==> conj A B"
11563 * Pure: command 'print_abbrevs' prints all constant abbreviations of
11564 the current context. Print mode "no_abbrevs" prevents inversion of
11565 abbreviations on output.
11567 * Isar/locales: improved parameter handling: use of locales "var" and
11568 "struct" no longer necessary; - parameter renamings are no longer
11569 required to be injective. For example, this allows to define
11570 endomorphisms as locale endom = homom mult mult h.
11572 * Isar/locales: changed the way locales with predicates are defined.
11573 Instead of accumulating the specification, the imported expression is
11574 now an interpretation. INCOMPATIBILITY: different normal form of
11575 locale expressions. In particular, in interpretations of locales with
11576 predicates, goals repesenting already interpreted fragments are not
11577 removed automatically. Use methods `intro_locales' and
11578 `unfold_locales'; see below.
11580 * Isar/locales: new methods `intro_locales' and `unfold_locales'
11581 provide backward reasoning on locales predicates. The methods are
11582 aware of interpretations and discharge corresponding goals.
11583 `intro_locales' is less aggressive then `unfold_locales' and does not
11584 unfold predicates to assumptions.
11586 * Isar/locales: the order in which locale fragments are accumulated
11587 has changed. This enables to override declarations from fragments due
11588 to interpretations -- for example, unwanted simp rules.
11590 * Isar/locales: interpretation in theories and proof contexts has been
11591 extended. One may now specify (and prove) equations, which are
11592 unfolded in interpreted theorems. This is useful for replacing
11593 defined concepts (constants depending on locale parameters) by
11594 concepts already existing in the target context. Example:
11596 interpretation partial_order ["op <= :: [int, int] => bool"]
11597 where "partial_order.less (op <=) (x::int) y = (x < y)"
11599 Typically, the constant `partial_order.less' is created by a
11600 definition specification element in the context of locale
11603 * Method "induct": improved internal context management to support
11604 local fixes and defines on-the-fly. Thus explicit meta-level
11605 connectives !! and ==> are rarely required anymore in inductive goals
11606 (using object-logic connectives for this purpose has been long
11607 obsolete anyway). Common proof patterns are explained in
11608 src/HOL/Induct/Common_Patterns.thy, see also
11609 src/HOL/Isar_examples/Puzzle.thy and src/HOL/Lambda for realistic
11612 * Method "induct": improved handling of simultaneous goals. Instead of
11613 introducing object-level conjunction, the statement is now split into
11614 several conclusions, while the corresponding symbolic cases are nested
11615 accordingly. INCOMPATIBILITY, proofs need to be structured explicitly,
11616 see src/HOL/Induct/Common_Patterns.thy, for example.
11618 * Method "induct": mutual induction rules are now specified as a list
11619 of rule sharing the same induction cases. HOL packages usually provide
11620 foo_bar.inducts for mutually defined items foo and bar (e.g. inductive
11621 predicates/sets or datatypes). INCOMPATIBILITY, users need to specify
11622 mutual induction rules differently, i.e. like this:
11624 (induct rule: foo_bar.inducts)
11625 (induct set: foo bar)
11626 (induct pred: foo bar)
11627 (induct type: foo bar)
11629 The ML function ProjectRule.projections turns old-style rules into the
11632 * Method "coinduct": dual of induction, see
11633 src/HOL/Library/Coinductive_List.thy for various examples.
11635 * Method "cases", "induct", "coinduct": the ``(open)'' option is
11636 considered a legacy feature.
11638 * Attribute "symmetric" produces result with standardized schematic
11639 variables (index 0). Potential INCOMPATIBILITY.
11641 * Simplifier: by default the simplifier trace only shows top level
11642 rewrites now. That is, trace_simp_depth_limit is set to 1 by
11643 default. Thus there is less danger of being flooded by the trace. The
11644 trace indicates where parts have been suppressed.
11646 * Provers/classical: removed obsolete classical version of elim_format
11647 attribute; classical elim/dest rules are now treated uniformly when
11648 manipulating the claset.
11650 * Provers/classical: stricter checks to ensure that supplied intro,
11651 dest and elim rules are well-formed; dest and elim rules must have at
11654 * Provers/classical: attributes dest/elim/intro take an optional
11655 weight argument for the rule (just as the Pure versions). Weights are
11656 ignored by automated tools, but determine the search order of single
11659 * Syntax: input syntax now supports dummy variable binding "%_. b",
11660 where the body does not mention the bound variable. Note that dummy
11661 patterns implicitly depend on their context of bounds, which makes
11662 "{_. _}" match any set comprehension as expected. Potential
11663 INCOMPATIBILITY -- parse translations need to cope with syntactic
11664 constant "_idtdummy" in the binding position.
11666 * Syntax: removed obsolete syntactic constant "_K" and its associated
11667 parse translation. INCOMPATIBILITY -- use dummy abstraction instead,
11668 for example "A -> B" => "Pi A (%_. B)".
11670 * Pure: 'class_deps' command visualizes the subclass relation, using
11671 the graph browser tool.
11673 * Pure: 'print_theory' now suppresses certain internal declarations by
11674 default; use '!' option for full details.
11679 * Method "metis" proves goals by applying the Metis general-purpose
11680 resolution prover (see also http://gilith.com/software/metis/).
11681 Examples are in the directory MetisExamples. WARNING: the
11682 Isabelle/HOL-Metis integration does not yet work properly with
11685 * Command 'sledgehammer' invokes external automatic theorem provers as
11686 background processes. It generates calls to the "metis" method if
11687 successful. These can be pasted into the proof. Users do not have to
11688 wait for the automatic provers to return. WARNING: does not really
11689 work with multi-threading.
11691 * New "auto_quickcheck" feature tests outermost goal statements for
11692 potential counter-examples. Controlled by ML references
11693 auto_quickcheck (default true) and auto_quickcheck_time_limit (default
11694 5000 milliseconds). Fails silently if statements is outside of
11695 executable fragment, or any other codgenerator problem occurs.
11697 * New constant "undefined" with axiom "undefined x = undefined".
11699 * Added class "HOL.eq", allowing for code generation with polymorphic
11702 * Some renaming of class constants due to canonical name prefixing in
11703 the new 'class' package:
11705 HOL.abs ~> HOL.abs_class.abs
11706 HOL.divide ~> HOL.divide_class.divide
11707 0 ~> HOL.zero_class.zero
11708 1 ~> HOL.one_class.one
11709 op + ~> HOL.plus_class.plus
11710 op - ~> HOL.minus_class.minus
11711 uminus ~> HOL.minus_class.uminus
11712 op * ~> HOL.times_class.times
11713 op < ~> HOL.ord_class.less
11714 op <= > HOL.ord_class.less_eq
11715 Nat.power ~> Power.power_class.power
11716 Nat.size ~> Nat.size_class.size
11717 Numeral.number_of ~> Numeral.number_class.number_of
11718 FixedPoint.Inf ~> Lattices.complete_lattice_class.Inf
11719 FixedPoint.Sup ~> Lattices.complete_lattice_class.Sup
11720 Orderings.min ~> Orderings.ord_class.min
11721 Orderings.max ~> Orderings.ord_class.max
11722 Divides.op div ~> Divides.div_class.div
11723 Divides.op mod ~> Divides.div_class.mod
11724 Divides.op dvd ~> Divides.div_class.dvd
11726 INCOMPATIBILITY. Adaptions may be required in the following cases:
11728 a) User-defined constants using any of the names "plus", "minus",
11729 "times", "less" or "less_eq". The standard syntax translations for
11730 "+", "-" and "*" may go wrong. INCOMPATIBILITY: use more specific
11733 b) Variables named "plus", "minus", "times", "less", "less_eq"
11734 INCOMPATIBILITY: use more specific names.
11736 c) Permutative equations (e.g. "a + b = b + a")
11737 Since the change of names also changes the order of terms, permutative
11738 rewrite rules may get applied in a different order. Experience shows
11739 that this is rarely the case (only two adaptions in the whole Isabelle
11740 distribution). INCOMPATIBILITY: rewrite proofs
11742 d) ML code directly refering to constant names
11743 This in general only affects hand-written proof tactics, simprocs and
11744 so on. INCOMPATIBILITY: grep your sourcecode and replace names.
11745 Consider using @{const_name} antiquotation.
11747 * New class "default" with associated constant "default".
11749 * Function "sgn" is now overloaded and available on int, real, complex
11750 (and other numeric types), using class "sgn". Two possible defs of
11751 sgn are given as equational assumptions in the classes sgn_if and
11752 sgn_div_norm; ordered_idom now also inherits from sgn_if.
11755 * Locale "partial_order" now unified with class "order" (cf. theory
11756 Orderings), added parameter "less". INCOMPATIBILITY.
11758 * Renamings in classes "order" and "linorder": facts "refl", "trans" and
11759 "cases" to "order_refl", "order_trans" and "linorder_cases", to avoid
11760 clashes with HOL "refl" and "trans". INCOMPATIBILITY.
11762 * Classes "order" and "linorder": potential INCOMPATIBILITY due to
11763 changed order of proof goals in instance proofs.
11765 * The transitivity reasoner for partial and linear orders is set up
11766 for classes "order" and "linorder". Instances of the reasoner are available
11767 in all contexts importing or interpreting the corresponding locales.
11768 Method "order" invokes the reasoner separately; the reasoner
11769 is also integrated with the Simplifier as a solver. Diagnostic
11770 command 'print_orders' shows the available instances of the reasoner
11771 in the current context.
11773 * Localized monotonicity predicate in theory "Orderings"; integrated
11774 lemmas max_of_mono and min_of_mono with this predicate.
11777 * Formulation of theorem "dense" changed slightly due to integration
11778 with new class dense_linear_order.
11780 * Uniform lattice theory development in HOL.
11782 constants "meet" and "join" now named "inf" and "sup"
11783 constant "Meet" now named "Inf"
11785 classes "meet_semilorder" and "join_semilorder" now named
11786 "lower_semilattice" and "upper_semilattice"
11787 class "lorder" now named "lattice"
11788 class "comp_lat" now named "complete_lattice"
11790 Instantiation of lattice classes allows explicit definitions
11791 for "inf" and "sup" operations (or "Inf" and "Sup" for complete lattices).
11793 INCOMPATIBILITY. Theorem renames:
11795 meet_left_le ~> inf_le1
11796 meet_right_le ~> inf_le2
11797 join_left_le ~> sup_ge1
11798 join_right_le ~> sup_ge2
11799 meet_join_le ~> inf_sup_ord
11800 le_meetI ~> le_infI
11801 join_leI ~> le_supI
11802 le_meet ~> le_inf_iff
11803 le_join ~> ge_sup_conv
11804 meet_idempotent ~> inf_idem
11805 join_idempotent ~> sup_idem
11806 meet_comm ~> inf_commute
11807 join_comm ~> sup_commute
11808 meet_leI1 ~> le_infI1
11809 meet_leI2 ~> le_infI2
11810 le_joinI1 ~> le_supI1
11811 le_joinI2 ~> le_supI2
11812 meet_assoc ~> inf_assoc
11813 join_assoc ~> sup_assoc
11814 meet_left_comm ~> inf_left_commute
11815 meet_left_idempotent ~> inf_left_idem
11816 join_left_comm ~> sup_left_commute
11817 join_left_idempotent ~> sup_left_idem
11818 meet_aci ~> inf_aci
11819 join_aci ~> sup_aci
11820 le_def_meet ~> le_iff_inf
11821 le_def_join ~> le_iff_sup
11822 join_absorp2 ~> sup_absorb2
11823 join_absorp1 ~> sup_absorb1
11824 meet_absorp1 ~> inf_absorb1
11825 meet_absorp2 ~> inf_absorb2
11826 meet_join_absorp ~> inf_sup_absorb
11827 join_meet_absorp ~> sup_inf_absorb
11828 distrib_join_le ~> distrib_sup_le
11829 distrib_meet_le ~> distrib_inf_le
11831 add_meet_distrib_left ~> add_inf_distrib_left
11832 add_join_distrib_left ~> add_sup_distrib_left
11833 is_join_neg_meet ~> is_join_neg_inf
11834 is_meet_neg_join ~> is_meet_neg_sup
11835 add_meet_distrib_right ~> add_inf_distrib_right
11836 add_join_distrib_right ~> add_sup_distrib_right
11837 add_meet_join_distribs ~> add_sup_inf_distribs
11838 join_eq_neg_meet ~> sup_eq_neg_inf
11839 meet_eq_neg_join ~> inf_eq_neg_sup
11840 add_eq_meet_join ~> add_eq_inf_sup
11841 meet_0_imp_0 ~> inf_0_imp_0
11842 join_0_imp_0 ~> sup_0_imp_0
11843 meet_0_eq_0 ~> inf_0_eq_0
11844 join_0_eq_0 ~> sup_0_eq_0
11845 neg_meet_eq_join ~> neg_inf_eq_sup
11846 neg_join_eq_meet ~> neg_sup_eq_inf
11847 join_eq_if ~> sup_eq_if
11849 mono_meet ~> mono_inf
11850 mono_join ~> mono_sup
11851 meet_bool_eq ~> inf_bool_eq
11852 join_bool_eq ~> sup_bool_eq
11853 meet_fun_eq ~> inf_fun_eq
11854 join_fun_eq ~> sup_fun_eq
11855 meet_set_eq ~> inf_set_eq
11856 join_set_eq ~> sup_set_eq
11857 meet1_iff ~> inf1_iff
11858 meet2_iff ~> inf2_iff
11867 join1_iff ~> sup1_iff
11868 join2_iff ~> sup2_iff
11878 is_meet_Meet ~> is_meet_Inf
11879 Meet_bool_def ~> Inf_bool_def
11880 Meet_fun_def ~> Inf_fun_def
11881 Meet_greatest ~> Inf_greatest
11882 Meet_lower ~> Inf_lower
11883 Meet_set_def ~> Inf_set_def
11886 Sup_bool_eq ~> Sup_bool_def
11887 Sup_fun_eq ~> Sup_fun_def
11888 Sup_set_eq ~> Sup_set_def
11890 listsp_meetI ~> listsp_infI
11891 listsp_meet_eq ~> listsp_inf_eq
11893 meet_min ~> inf_min
11894 join_max ~> sup_max
11896 * Added syntactic class "size"; overloaded constant "size" now has
11897 type "'a::size ==> bool"
11899 * Internal reorganisation of `size' of datatypes: size theorems
11900 "foo.size" are no longer subsumed by "foo.simps" (but are still
11901 simplification rules by default!); theorems "prod.size" now named
11904 * Class "div" now inherits from class "times" rather than "type".
11907 * HOL/Finite_Set: "name-space" locales Lattice, Distrib_lattice,
11908 Linorder etc. have disappeared; operations defined in terms of
11909 fold_set now are named Inf_fin, Sup_fin. INCOMPATIBILITY.
11911 * HOL/Nat: neq0_conv no longer declared as iff. INCOMPATIBILITY.
11913 * HOL-Word: New extensive library and type for generic, fixed size
11914 machine words, with arithmetic, bit-wise, shifting and rotating
11915 operations, reflection into int, nat, and bool lists, automation for
11916 linear arithmetic (by automatic reflection into nat or int), including
11917 lemmas on overflow and monotonicity. Instantiated to all appropriate
11918 arithmetic type classes, supporting automatic simplification of
11919 numerals on all operations.
11921 * Library/Boolean_Algebra: locales for abstract boolean algebras.
11923 * Library/Numeral_Type: numbers as types, e.g. TYPE(32).
11925 * Code generator library theories:
11926 - Code_Integer represents HOL integers by big integer literals in target
11928 - Code_Char represents HOL characters by character literals in target
11930 - Code_Char_chr like Code_Char, but also offers treatment of character
11931 codes; includes Code_Integer.
11932 - Executable_Set allows to generate code for finite sets using lists.
11933 - Executable_Rat implements rational numbers as triples (sign, enumerator,
11935 - Executable_Real implements a subset of real numbers, namly those
11936 representable by rational numbers.
11937 - Efficient_Nat implements natural numbers by integers, which in general will
11938 result in higher efficency; pattern matching with 0/Suc is eliminated;
11939 includes Code_Integer.
11940 - Code_Index provides an additional datatype index which is mapped to
11941 target-language built-in integers.
11942 - Code_Message provides an additional datatype message_string which is isomorphic to
11943 strings; messages are mapped to target-language strings.
11945 * New package for inductive predicates
11947 An n-ary predicate p with m parameters z_1, ..., z_m can now be defined via
11950 p :: "U_1 => ... => U_m => T_1 => ... => T_n => bool"
11951 for z_1 :: U_1 and ... and z_n :: U_m
11953 rule_1: "... ==> p z_1 ... z_m t_1_1 ... t_1_n"
11956 with full support for type-inference, rather than
11958 consts s :: "U_1 => ... => U_m => (T_1 * ... * T_n) set"
11960 abbreviation p :: "U_1 => ... => U_m => T_1 => ... => T_n => bool"
11961 where "p z_1 ... z_m x_1 ... x_n == (x_1, ..., x_n) : s z_1 ... z_m"
11963 inductive "s z_1 ... z_m"
11965 rule_1: "... ==> (t_1_1, ..., t_1_n) : s z_1 ... z_m"
11968 For backward compatibility, there is a wrapper allowing inductive
11969 sets to be defined with the new package via
11972 s :: "U_1 => ... => U_m => (T_1 * ... * T_n) set"
11973 for z_1 :: U_1 and ... and z_n :: U_m
11975 rule_1: "... ==> (t_1_1, ..., t_1_n) : s z_1 ... z_m"
11981 s :: "U_1 => ... => U_m => (T_1 * ... * T_n) set"
11982 and p :: "U_1 => ... => U_m => T_1 => ... => T_n => bool"
11983 for z_1 :: U_1 and ... and z_n :: U_m
11985 "p z_1 ... z_m x_1 ... x_n == (x_1, ..., x_n) : s z_1 ... z_m"
11986 | rule_1: "... ==> p z_1 ... z_m t_1_1 ... t_1_n"
11989 if the additional syntax "p ..." is required.
11991 Numerous examples can be found in the subdirectories src/HOL/Auth,
11992 src/HOL/Bali, src/HOL/Induct, and src/HOL/MicroJava.
11996 - Since declaration and definition of inductive sets or predicates
11997 is no longer separated, abbreviations involving the newly
11998 introduced sets or predicates must be specified together with the
11999 introduction rules after the 'where' keyword (see above), rather
12000 than before the actual inductive definition.
12002 - The variables in induction and elimination rules are now
12003 quantified in the order of their occurrence in the introduction
12004 rules, rather than in alphabetical order. Since this may break
12005 some proofs, these proofs either have to be repaired, e.g. by
12006 reordering the variables a_i_1 ... a_i_{k_i} in Isar 'case'
12007 statements of the form
12009 case (rule_i a_i_1 ... a_i_{k_i})
12011 or the old order of quantification has to be restored by explicitly adding
12012 meta-level quantifiers in the introduction rules, i.e.
12014 | rule_i: "!!a_i_1 ... a_i_{k_i}. ... ==> p z_1 ... z_m t_i_1 ... t_i_n"
12016 - The format of the elimination rules is now
12018 p z_1 ... z_m x_1 ... x_n ==>
12019 (!!a_1_1 ... a_1_{k_1}. x_1 = t_1_1 ==> ... ==> x_n = t_1_n ==> ... ==> P)
12024 (x_1, ..., x_n) : s z_1 ... z_m ==>
12025 (!!a_1_1 ... a_1_{k_1}. x_1 = t_1_1 ==> ... ==> x_n = t_1_n ==> ... ==> P)
12028 for sets rather than
12030 x : s z_1 ... z_m ==>
12031 (!!a_1_1 ... a_1_{k_1}. x = (t_1_1, ..., t_1_n) ==> ... ==> P)
12034 This may require terms in goals to be expanded to n-tuples
12035 (e.g. using case_tac or simplification with the split_paired_all
12036 rule) before the above elimination rule is applicable.
12038 - The elimination or case analysis rules for (mutually) inductive
12039 sets or predicates are now called "p_1.cases" ... "p_k.cases". The
12040 list of rules "p_1_..._p_k.elims" is no longer available.
12042 * New package "function"/"fun" for general recursive functions,
12043 supporting mutual and nested recursion, definitions in local contexts,
12044 more general pattern matching and partiality. See HOL/ex/Fundefs.thy
12045 for small examples, and the separate tutorial on the function
12046 package. The old recdef "package" is still available as before, but
12047 users are encouraged to use the new package.
12049 * Method "lexicographic_order" automatically synthesizes termination
12050 relations as lexicographic combinations of size measures.
12052 * Case-expressions allow arbitrary constructor-patterns (including
12053 "_") and take their order into account, like in functional
12054 programming. Internally, this is translated into nested
12055 case-expressions; missing cases are added and mapped to the predefined
12056 constant "undefined". In complicated cases printing may no longer show
12057 the original input but the internal form. Lambda-abstractions allow
12058 the same form of pattern matching: "% pat1 => e1 | ..." is an
12059 abbreviation for "%x. case x of pat1 => e1 | ..." where x is a new
12062 * IntDef: The constant "int :: nat => int" has been removed; now "int"
12063 is an abbreviation for "of_nat :: nat => int". The simplification
12064 rules for "of_nat" have been changed to work like "int" did
12065 previously. Potential INCOMPATIBILITY:
12066 - "of_nat (Suc m)" simplifies to "1 + of_nat m" instead of "of_nat m + 1"
12067 - of_nat_diff and of_nat_mult are no longer default simp rules
12069 * Method "algebra" solves polynomial equations over (semi)rings using
12070 Groebner bases. The (semi)ring structure is defined by locales and the
12071 tool setup depends on that generic context. Installing the method for
12072 a specific type involves instantiating the locale and possibly adding
12073 declarations for computation on the coefficients. The method is
12074 already instantiated for natural numbers and for the axiomatic class
12075 of idoms with numerals. See also the paper by Chaieb and Wenzel at
12076 CALCULEMUS 2007 for the general principles underlying this
12077 architecture of context-aware proof-tools.
12079 * Method "ferrack" implements quantifier elimination over
12080 special-purpose dense linear orders using locales (analogous to
12081 "algebra"). The method is already installed for class
12082 {ordered_field,recpower,number_ring} which subsumes real, hyperreal,
12085 * Former constant "List.op @" now named "List.append". Use ML
12086 antiquotations @{const_name List.append} or @{term " ... @ ... "} to
12087 circumvent possible incompatibilities when working on ML level.
12089 * primrec: missing cases mapped to "undefined" instead of "arbitrary".
12091 * New function listsum :: 'a list => 'a for arbitrary monoids.
12092 Special syntax: "SUM x <- xs. f x" (and latex variants)
12094 * New syntax for Haskell-like list comprehension (input only), eg.
12095 [(x,y). x <- xs, y <- ys, x ~= y], see also src/HOL/List.thy.
12097 * The special syntax for function "filter" has changed from [x :
12098 xs. P] to [x <- xs. P] to avoid an ambiguity caused by list
12099 comprehension syntax, and for uniformity. INCOMPATIBILITY.
12101 * [a..b] is now defined for arbitrary linear orders. It used to be
12102 defined on nat only, as an abbreviation for [a..<Suc b]
12105 * Renamed lemma "set_take_whileD" to "set_takeWhileD".
12107 * New functions "sorted" and "sort" in src/HOL/List.thy.
12109 * New lemma collection field_simps (an extension of ring_simps) for
12110 manipulating (in)equations involving division. Multiplies with all
12111 denominators that can be proved to be non-zero (in equations) or
12112 positive/negative (in inequations).
12114 * Lemma collections ring_eq_simps, group_eq_simps and ring_distrib
12115 have been improved and renamed to ring_simps, group_simps and
12116 ring_distribs. Removed lemmas field_xyz in theory Ring_and_Field
12117 because they were subsumed by lemmas xyz. INCOMPATIBILITY.
12119 * Theory Library/Commutative_Ring: switched from recdef to function
12120 package; constants add, mul, pow now curried. Infix syntax for
12121 algebraic operations.
12123 * Dropped redundant lemma def_imp_eq in favor of meta_eq_to_obj_eq.
12126 * Dropped redundant lemma if_def2 in favor of if_bool_eq_conj.
12129 * HOL/records: generalised field-update to take a function on the
12130 field rather than the new value: r(|A := x|) is translated to A_update
12131 (K x) r The K-combinator that is internally used is called K_record.
12132 INCOMPATIBILITY: Usage of the plain update functions has to be
12135 * Class "semiring_0" now contains annihilation axioms x * 0 = 0 and 0
12136 * x = 0, which are required for a semiring. Richer structures do not
12137 inherit from semiring_0 anymore, because this property is a theorem
12138 there, not an axiom. INCOMPATIBILITY: In instances of semiring_0,
12139 there is more to prove, but this is mostly trivial.
12141 * Class "recpower" is generalized to arbitrary monoids, not just
12142 commutative semirings. INCOMPATIBILITY: may need to incorporate
12143 commutativity or semiring properties additionally.
12145 * Constant "List.list_all2" in List.thy now uses authentic syntax.
12146 INCOMPATIBILITY: translations containing list_all2 may go wrong,
12147 better use 'abbreviation'.
12149 * Renamed constant "List.op mem" to "List.member". INCOMPATIBILITY.
12151 * Numeral syntax: type 'bin' which was a mere type copy of 'int' has
12152 been abandoned in favour of plain 'int'. INCOMPATIBILITY --
12153 significant changes for setting up numeral syntax for types:
12154 - New constants Numeral.pred and Numeral.succ instead
12155 of former Numeral.bin_pred and Numeral.bin_succ.
12156 - Use integer operations instead of bin_add, bin_mult and so on.
12157 - Numeral simplification theorems named Numeral.numeral_simps instead of Bin_simps.
12158 - ML structure Bin_Simprocs now named Int_Numeral_Base_Simprocs.
12160 See src/HOL/Integ/IntArith.thy for an example setup.
12162 * Command 'normal_form' computes the normal form of a term that may
12163 contain free variables. For example ``normal_form "rev [a, b, c]"''
12164 produces ``[b, c, a]'' (without proof). This command is suitable for
12165 heavy-duty computations because the functions are compiled to ML
12166 first. Correspondingly, a method "normalization" is provided. See
12167 further src/HOL/ex/NormalForm.thy and src/Tools/nbe.ML.
12169 * Alternative iff syntax "A <-> B" for equality on bool (with priority
12170 25 like -->); output depends on the "iff" print_mode, the default is
12171 "A = B" (with priority 50).
12173 * Relations less (<) and less_eq (<=) are also available on type bool.
12174 Modified syntax to disallow nesting without explicit parentheses,
12175 e.g. "(x < y) < z" or "x < (y < z)", but NOT "x < y < z". Potential
12178 * "LEAST x:A. P" expands to "LEAST x. x:A & P" (input only).
12180 * Relation composition operator "op O" now has precedence 75 and binds
12181 stronger than union and intersection. INCOMPATIBILITY.
12183 * The old set interval syntax "{m..n(}" (and relatives) has been
12184 removed. Use "{m..<n}" (and relatives) instead.
12186 * In the context of the assumption "~(s = t)" the Simplifier rewrites
12187 "t = s" to False (by simproc "neq"). INCOMPATIBILITY, consider using
12188 ``declare [[simproc del: neq]]''.
12190 * Simplifier: "m dvd n" where m and n are numbers is evaluated to
12193 * Theorem Cons_eq_map_conv no longer declared as "simp".
12195 * Theorem setsum_mult renamed to setsum_right_distrib.
12197 * Prefer ex1I over ex_ex1I in single-step reasoning, e.g. by the
12200 * Reimplemented methods "sat" and "satx", with several improvements:
12201 goals no longer need to be stated as "<prems> ==> False", equivalences
12202 (i.e. "=" on type bool) are handled, variable names of the form
12203 "lit_<n>" are no longer reserved, significant speedup.
12205 * Methods "sat" and "satx" can now replay MiniSat proof traces.
12206 zChaff is still supported as well.
12208 * 'inductive' and 'datatype': provide projections of mutual rules,
12209 bundled as foo_bar.inducts;
12211 * Library: moved theories Parity, GCD, Binomial, Infinite_Set to
12214 * Library: moved theory Accessible_Part to main HOL.
12216 * Library: added theory Coinductive_List of potentially infinite lists
12217 as greatest fixed-point.
12219 * Library: added theory AssocList which implements (finite) maps as
12222 * Method "evaluation" solves goals (i.e. a boolean expression)
12223 efficiently by compiling it to ML. The goal is "proved" (via an
12224 oracle) if it evaluates to True.
12226 * Linear arithmetic now splits certain operators (e.g. min, max, abs)
12227 also when invoked by the simplifier. This results in the Simplifier
12228 being more powerful on arithmetic goals. INCOMPATIBILITY.
12229 Configuration option fast_arith_split_limit=0 recovers the old
12232 * Support for hex (0x20) and binary (0b1001) numerals.
12234 * New method: reify eqs (t), where eqs are equations for an
12235 interpretation I :: 'a list => 'b => 'c and t::'c is an optional
12236 parameter, computes a term s::'b and a list xs::'a list and proves the
12237 theorem I xs s = t. This is also known as reification or quoting. The
12238 resulting theorem is applied to the subgoal to substitute t with I xs
12239 s. If t is omitted, the subgoal itself is reified.
12241 * New method: reflection corr_thm eqs (t). The parameters eqs and (t)
12242 are as explained above. corr_thm is a theorem for I vs (f t) = I vs t,
12243 where f is supposed to be a computable function (in the sense of code
12244 generattion). The method uses reify to compute s and xs as above then
12245 applies corr_thm and uses normalization by evaluation to "prove" f s =
12246 r and finally gets the theorem t = r, which is again applied to the
12247 subgoal. An Example is available in src/HOL/ex/ReflectionEx.thy.
12249 * Reflection: Automatic reification now handels binding, an example is
12250 available in src/HOL/ex/ReflectionEx.thy
12252 * HOL-Statespace: ``State Spaces: The Locale Way'' introduces a
12253 command 'statespace' that is similar to 'record', but introduces an
12254 abstract specification based on the locale infrastructure instead of
12255 HOL types. This leads to extra flexibility in composing state spaces,
12256 in particular multiple inheritance and renaming of components.
12259 *** HOL-Complex ***
12261 * Hyperreal: Functions root and sqrt are now defined on negative real
12262 inputs so that root n (- x) = - root n x and sqrt (- x) = - sqrt x.
12263 Nonnegativity side conditions have been removed from many lemmas, so
12264 that more subgoals may now be solved by simplification; potential
12267 * Real: new type classes formalize real normed vector spaces and
12268 algebras, using new overloaded constants scaleR :: real => 'a => 'a
12269 and norm :: 'a => real.
12271 * Real: constant of_real :: real => 'a::real_algebra_1 injects from
12272 reals into other types. The overloaded constant Reals :: 'a set is now
12273 defined as range of_real; potential INCOMPATIBILITY.
12275 * Real: proper support for ML code generation, including 'quickcheck'.
12276 Reals are implemented as arbitrary precision rationals.
12278 * Hyperreal: Several constants that previously worked only for the
12279 reals have been generalized, so they now work over arbitrary vector
12280 spaces. Type annotations may need to be added in some cases; potential
12283 Infinitesimal :: ('a::real_normed_vector) star set
12284 HFinite :: ('a::real_normed_vector) star set
12285 HInfinite :: ('a::real_normed_vector) star set
12286 approx :: ('a::real_normed_vector) star => 'a star => bool
12287 monad :: ('a::real_normed_vector) star => 'a star set
12288 galaxy :: ('a::real_normed_vector) star => 'a star set
12289 (NS)LIMSEQ :: [nat => 'a::real_normed_vector, 'a] => bool
12290 (NS)convergent :: (nat => 'a::real_normed_vector) => bool
12291 (NS)Bseq :: (nat => 'a::real_normed_vector) => bool
12292 (NS)Cauchy :: (nat => 'a::real_normed_vector) => bool
12293 (NS)LIM :: ['a::real_normed_vector => 'b::real_normed_vector, 'a, 'b] => bool
12294 is(NS)Cont :: ['a::real_normed_vector => 'b::real_normed_vector, 'a] => bool
12295 deriv :: ['a::real_normed_field => 'a, 'a, 'a] => bool
12296 sgn :: 'a::real_normed_vector => 'a
12297 exp :: 'a::{recpower,real_normed_field,banach} => 'a
12299 * Complex: Some complex-specific constants are now abbreviations for
12300 overloaded ones: complex_of_real = of_real, cmod = norm, hcmod =
12301 hnorm. Other constants have been entirely removed in favor of the
12302 polymorphic versions (INCOMPATIBILITY):
12305 HFinite <-- CFinite
12306 HInfinite <-- CInfinite
12307 Infinitesimal <-- CInfinitesimal
12310 (NS)LIM <-- (NS)CLIM, (NS)CRLIM
12311 is(NS)Cont <-- is(NS)Contc, is(NS)contCR
12312 (ns)deriv <-- (ns)cderiv
12315 *** HOL-Algebra ***
12317 * Formalisation of ideals and the quotient construction over rings.
12319 * Order and lattice theory no longer based on records.
12322 * Renamed lemmas least_carrier -> least_closed and greatest_carrier ->
12323 greatest_closed. INCOMPATIBILITY.
12325 * Method algebra is now set up via an attribute. For examples see
12326 Ring.thy. INCOMPATIBILITY: the method is now weaker on combinations
12327 of algebraic structures.
12329 * Renamed theory CRing to Ring.
12332 *** HOL-Nominal ***
12334 * Substantial, yet incomplete support for nominal datatypes (binding
12335 structures) based on HOL-Nominal logic. See src/HOL/Nominal and
12336 src/HOL/Nominal/Examples. Prospective users should consult
12337 http://isabelle.in.tum.de/nominal/
12342 * ML basics: just one true type int, which coincides with IntInf.int
12345 * ML within Isar: antiquotations allow to embed statically-checked
12346 formal entities in the source, referring to the context available at
12347 compile-time. For example:
12349 ML {* @{sort "{zero,one}"} *}
12350 ML {* @{typ "'a => 'b"} *}
12351 ML {* @{term "%x. x"} *}
12352 ML {* @{prop "x == y"} *}
12353 ML {* @{ctyp "'a => 'b"} *}
12354 ML {* @{cterm "%x. x"} *}
12355 ML {* @{cprop "x == y"} *}
12356 ML {* @{thm asm_rl} *}
12357 ML {* @{thms asm_rl} *}
12358 ML {* @{type_name c} *}
12359 ML {* @{type_syntax c} *}
12360 ML {* @{const_name c} *}
12361 ML {* @{const_syntax c} *}
12362 ML {* @{context} *}
12364 ML {* @{theory Pure} *}
12365 ML {* @{theory_ref} *}
12366 ML {* @{theory_ref Pure} *}
12367 ML {* @{simpset} *}
12369 ML {* @{clasimpset} *}
12371 The same works for sources being ``used'' within an Isar context.
12373 * ML in Isar: improved error reporting; extra verbosity with
12374 ML_Context.trace enabled.
12376 * Pure/General/table.ML: the join operations now works via exceptions
12377 DUP/SAME instead of type option. This is simpler in simple cases, and
12378 admits slightly more efficient complex applications.
12380 * Pure: 'advanced' translation functions (parse_translation etc.) now
12381 use Context.generic instead of just theory.
12383 * Pure: datatype Context.generic joins theory/Proof.context and
12384 provides some facilities for code that works in either kind of
12385 context, notably GenericDataFun for uniform theory and proof data.
12387 * Pure: simplified internal attribute type, which is now always
12388 Context.generic * thm -> Context.generic * thm. Global (theory) vs.
12389 local (Proof.context) attributes have been discontinued, while
12390 minimizing code duplication. Thm.rule_attribute and
12391 Thm.declaration_attribute build canonical attributes; see also structure
12392 Context for further operations on Context.generic, notably
12393 GenericDataFun. INCOMPATIBILITY, need to adapt attribute type
12394 declarations and definitions.
12396 * Context data interfaces (Theory/Proof/GenericDataFun): removed
12397 name/print, uninitialized data defaults to ad-hoc copy of empty value,
12398 init only required for impure data. INCOMPATIBILITY: empty really need
12399 to be empty (no dependencies on theory content!)
12401 * Pure/kernel: consts certification ignores sort constraints given in
12402 signature declarations. (This information is not relevant to the
12403 logic, but only for type inference.) SIGNIFICANT INTERNAL CHANGE,
12404 potential INCOMPATIBILITY.
12406 * Pure: axiomatic type classes are now purely definitional, with
12407 explicit proofs of class axioms and super class relations performed
12408 internally. See Pure/axclass.ML for the main internal interfaces --
12409 notably AxClass.define_class supercedes AxClass.add_axclass, and
12410 AxClass.axiomatize_class/classrel/arity supersede
12411 Sign.add_classes/classrel/arities.
12413 * Pure/Isar: Args/Attrib parsers operate on Context.generic --
12414 global/local versions on theory vs. Proof.context have been
12415 discontinued; Attrib.syntax and Method.syntax have been adapted
12416 accordingly. INCOMPATIBILITY, need to adapt parser expressions for
12417 attributes, methods, etc.
12419 * Pure: several functions of signature "... -> theory -> theory * ..."
12420 have been reoriented to "... -> theory -> ... * theory" in order to
12421 allow natural usage in combination with the ||>, ||>>, |-> and
12422 fold_map combinators.
12424 * Pure: official theorem names (closed derivations) and additional
12425 comments (tags) are now strictly separate. Name hints -- which are
12426 maintained as tags -- may be attached any time without affecting the
12429 * Pure: primitive rule lift_rule now takes goal cterm instead of an
12430 actual goal state (thm). Use Thm.lift_rule (Thm.cprem_of st i) to
12431 achieve the old behaviour.
12433 * Pure: the "Goal" constant is now called "prop", supporting a
12434 slightly more general idea of ``protecting'' meta-level rule
12437 * Pure: Logic.(un)varify only works in a global context, which is now
12438 enforced instead of silently assumed. INCOMPATIBILITY, may use
12439 Logic.legacy_(un)varify as temporary workaround.
12441 * Pure: structure Name provides scalable operations for generating
12442 internal variable names, notably Name.variants etc. This replaces
12443 some popular functions from term.ML:
12445 Term.variant -> Name.variant
12446 Term.variantlist -> Name.variant_list
12447 Term.invent_names -> Name.invent_list
12449 Note that low-level renaming rarely occurs in new code -- operations
12450 from structure Variable are used instead (see below).
12452 * Pure: structure Variable provides fundamental operations for proper
12453 treatment of fixed/schematic variables in a context. For example,
12454 Variable.import introduces fixes for schematics of given facts and
12455 Variable.export reverses the effect (up to renaming) -- this replaces
12456 various freeze_thaw operations.
12458 * Pure: structure Goal provides simple interfaces for
12459 init/conclude/finish and tactical prove operations (replacing former
12460 Tactic.prove). Goal.prove is the canonical way to prove results
12461 within a given context; Goal.prove_global is a degraded version for
12462 theory level goals, including a global Drule.standard. Note that
12463 OldGoals.prove_goalw_cterm has long been obsolete, since it is
12464 ill-behaved in a local proof context (e.g. with local fixes/assumes or
12465 in a locale context).
12467 * Pure/Syntax: generic interfaces for parsing (Syntax.parse_term etc.)
12468 and type checking (Syntax.check_term etc.), with common combinations
12469 (Syntax.read_term etc.). These supersede former Sign.read_term etc.
12470 which are considered legacy and await removal.
12472 * Pure/Syntax: generic interfaces for type unchecking
12473 (Syntax.uncheck_terms etc.) and unparsing (Syntax.unparse_term etc.),
12474 with common combinations (Syntax.pretty_term, Syntax.string_of_term
12475 etc.). Former Sign.pretty_term, Sign.string_of_term etc. are still
12476 available for convenience, but refer to the very same operations using
12477 a mere theory instead of a full context.
12479 * Isar: simplified treatment of user-level errors, using exception
12480 ERROR of string uniformly. Function error now merely raises ERROR,
12481 without any side effect on output channels. The Isar toplevel takes
12482 care of proper display of ERROR exceptions. ML code may use plain
12483 handle/can/try; cat_error may be used to concatenate errors like this:
12485 ... handle ERROR msg => cat_error msg "..."
12487 Toplevel ML code (run directly or through the Isar toplevel) may be
12488 embedded into the Isar toplevel with exception display/debug like
12491 Isar.toplevel (fn () => ...)
12493 INCOMPATIBILITY, removed special transform_error facilities, removed
12494 obsolete variants of user-level exceptions (ERROR_MESSAGE,
12495 Context.PROOF, ProofContext.CONTEXT, Proof.STATE, ProofHistory.FAIL)
12496 -- use plain ERROR instead.
12498 * Isar: theory setup now has type (theory -> theory), instead of a
12499 list. INCOMPATIBILITY, may use #> to compose setup functions.
12501 * Isar: ML toplevel pretty printer for type Proof.context, subject to
12502 ProofContext.debug/verbose flags.
12504 * Isar: Toplevel.theory_to_proof admits transactions that modify the
12505 theory before entering a proof state. Transactions now always see a
12506 quasi-functional intermediate checkpoint, both in interactive and
12509 * Isar: simplified interfaces for outer syntax. Renamed
12510 OuterSyntax.add_keywords to OuterSyntax.keywords. Removed
12511 OuterSyntax.add_parsers -- this functionality is now included in
12512 OuterSyntax.command etc. INCOMPATIBILITY.
12514 * Simplifier: the simpset of a running simplification process now
12515 contains a proof context (cf. Simplifier.the_context), which is the
12516 very context that the initial simpset has been retrieved from (by
12517 simpset_of/local_simpset_of). Consequently, all plug-in components
12518 (solver, looper etc.) may depend on arbitrary proof data.
12520 * Simplifier.inherit_context inherits the proof context (plus the
12521 local bounds) of the current simplification process; any simproc
12522 etc. that calls the Simplifier recursively should do this! Removed
12523 former Simplifier.inherit_bounds, which is already included here --
12524 INCOMPATIBILITY. Tools based on low-level rewriting may even have to
12525 specify an explicit context using Simplifier.context/theory_context.
12527 * Simplifier/Classical Reasoner: more abstract interfaces
12528 change_simpset/claset for modifying the simpset/claset reference of a
12529 theory; raw versions simpset/claset_ref etc. have been discontinued --
12532 * Provers: more generic wrt. syntax of object-logics, avoid hardwired
12538 * settings: the default heap location within ISABELLE_HOME_USER now
12539 includes ISABELLE_IDENTIFIER. This simplifies use of multiple
12540 Isabelle installations.
12542 * isabelle-process: option -S (secure mode) disables some critical
12543 operations, notably runtime compilation and evaluation of ML source
12546 * Basic Isabelle mode for jEdit, see Isabelle/lib/jedit/.
12548 * Support for parallel execution, using native multicore support of
12549 Poly/ML 5.1. The theory loader exploits parallelism when processing
12550 independent theories, according to the given theory header
12551 specifications. The maximum number of worker threads is specified via
12552 usedir option -M or the "max-threads" setting in Proof General. A
12553 speedup factor of 1.5--3.5 can be expected on a 4-core machine, and up
12554 to 6 on a 8-core machine. User-code needs to observe certain
12555 guidelines for thread-safe programming, see appendix A in the Isar
12556 Implementation manual.
12560 New in Isabelle2005 (October 2005)
12561 ----------------------------------
12565 * Theory headers: the new header syntax for Isar theories is
12568 imports <theory1> ... <theoryN>
12569 uses <file1> ... <fileM>
12572 where the 'uses' part is optional. The previous syntax
12574 theory <name> = <theory1> + ... + <theoryN>:
12576 will disappear in the next release. Use isatool fixheaders to convert
12577 existing theory files. Note that there is no change in ancient
12578 non-Isar theories now, but these will disappear soon.
12580 * Theory loader: parent theories can now also be referred to via
12581 relative and absolute paths.
12583 * Command 'find_theorems' searches for a list of criteria instead of a
12584 list of constants. Known criteria are: intro, elim, dest, name:string,
12585 simp:term, and any term. Criteria can be preceded by '-' to select
12586 theorems that do not match. Intro, elim, dest select theorems that
12587 match the current goal, name:s selects theorems whose fully qualified
12588 name contain s, and simp:term selects all simplification rules whose
12589 lhs match term. Any other term is interpreted as pattern and selects
12590 all theorems matching the pattern. Available in ProofGeneral under
12591 'ProofGeneral -> Find Theorems' or C-c C-f. Example:
12593 C-c C-f (100) "(_::nat) + _ + _" intro -name: "HOL."
12595 prints the last 100 theorems matching the pattern "(_::nat) + _ + _",
12596 matching the current goal as introduction rule and not having "HOL."
12597 in their name (i.e. not being defined in theory HOL).
12599 * Command 'thms_containing' has been discontinued in favour of
12600 'find_theorems'; INCOMPATIBILITY.
12602 * Communication with Proof General is now 8bit clean, which means that
12603 Unicode text in UTF-8 encoding may be used within theory texts (both
12604 formal and informal parts). Cf. option -U of the Isabelle Proof
12605 General interface. Here are some simple examples (cf. src/HOL/ex):
12607 http://isabelle.in.tum.de/library/HOL/ex/Hebrew.html
12608 http://isabelle.in.tum.de/library/HOL/ex/Chinese.html
12610 * Improved efficiency of the Simplifier and, to a lesser degree, the
12611 Classical Reasoner. Typical big applications run around 2 times
12615 *** Document preparation ***
12617 * Commands 'display_drafts' and 'print_drafts' perform simple output
12618 of raw sources. Only those symbols that do not require additional
12619 LaTeX packages (depending on comments in isabellesym.sty) are
12620 displayed properly, everything else is left verbatim. isatool display
12621 and isatool print are used as front ends (these are subject to the
12622 DVI/PDF_VIEWER and PRINT_COMMAND settings, respectively).
12624 * Command tags control specific markup of certain regions of text,
12625 notably folding and hiding. Predefined tags include "theory" (for
12626 theory begin and end), "proof" for proof commands, and "ML" for
12627 commands involving ML code; the additional tags "visible" and
12628 "invisible" are unused by default. Users may give explicit tag
12629 specifications in the text, e.g. ''by %invisible (auto)''. The
12630 interpretation of tags is determined by the LaTeX job during document
12631 preparation: see option -V of isatool usedir, or options -n and -t of
12632 isatool document, or even the LaTeX macros \isakeeptag, \isafoldtag,
12635 Several document versions may be produced at the same time via isatool
12636 usedir (the generated index.html will link all of them). Typical
12637 specifications include ''-V document=theory,proof,ML'' to present
12638 theory/proof/ML parts faithfully, ''-V outline=/proof,/ML'' to fold
12639 proof and ML commands, and ''-V mutilated=-theory,-proof,-ML'' to omit
12640 these parts without any formal replacement text. The Isabelle site
12641 default settings produce ''document'' and ''outline'' versions as
12644 * Several new antiquotations:
12646 @{term_type term} prints a term with its type annotated;
12648 @{typeof term} prints the type of a term;
12650 @{const const} is the same as @{term const}, but checks that the
12651 argument is a known logical constant;
12653 @{term_style style term} and @{thm_style style thm} print a term or
12654 theorem applying a "style" to it
12658 Predefined styles are 'lhs' and 'rhs' printing the lhs/rhs of
12659 definitions, equations, inequations etc., 'concl' printing only the
12660 conclusion of a meta-logical statement theorem, and 'prem1' .. 'prem19'
12661 to print the specified premise. TermStyle.add_style provides an ML
12662 interface for introducing further styles. See also the "LaTeX Sugar"
12663 document practical applications. The ML antiquotation prints
12664 type-checked ML expressions verbatim.
12666 * Markup commands 'chapter', 'section', 'subsection', 'subsubsection',
12667 and 'text' support optional locale specification '(in loc)', which
12668 specifies the default context for interpreting antiquotations. For
12669 example: 'text (in lattice) {* @{thm inf_assoc}*}'.
12671 * Option 'locale=NAME' of antiquotations specifies an alternative
12672 context interpreting the subsequent argument. For example: @{thm
12673 [locale=lattice] inf_assoc}.
12675 * Proper output of proof terms (@{prf ...} and @{full_prf ...}) within
12678 * Proper output of antiquotations for theory commands involving a
12679 proof context (such as 'locale' or 'theorem (in loc) ...').
12681 * Delimiters of outer tokens (string etc.) now produce separate LaTeX
12682 macros (\isachardoublequoteopen, isachardoublequoteclose etc.).
12684 * isatool usedir: new option -C (default true) controls whether option
12685 -D should include a copy of the original document directory; -C false
12686 prevents unwanted effects such as copying of administrative CVS data.
12691 * Considerably improved version of 'constdefs' command. Now performs
12692 automatic type-inference of declared constants; additional support for
12693 local structure declarations (cf. locales and HOL records), see also
12694 isar-ref manual. Potential INCOMPATIBILITY: need to observe strictly
12695 sequential dependencies of definitions within a single 'constdefs'
12696 section; moreover, the declared name needs to be an identifier. If
12697 all fails, consider to fall back on 'consts' and 'defs' separately.
12699 * Improved indexed syntax and implicit structures. First of all,
12700 indexed syntax provides a notational device for subscripted
12701 application, using the new syntax \<^bsub>term\<^esub> for arbitrary
12702 expressions. Secondly, in a local context with structure
12703 declarations, number indexes \<^sub>n or the empty index (default
12704 number 1) refer to a certain fixed variable implicitly; option
12705 show_structs controls printing of implicit structures. Typical
12706 applications of these concepts involve record types and locales.
12708 * New command 'no_syntax' removes grammar declarations (and
12709 translations) resulting from the given syntax specification, which is
12710 interpreted in the same manner as for the 'syntax' command.
12712 * 'Advanced' translation functions (parse_translation etc.) may depend
12713 on the signature of the theory context being presently used for
12714 parsing/printing, see also isar-ref manual.
12716 * Improved 'oracle' command provides a type-safe interface to turn an
12717 ML expression of type theory -> T -> term into a primitive rule of
12718 type theory -> T -> thm (i.e. the functionality of Thm.invoke_oracle
12719 is already included here); see also FOL/ex/IffExample.thy;
12722 * axclass: name space prefix for class "c" is now "c_class" (was "c"
12723 before); "cI" is no longer bound, use "c.intro" instead.
12724 INCOMPATIBILITY. This change avoids clashes of fact bindings for
12725 axclasses vs. locales.
12727 * Improved internal renaming of symbolic identifiers -- attach primes
12728 instead of base 26 numbers.
12730 * New flag show_question_marks controls printing of leading question
12731 marks in schematic variable names.
12733 * In schematic variable names, *any* symbol following \<^isub> or
12734 \<^isup> is now treated as part of the base name. For example, the
12735 following works without printing of awkward ".0" indexes:
12737 lemma "x\<^isub>1 = x\<^isub>2 ==> x\<^isub>2 = x\<^isub>1"
12740 * Inner syntax includes (*(*nested*) comments*).
12742 * Pretty printer now supports unbreakable blocks, specified in mixfix
12743 annotations as "(00...)".
12745 * Clear separation of logical types and nonterminals, where the latter
12746 may only occur in 'syntax' specifications or type abbreviations.
12747 Before that distinction was only partially implemented via type class
12748 "logic" vs. "{}". Potential INCOMPATIBILITY in rare cases of improper
12749 use of 'types'/'consts' instead of 'nonterminals'/'syntax'. Some very
12750 exotic syntax specifications may require further adaption
12751 (e.g. Cube/Cube.thy).
12753 * Removed obsolete type class "logic", use the top sort {} instead.
12754 Note that non-logical types should be declared as 'nonterminals'
12755 rather than 'types'. INCOMPATIBILITY for new object-logic
12758 * Attributes 'induct' and 'cases': type or set names may now be
12759 locally fixed variables as well.
12761 * Simplifier: can now control the depth to which conditional rewriting
12762 is traced via the PG menu Isabelle -> Settings -> Trace Simp Depth
12765 * Simplifier: simplification procedures may now take the current
12766 simpset into account (cf. Simplifier.simproc(_i) / mk_simproc
12767 interface), which is very useful for calling the Simplifier
12768 recursively. Minor INCOMPATIBILITY: the 'prems' argument of simprocs
12769 is gone -- use prems_of_ss on the simpset instead. Moreover, the
12770 low-level mk_simproc no longer applies Logic.varify internally, to
12771 allow for use in a context of fixed variables.
12773 * thin_tac now works even if the assumption being deleted contains !!
12774 or ==>. More generally, erule now works even if the major premise of
12775 the elimination rule contains !! or ==>.
12777 * Method 'rules' has been renamed to 'iprover'. INCOMPATIBILITY.
12779 * Reorganized bootstrapping of the Pure theories; CPure is now derived
12780 from Pure, which contains all common declarations already. Both
12781 theories are defined via plain Isabelle/Isar .thy files.
12782 INCOMPATIBILITY: elements of CPure (such as the CPure.intro /
12783 CPure.elim / CPure.dest attributes) now appear in the Pure name space;
12784 use isatool fixcpure to adapt your theory and ML sources.
12786 * New syntax 'name(i-j, i-, i, ...)' for referring to specific
12787 selections of theorems in named facts via index ranges.
12789 * 'print_theorems': in theory mode, really print the difference
12790 wrt. the last state (works for interactive theory development only),
12791 in proof mode print all local facts (cf. 'print_facts');
12793 * 'hide': option '(open)' hides only base names.
12795 * More efficient treatment of intermediate checkpoints in interactive
12796 theory development.
12798 * Code generator is now invoked via code_module (incremental code
12799 generation) and code_library (modular code generation, ML structures
12800 for each theory). INCOMPATIBILITY: new keywords 'file' and 'contains'
12801 must be quoted when used as identifiers.
12803 * New 'value' command for reading, evaluating and printing terms using
12804 the code generator. INCOMPATIBILITY: command keyword 'value' must be
12805 quoted when used as identifier.
12810 * New commands for the interpretation of locale expressions in
12811 theories (1), locales (2) and proof contexts (3). These generate
12812 proof obligations from the expression specification. After the
12813 obligations have been discharged, theorems of the expression are added
12814 to the theory, target locale or proof context. The synopsis of the
12815 commands is a follows:
12817 (1) interpretation expr inst
12818 (2) interpretation target < expr
12819 (3) interpret expr inst
12821 Interpretation in theories and proof contexts require a parameter
12822 instantiation of terms from the current context. This is applied to
12823 specifications and theorems of the interpreted expression.
12824 Interpretation in locales only permits parameter renaming through the
12825 locale expression. Interpretation is smart in that interpretations
12826 that are active already do not occur in proof obligations, neither are
12827 instantiated theorems stored in duplicate. Use 'print_interps' to
12828 inspect active interpretations of a particular locale. For details,
12829 see the Isar Reference manual. Examples can be found in
12830 HOL/Finite_Set.thy and HOL/Algebra/UnivPoly.thy.
12832 INCOMPATIBILITY: former 'instantiate' has been withdrawn, use
12833 'interpret' instead.
12835 * New context element 'constrains' for adding type constraints to
12838 * Context expressions: renaming of parameters with syntax
12841 * Locale declaration: 'includes' disallowed.
12843 * Proper static binding of attribute syntax -- i.e. types / terms /
12844 facts mentioned as arguments are always those of the locale definition
12845 context, independently of the context of later invocations. Moreover,
12846 locale operations (renaming and type / term instantiation) are applied
12847 to attribute arguments as expected.
12849 INCOMPATIBILITY of the ML interface: always pass Attrib.src instead of
12850 actual attributes; rare situations may require Attrib.attribute to
12851 embed those attributes into Attrib.src that lack concrete syntax.
12852 Attribute implementations need to cooperate properly with the static
12853 binding mechanism. Basic parsers Args.XXX_typ/term/prop and
12854 Attrib.XXX_thm etc. already do the right thing without further
12855 intervention. Only unusual applications -- such as "where" or "of"
12856 (cf. src/Pure/Isar/attrib.ML), which process arguments depending both
12857 on the context and the facts involved -- may have to assign parsed
12858 values to argument tokens explicitly.
12860 * Changed parameter management in theorem generation for long goal
12861 statements with 'includes'. INCOMPATIBILITY: produces a different
12862 theorem statement in rare situations.
12864 * Locale inspection command 'print_locale' omits notes elements. Use
12865 'print_locale!' to have them included in the output.
12870 * Provers/hypsubst.ML: improved version of the subst method, for
12871 single-step rewriting: it now works in bound variable contexts. New is
12872 'subst (asm)', for rewriting an assumption. INCOMPATIBILITY: may
12873 rewrite a different subterm than the original subst method, which is
12874 still available as 'simplesubst'.
12876 * Provers/quasi.ML: new transitivity reasoners for transitivity only
12879 * Provers/trancl.ML: new transitivity reasoner for transitive and
12880 reflexive-transitive closure of relations.
12882 * Provers/blast.ML: new reference depth_limit to make blast's depth
12883 limit (previously hard-coded with a value of 20) user-definable.
12885 * Provers/simplifier.ML has been moved to Pure, where Simplifier.setup
12886 is peformed already. Object-logics merely need to finish their
12887 initial simpset configuration as before. INCOMPATIBILITY.
12892 * Symbolic syntax of Hilbert Choice Operator is now as follows:
12895 "_Eps" :: "[pttrn, bool] => 'a" ("(3\<some>_./ _)" [0, 10] 10)
12897 The symbol \<some> is displayed as the alternative epsilon of LaTeX
12898 and x-symbol; use option '-m epsilon' to get it actually printed.
12899 Moreover, the mathematically important symbolic identifier \<epsilon>
12900 becomes available as variable, constant etc. INCOMPATIBILITY,
12902 * "x > y" abbreviates "y < x" and "x >= y" abbreviates "y <= x".
12903 Similarly for all quantifiers: "ALL x > y" etc. The x-symbol for >=
12904 is \<ge>. New transitivity rules have been added to HOL/Orderings.thy to
12905 support corresponding Isar calculations.
12907 * "{x:A. P}" abbreviates "{x. x:A & P}", and similarly for "\<in>"
12910 * theory SetInterval: changed the syntax for open intervals:
12919 The old syntax is still supported but will disappear in the next
12920 release. For conversion use the following Emacs search and replace
12921 patterns (these are not perfect but work quite well):
12923 {)\([^\.]*\)\.\. -> {\1<\.\.}
12924 \.\.\([^(}]*\)(} -> \.\.<\1}
12926 * Theory Commutative_Ring (in Library): method comm_ring for proving
12927 equalities in commutative rings; method 'algebra' provides a generic
12930 * Theory Finite_Set: changed the syntax for 'setsum', summation over
12931 finite sets: "setsum (%x. e) A", which used to be "\<Sum>x:A. e", is
12932 now either "SUM x:A. e" or "\<Sum>x \<in> A. e". The bound variable can
12933 be a tuple pattern.
12935 Some new syntax forms are available:
12937 "\<Sum>x | P. e" for "setsum (%x. e) {x. P}"
12938 "\<Sum>x = a..b. e" for "setsum (%x. e) {a..b}"
12939 "\<Sum>x = a..<b. e" for "setsum (%x. e) {a..<b}"
12940 "\<Sum>x < k. e" for "setsum (%x. e) {..<k}"
12942 The latter form "\<Sum>x < k. e" used to be based on a separate
12943 function "Summation", which has been discontinued.
12945 * theory Finite_Set: in structured induction proofs, the insert case
12946 is now 'case (insert x F)' instead of the old counterintuitive 'case
12949 * The 'refute' command has been extended to support a much larger
12950 fragment of HOL, including axiomatic type classes, constdefs and
12951 typedefs, inductive datatypes and recursion.
12953 * New tactics 'sat' and 'satx' to prove propositional tautologies.
12954 Requires zChaff with proof generation to be installed. See
12955 HOL/ex/SAT_Examples.thy for examples.
12957 * Datatype induction via method 'induct' now preserves the name of the
12958 induction variable. For example, when proving P(xs::'a list) by
12959 induction on xs, the induction step is now P(xs) ==> P(a#xs) rather
12960 than P(list) ==> P(a#list) as previously. Potential INCOMPATIBILITY
12961 in unstructured proof scripts.
12963 * Reworked implementation of records. Improved scalability for
12964 records with many fields, avoiding performance problems for type
12965 inference. Records are no longer composed of nested field types, but
12966 of nested extension types. Therefore the record type only grows linear
12967 in the number of extensions and not in the number of fields. The
12968 top-level (users) view on records is preserved. Potential
12969 INCOMPATIBILITY only in strange cases, where the theory depends on the
12970 old record representation. The type generated for a record is called
12971 <record_name>_ext_type.
12973 Flag record_quick_and_dirty_sensitive can be enabled to skip the
12974 proofs triggered by a record definition or a simproc (if
12975 quick_and_dirty is enabled). Definitions of large records can take
12978 New simproc record_upd_simproc for simplification of multiple record
12979 updates enabled by default. Moreover, trivial updates are also
12980 removed: r(|x := x r|) = r. INCOMPATIBILITY: old proofs break
12981 occasionally, since simplification is more powerful by default.
12983 * typedef: proper support for polymorphic sets, which contain extra
12984 type-variables in the term.
12986 * Simplifier: automatically reasons about transitivity chains
12987 involving "trancl" (r^+) and "rtrancl" (r^*) by setting up tactics
12988 provided by Provers/trancl.ML as additional solvers. INCOMPATIBILITY:
12989 old proofs break occasionally as simplification may now solve more
12990 goals than previously.
12992 * Simplifier: converts x <= y into x = y if assumption y <= x is
12993 present. Works for all partial orders (class "order"), in particular
12994 numbers and sets. For linear orders (e.g. numbers) it treats ~ x < y
12997 * Simplifier: new simproc for "let x = a in f x". If a is a free or
12998 bound variable or a constant then the let is unfolded. Otherwise
12999 first a is simplified to b, and then f b is simplified to g. If
13000 possible we abstract b from g arriving at "let x = b in h x",
13001 otherwise we unfold the let and arrive at g. The simproc can be
13002 enabled/disabled by the reference use_let_simproc. Potential
13003 INCOMPATIBILITY since simplification is more powerful by default.
13005 * Classical reasoning: the meson method now accepts theorems as arguments.
13007 * Prover support: pre-release of the Isabelle-ATP linkup, which runs background
13008 jobs to provide advice on the provability of subgoals.
13010 * Theory OrderedGroup and Ring_and_Field: various additions and
13011 improvements to faciliate calculations involving equalities and
13014 The following theorems have been eliminated or modified
13017 abs_eq now named abs_of_nonneg
13018 abs_of_ge_0 now named abs_of_nonneg
13019 abs_minus_eq now named abs_of_nonpos
13020 imp_abs_id now named abs_of_nonneg
13021 imp_abs_neg_id now named abs_of_nonpos
13022 mult_pos now named mult_pos_pos
13023 mult_pos_le now named mult_nonneg_nonneg
13024 mult_pos_neg_le now named mult_nonneg_nonpos
13025 mult_pos_neg2_le now named mult_nonneg_nonpos2
13026 mult_neg now named mult_neg_neg
13027 mult_neg_le now named mult_nonpos_nonpos
13029 * The following lemmas in Ring_and_Field have been added to the simplifier:
13032 not_square_less_zero
13034 The following lemmas have been deleted from Real/RealPow:
13044 * Theory Parity: added rules for simplifying exponents.
13048 The following theorems have been eliminated or modified
13051 list_all_Nil now named list_all.simps(1)
13052 list_all_Cons now named list_all.simps(2)
13053 list_all_conv now named list_all_iff
13054 set_mem_eq now named mem_iff
13056 * Theories SetsAndFunctions and BigO (see HOL/Library) support
13057 asymptotic "big O" calculations. See the notes in BigO.thy.
13060 *** HOL-Complex ***
13062 * Theory RealDef: better support for embedding natural numbers and
13063 integers in the reals.
13065 The following theorems have been eliminated or modified
13068 exp_ge_add_one_self now requires no hypotheses
13069 real_of_int_add reversed direction of equality (use [symmetric])
13070 real_of_int_minus reversed direction of equality (use [symmetric])
13071 real_of_int_diff reversed direction of equality (use [symmetric])
13072 real_of_int_mult reversed direction of equality (use [symmetric])
13074 * Theory RComplete: expanded support for floor and ceiling functions.
13076 * Theory Ln is new, with properties of the natural logarithm
13078 * Hyperreal: There is a new type constructor "star" for making
13079 nonstandard types. The old type names are now type synonyms:
13081 hypreal = real star
13083 hcomplex = complex star
13085 * Hyperreal: Many groups of similarly-defined constants have been
13086 replaced by polymorphic versions (INCOMPATIBILITY):
13088 star_of <-- hypreal_of_real, hypnat_of_nat, hcomplex_of_complex
13090 starset <-- starsetNat, starsetC
13091 *s* <-- *sNat*, *sc*
13092 starset_n <-- starsetNat_n, starsetC_n
13093 *sn* <-- *sNatn*, *scn*
13094 InternalSets <-- InternalNatSets, InternalCSets
13096 starfun <-- starfun{Nat,Nat2,C,RC,CR}
13097 *f* <-- *fNat*, *fNat2*, *fc*, *fRc*, *fcR*
13098 starfun_n <-- starfun{Nat,Nat2,C,RC,CR}_n
13099 *fn* <-- *fNatn*, *fNat2n*, *fcn*, *fRcn*, *fcRn*
13100 InternalFuns <-- InternalNatFuns, InternalNatFuns2, Internal{C,RC,CR}Funs
13102 * Hyperreal: Many type-specific theorems have been removed in favor of
13103 theorems specific to various axiomatic type classes (INCOMPATIBILITY):
13105 add_commute <-- {hypreal,hypnat,hcomplex}_add_commute
13106 add_assoc <-- {hypreal,hypnat,hcomplex}_add_assocs
13107 OrderedGroup.add_0 <-- {hypreal,hypnat,hcomplex}_add_zero_left
13108 OrderedGroup.add_0_right <-- {hypreal,hcomplex}_add_zero_right
13109 right_minus <-- hypreal_add_minus
13110 left_minus <-- {hypreal,hcomplex}_add_minus_left
13111 mult_commute <-- {hypreal,hypnat,hcomplex}_mult_commute
13112 mult_assoc <-- {hypreal,hypnat,hcomplex}_mult_assoc
13113 mult_1_left <-- {hypreal,hypnat}_mult_1, hcomplex_mult_one_left
13114 mult_1_right <-- hcomplex_mult_one_right
13115 mult_zero_left <-- hcomplex_mult_zero_left
13116 left_distrib <-- {hypreal,hypnat,hcomplex}_add_mult_distrib
13117 right_distrib <-- hypnat_add_mult_distrib2
13118 zero_neq_one <-- {hypreal,hypnat,hcomplex}_zero_not_eq_one
13119 right_inverse <-- hypreal_mult_inverse
13120 left_inverse <-- hypreal_mult_inverse_left, hcomplex_mult_inv_left
13121 order_refl <-- {hypreal,hypnat}_le_refl
13122 order_trans <-- {hypreal,hypnat}_le_trans
13123 order_antisym <-- {hypreal,hypnat}_le_anti_sym
13124 order_less_le <-- {hypreal,hypnat}_less_le
13125 linorder_linear <-- {hypreal,hypnat}_le_linear
13126 add_left_mono <-- {hypreal,hypnat}_add_left_mono
13127 mult_strict_left_mono <-- {hypreal,hypnat}_mult_less_mono2
13128 add_nonneg_nonneg <-- hypreal_le_add_order
13130 * Hyperreal: Separate theorems having to do with type-specific
13131 versions of constants have been merged into theorems that apply to the
13132 new polymorphic constants (INCOMPATIBILITY):
13134 STAR_UNIV_set <-- {STAR_real,NatStar_real,STARC_complex}_set
13135 STAR_empty_set <-- {STAR,NatStar,STARC}_empty_set
13136 STAR_Un <-- {STAR,NatStar,STARC}_Un
13137 STAR_Int <-- {STAR,NatStar,STARC}_Int
13138 STAR_Compl <-- {STAR,NatStar,STARC}_Compl
13139 STAR_subset <-- {STAR,NatStar,STARC}_subset
13140 STAR_mem <-- {STAR,NatStar,STARC}_mem
13141 STAR_mem_Compl <-- {STAR,STARC}_mem_Compl
13142 STAR_diff <-- {STAR,STARC}_diff
13143 STAR_star_of_image_subset <-- {STAR_hypreal_of_real, NatStar_hypreal_of_real,
13144 STARC_hcomplex_of_complex}_image_subset
13145 starset_n_Un <-- starset{Nat,C}_n_Un
13146 starset_n_Int <-- starset{Nat,C}_n_Int
13147 starset_n_Compl <-- starset{Nat,C}_n_Compl
13148 starset_n_diff <-- starset{Nat,C}_n_diff
13149 InternalSets_Un <-- Internal{Nat,C}Sets_Un
13150 InternalSets_Int <-- Internal{Nat,C}Sets_Int
13151 InternalSets_Compl <-- Internal{Nat,C}Sets_Compl
13152 InternalSets_diff <-- Internal{Nat,C}Sets_diff
13153 InternalSets_UNIV_diff <-- Internal{Nat,C}Sets_UNIV_diff
13154 InternalSets_starset_n <-- Internal{Nat,C}Sets_starset{Nat,C}_n
13155 starset_starset_n_eq <-- starset{Nat,C}_starset{Nat,C}_n_eq
13156 starset_n_starset <-- starset{Nat,C}_n_starset{Nat,C}
13157 starfun_n_starfun <-- starfun{Nat,Nat2,C,RC,CR}_n_starfun{Nat,Nat2,C,RC,CR}
13158 starfun <-- starfun{Nat,Nat2,C,RC,CR}
13159 starfun_mult <-- starfun{Nat,Nat2,C,RC,CR}_mult
13160 starfun_add <-- starfun{Nat,Nat2,C,RC,CR}_add
13161 starfun_minus <-- starfun{Nat,Nat2,C,RC,CR}_minus
13162 starfun_diff <-- starfun{C,RC,CR}_diff
13163 starfun_o <-- starfun{NatNat2,Nat2,_stafunNat,C,C_starfunRC,_starfunCR}_o
13164 starfun_o2 <-- starfun{NatNat2,_stafunNat,C,C_starfunRC,_starfunCR}_o2
13165 starfun_const_fun <-- starfun{Nat,Nat2,C,RC,CR}_const_fun
13166 starfun_inverse <-- starfun{Nat,C,RC,CR}_inverse
13167 starfun_eq <-- starfun{Nat,Nat2,C,RC,CR}_eq
13168 starfun_eq_iff <-- starfun{C,RC,CR}_eq_iff
13169 starfun_Id <-- starfunC_Id
13170 starfun_approx <-- starfun{Nat,CR}_approx
13171 starfun_capprox <-- starfun{C,RC}_capprox
13172 starfun_abs <-- starfunNat_rabs
13173 starfun_lambda_cancel <-- starfun{C,CR,RC}_lambda_cancel
13174 starfun_lambda_cancel2 <-- starfun{C,CR,RC}_lambda_cancel2
13175 starfun_mult_HFinite_approx <-- starfunCR_mult_HFinite_capprox
13176 starfun_mult_CFinite_capprox <-- starfun{C,RC}_mult_CFinite_capprox
13177 starfun_add_capprox <-- starfun{C,RC}_add_capprox
13178 starfun_add_approx <-- starfunCR_add_approx
13179 starfun_inverse_inverse <-- starfunC_inverse_inverse
13180 starfun_divide <-- starfun{C,CR,RC}_divide
13181 starfun_n <-- starfun{Nat,C}_n
13182 starfun_n_mult <-- starfun{Nat,C}_n_mult
13183 starfun_n_add <-- starfun{Nat,C}_n_add
13184 starfun_n_add_minus <-- starfunNat_n_add_minus
13185 starfun_n_const_fun <-- starfun{Nat,C}_n_const_fun
13186 starfun_n_minus <-- starfun{Nat,C}_n_minus
13187 starfun_n_eq <-- starfun{Nat,C}_n_eq
13189 star_n_add <-- {hypreal,hypnat,hcomplex}_add
13190 star_n_minus <-- {hypreal,hcomplex}_minus
13191 star_n_diff <-- {hypreal,hcomplex}_diff
13192 star_n_mult <-- {hypreal,hcomplex}_mult
13193 star_n_inverse <-- {hypreal,hcomplex}_inverse
13194 star_n_le <-- {hypreal,hypnat}_le
13195 star_n_less <-- {hypreal,hypnat}_less
13196 star_n_zero_num <-- {hypreal,hypnat,hcomplex}_zero_num
13197 star_n_one_num <-- {hypreal,hypnat,hcomplex}_one_num
13198 star_n_abs <-- hypreal_hrabs
13199 star_n_divide <-- hcomplex_divide
13201 star_of_add <-- {hypreal_of_real,hypnat_of_nat,hcomplex_of_complex}_add
13202 star_of_minus <-- {hypreal_of_real,hcomplex_of_complex}_minus
13203 star_of_diff <-- hypreal_of_real_diff
13204 star_of_mult <-- {hypreal_of_real,hypnat_of_nat,hcomplex_of_complex}_mult
13205 star_of_one <-- {hypreal_of_real,hcomplex_of_complex}_one
13206 star_of_zero <-- {hypreal_of_real,hypnat_of_nat,hcomplex_of_complex}_zero
13207 star_of_le <-- {hypreal_of_real,hypnat_of_nat}_le_iff
13208 star_of_less <-- {hypreal_of_real,hypnat_of_nat}_less_iff
13209 star_of_eq <-- {hypreal_of_real,hypnat_of_nat,hcomplex_of_complex}_eq_iff
13210 star_of_inverse <-- {hypreal_of_real,hcomplex_of_complex}_inverse
13211 star_of_divide <-- {hypreal_of_real,hcomplex_of_complex}_divide
13212 star_of_of_nat <-- {hypreal_of_real,hcomplex_of_complex}_of_nat
13213 star_of_of_int <-- {hypreal_of_real,hcomplex_of_complex}_of_int
13214 star_of_number_of <-- {hypreal,hcomplex}_number_of
13215 star_of_number_less <-- number_of_less_hypreal_of_real_iff
13216 star_of_number_le <-- number_of_le_hypreal_of_real_iff
13217 star_of_eq_number <-- hypreal_of_real_eq_number_of_iff
13218 star_of_less_number <-- hypreal_of_real_less_number_of_iff
13219 star_of_le_number <-- hypreal_of_real_le_number_of_iff
13220 star_of_power <-- hypreal_of_real_power
13221 star_of_eq_0 <-- hcomplex_of_complex_zero_iff
13223 * Hyperreal: new method "transfer" that implements the transfer
13224 principle of nonstandard analysis. With a subgoal that mentions
13225 nonstandard types like "'a star", the command "apply transfer"
13226 replaces it with an equivalent one that mentions only standard types.
13227 To be successful, all free variables must have standard types; non-
13228 standard variables must have explicit universal quantifiers.
13230 * Hyperreal: A theory of Taylor series.
13235 * Discontinued special version of 'constdefs' (which used to support
13236 continuous functions) in favor of the general Pure one with full
13239 * New simplification procedure for solving continuity conditions; it
13240 is much faster on terms with many nested lambda abstractions (cubic
13241 instead of exponential time).
13243 * New syntax for domain package: selector names are now optional.
13244 Parentheses should be omitted unless argument is lazy, for example:
13246 domain 'a stream = cons "'a" (lazy "'a stream")
13248 * New command 'fixrec' for defining recursive functions with pattern
13249 matching; defining multiple functions with mutual recursion is also
13250 supported. Patterns may include the constants cpair, spair, up, sinl,
13251 sinr, or any data constructor defined by the domain package. The given
13252 equations are proven as rewrite rules. See HOLCF/ex/Fixrec_ex.thy for
13253 syntax and examples.
13255 * New commands 'cpodef' and 'pcpodef' for defining predicate subtypes
13256 of cpo and pcpo types. Syntax is exactly like the 'typedef' command,
13257 but the proof obligation additionally includes an admissibility
13258 requirement. The packages generate instances of class cpo or pcpo,
13259 with continuity and strictness theorems for Rep and Abs.
13261 * HOLCF: Many theorems have been renamed according to a more standard naming
13262 scheme (INCOMPATIBILITY):
13264 foo_inject: "foo$x = foo$y ==> x = y"
13265 foo_eq: "(foo$x = foo$y) = (x = y)"
13266 foo_less: "(foo$x << foo$y) = (x << y)"
13267 foo_strict: "foo$UU = UU"
13268 foo_defined: "... ==> foo$x ~= UU"
13269 foo_defined_iff: "(foo$x = UU) = (x = UU)"
13274 * ZF/ex: theories Group and Ring provide examples in abstract algebra,
13275 including the First Isomorphism Theorem (on quotienting by the kernel
13276 of a homomorphism).
13278 * ZF/Simplifier: install second copy of type solver that actually
13279 makes use of TC rules declared to Isar proof contexts (or locales);
13280 the old version is still required for ML proof scripts.
13285 * Converted to Isar theory format; use locales instead of axiomatic
13291 * Pure/library.ML: added ##>, ##>>, #>> -- higher-order counterparts
13292 for ||>, ||>>, |>>,
13294 * Pure/library.ML no longer defines its own option datatype, but uses
13295 that of the SML basis, which has constructors NONE and SOME instead of
13296 None and Some, as well as exception Option.Option instead of OPTION.
13297 The functions the, if_none, is_some, is_none have been adapted
13298 accordingly, while Option.map replaces apsome.
13300 * Pure/library.ML: the exception LIST has been given up in favour of
13301 the standard exceptions Empty and Subscript, as well as
13302 Library.UnequalLengths. Function like Library.hd and Library.tl are
13303 superceded by the standard hd and tl functions etc.
13305 A number of basic list functions are no longer exported to the ML
13306 toplevel, as they are variants of predefined functions. The following
13307 suggests how one can translate existing code:
13309 rev_append xs ys = List.revAppend (xs, ys)
13310 nth_elem (i, xs) = List.nth (xs, i)
13311 last_elem xs = List.last xs
13312 flat xss = List.concat xss
13313 seq fs = List.app fs
13314 partition P xs = List.partition P xs
13315 mapfilter f xs = List.mapPartial f xs
13317 * Pure/library.ML: several combinators for linear functional
13318 transformations, notably reverse application and composition:
13321 (x, y) |-> f f #-> g
13323 * Pure/library.ML: introduced/changed precedence of infix operators:
13325 infix 1 |> |-> ||> ||>> |>> |>>> #> #->;
13327 infix 3 o oo ooo oooo;
13328 infix 4 ~~ upto downto;
13330 Maybe INCOMPATIBILITY when any of those is used in conjunction with other
13333 * Pure/library.ML: natural list combinators fold, fold_rev, and
13334 fold_map support linear functional transformations and nesting. For
13337 fold f [x1, ..., xN] y =
13338 y |> f x1 |> ... |> f xN
13340 (fold o fold) f [xs1, ..., xsN] y =
13341 y |> fold f xs1 |> ... |> fold f xsN
13343 fold f [x1, ..., xN] =
13344 f x1 #> ... #> f xN
13346 (fold o fold) f [xs1, ..., xsN] =
13347 fold f xs1 #> ... #> fold f xsN
13349 * Pure/library.ML: the following selectors on type 'a option are
13352 the: 'a option -> 'a (*partial*)
13353 these: 'a option -> 'a where 'a = 'b list
13354 the_default: 'a -> 'a option -> 'a
13355 the_list: 'a option -> 'a list
13357 * Pure/General: structure AList (cf. Pure/General/alist.ML) provides
13358 basic operations for association lists, following natural argument
13359 order; moreover the explicit equality predicate passed here avoids
13360 potentially expensive polymorphic runtime equality checks.
13361 The old functions may be expressed as follows:
13363 assoc = uncurry (AList.lookup (op =))
13364 assocs = these oo AList.lookup (op =)
13365 overwrite = uncurry (AList.update (op =)) o swap
13367 * Pure/General: structure AList (cf. Pure/General/alist.ML) provides
13369 val make: ('a -> 'b) -> 'a list -> ('a * 'b) list
13370 val find: ('a * 'b -> bool) -> ('c * 'b) list -> 'a -> 'c list
13372 replacing make_keylist and keyfilter (occassionally used)
13375 make_keylist = AList.make
13376 keyfilter = AList.find (op =)
13378 * eq_fst and eq_snd now take explicit equality parameter, thus
13379 avoiding eqtypes. Naive rewrites:
13381 eq_fst = eq_fst (op =)
13382 eq_snd = eq_snd (op =)
13384 * Removed deprecated apl and apr (rarely used).
13387 apl (n, op) =>>= curry op n
13388 apr (op, m) =>>= fn n => op (n, m)
13390 * Pure/General: structure OrdList (cf. Pure/General/ord_list.ML)
13391 provides a reasonably efficient light-weight implementation of sets as
13394 * Pure/General: generic tables (cf. Pure/General/table.ML) provide a
13395 few new operations; existing lookup and update are now curried to
13396 follow natural argument order (for use with fold etc.);
13397 INCOMPATIBILITY, use (uncurry Symtab.lookup) etc. as last resort.
13399 * Pure/General: output via the Isabelle channels of
13400 writeln/warning/error etc. is now passed through Output.output, with a
13401 hook for arbitrary transformations depending on the print_mode
13402 (cf. Output.add_mode -- the first active mode that provides a output
13403 function wins). Already formatted output may be embedded into further
13404 text via Output.raw; the result of Pretty.string_of/str_of and derived
13405 functions (string_of_term/cterm/thm etc.) is already marked raw to
13406 accommodate easy composition of diagnostic messages etc. Programmers
13407 rarely need to care about Output.output or Output.raw at all, with
13408 some notable exceptions: Output.output is required when bypassing the
13409 standard channels (writeln etc.), or in token translations to produce
13410 properly formatted results; Output.raw is required when capturing
13411 already output material that will eventually be presented to the user
13412 a second time. For the default print mode, both Output.output and
13413 Output.raw have no effect.
13415 * Pure/General: Output.time_accumulator NAME creates an operator ('a
13416 -> 'b) -> 'a -> 'b to measure runtime and count invocations; the
13417 cumulative results are displayed at the end of a batch session.
13419 * Pure/General: File.sysify_path and File.quote_sysify path have been
13420 replaced by File.platform_path and File.shell_path (with appropriate
13421 hooks). This provides a clean interface for unusual systems where the
13422 internal and external process view of file names are different.
13424 * Pure: more efficient orders for basic syntactic entities: added
13425 fast_string_ord, fast_indexname_ord, fast_term_ord; changed sort_ord
13426 and typ_ord to use fast_string_ord and fast_indexname_ord (term_ord is
13427 NOT affected); structures Symtab, Vartab, Typtab, Termtab use the fast
13428 orders now -- potential INCOMPATIBILITY for code that depends on a
13429 particular order for Symtab.keys, Symtab.dest, etc. (consider using
13430 Library.sort_strings on result).
13432 * Pure/term.ML: combinators fold_atyps, fold_aterms, fold_term_types,
13433 fold_types traverse types/terms from left to right, observing natural
13434 argument order. Supercedes previous foldl_XXX versions, add_frees,
13435 add_vars etc. have been adapted as well: INCOMPATIBILITY.
13437 * Pure: name spaces have been refined, with significant changes of the
13438 internal interfaces -- INCOMPATIBILITY. Renamed cond_extern(_table)
13439 to extern(_table). The plain name entry path is superceded by a
13440 general 'naming' context, which also includes the 'policy' to produce
13441 a fully qualified name and external accesses of a fully qualified
13442 name; NameSpace.extend is superceded by context dependent
13443 Sign.declare_name. Several theory and proof context operations modify
13444 the naming context. Especially note Theory.restore_naming and
13445 ProofContext.restore_naming to get back to a sane state; note that
13446 Theory.add_path is no longer sufficient to recover from
13447 Theory.absolute_path in particular.
13449 * Pure: new flags short_names (default false) and unique_names
13450 (default true) for controlling output of qualified names. If
13451 short_names is set, names are printed unqualified. If unique_names is
13452 reset, the name prefix is reduced to the minimum required to achieve
13453 the original result when interning again, even if there is an overlap
13454 with earlier declarations.
13456 * Pure/TheoryDataFun: change of the argument structure; 'prep_ext' is
13457 now 'extend', and 'merge' gets an additional Pretty.pp argument
13458 (useful for printing error messages). INCOMPATIBILITY.
13460 * Pure: major reorganization of the theory context. Type Sign.sg and
13461 Theory.theory are now identified, referring to the universal
13462 Context.theory (see Pure/context.ML). Actual signature and theory
13463 content is managed as theory data. The old code and interfaces were
13464 spread over many files and structures; the new arrangement introduces
13465 considerable INCOMPATIBILITY to gain more clarity:
13467 Context -- theory management operations (name, identity, inclusion,
13468 parents, ancestors, merge, etc.), plus generic theory data;
13470 Sign -- logical signature and syntax operations (declaring consts,
13471 types, etc.), plus certify/read for common entities;
13473 Theory -- logical theory operations (stating axioms, definitions,
13474 oracles), plus a copy of logical signature operations (consts,
13475 types, etc.); also a few basic management operations (Theory.copy,
13476 Theory.merge, etc.)
13478 The most basic sign_of operations (Theory.sign_of, Thm.sign_of_thm
13479 etc.) as well as the sign field in Thm.rep_thm etc. have been retained
13480 for convenience -- they merely return the theory.
13482 * Pure: type Type.tsig is superceded by theory in most interfaces.
13484 * Pure: the Isar proof context type is already defined early in Pure
13485 as Context.proof (note that ProofContext.context and Proof.context are
13486 aliases, where the latter is the preferred name). This enables other
13487 Isabelle components to refer to that type even before Isar is present.
13489 * Pure/sign/theory: discontinued named name spaces (i.e. classK,
13490 typeK, constK, axiomK, oracleK), but provide explicit operations for
13491 any of these kinds. For example, Sign.intern typeK is now
13492 Sign.intern_type, Theory.hide_space Sign.typeK is now
13493 Theory.hide_types. Also note that former
13494 Theory.hide_classes/types/consts are now
13495 Theory.hide_classes_i/types_i/consts_i, while the non '_i' versions
13496 internalize their arguments! INCOMPATIBILITY.
13498 * Pure: get_thm interface (of PureThy and ProofContext) expects
13499 datatype thmref (with constructors Name and NameSelection) instead of
13500 plain string -- INCOMPATIBILITY;
13502 * Pure: cases produced by proof methods specify options, where NONE
13503 means to remove case bindings -- INCOMPATIBILITY in
13504 (RAW_)METHOD_CASES.
13506 * Pure: the following operations retrieve axioms or theorems from a
13507 theory node or theory hierarchy, respectively:
13509 Theory.axioms_of: theory -> (string * term) list
13510 Theory.all_axioms_of: theory -> (string * term) list
13511 PureThy.thms_of: theory -> (string * thm) list
13512 PureThy.all_thms_of: theory -> (string * thm) list
13514 * Pure: print_tac now outputs the goal through the trace channel.
13516 * Isar toplevel: improved diagnostics, mostly for Poly/ML only.
13517 Reference Toplevel.debug (default false) controls detailed printing
13518 and tracing of low-level exceptions; Toplevel.profiling (default 0)
13519 controls execution profiling -- set to 1 for time and 2 for space
13520 (both increase the runtime).
13522 * Isar session: The initial use of ROOT.ML is now always timed,
13523 i.e. the log will show the actual process times, in contrast to the
13524 elapsed wall-clock time that the outer shell wrapper produces.
13526 * Simplifier: improved handling of bound variables (nameless
13527 representation, avoid allocating new strings). Simprocs that invoke
13528 the Simplifier recursively should use Simplifier.inherit_bounds to
13529 avoid local name clashes. Failure to do so produces warnings
13530 "Simplifier: renamed bound variable ..."; set Simplifier.debug_bounds
13531 for further details.
13533 * ML functions legacy_bindings and use_legacy_bindings produce ML fact
13534 bindings for all theorems stored within a given theory; this may help
13535 in porting non-Isar theories to Isar ones, while keeping ML proof
13536 scripts for the time being.
13538 * ML operator HTML.with_charset specifies the charset begin used for
13539 generated HTML files. For example:
13541 HTML.with_charset "utf-8" use_thy "Hebrew";
13542 HTML.with_charset "utf-8" use_thy "Chinese";
13547 * Allow symlinks to all proper Isabelle executables (Isabelle,
13548 isabelle, isatool etc.).
13550 * ISABELLE_DOC_FORMAT setting specifies preferred document format (for
13551 isatool doc, isatool mkdir, display_drafts etc.).
13553 * isatool usedir: option -f allows specification of the ML file to be
13554 used by Isabelle; default is ROOT.ML.
13556 * New isatool version outputs the version identifier of the Isabelle
13557 distribution being used.
13559 * HOL: new isatool dimacs2hol converts files in DIMACS CNF format
13560 (containing Boolean satisfiability problems) into Isabelle/HOL
13565 New in Isabelle2004 (April 2004)
13566 --------------------------------
13570 * Provers/order.ML: new efficient reasoner for partial and linear orders.
13571 Replaces linorder.ML.
13573 * Pure: Greek letters (except small lambda, \<lambda>), as well as Gothic
13574 (\<aa>...\<zz>\<AA>...\<ZZ>), calligraphic (\<A>...\<Z>), and Euler
13575 (\<a>...\<z>), are now considered normal letters, and can therefore
13576 be used anywhere where an ASCII letter (a...zA...Z) has until
13577 now. COMPATIBILITY: This obviously changes the parsing of some
13578 terms, especially where a symbol has been used as a binder, say
13579 '\<Pi>x. ...', which is now a type error since \<Pi>x will be parsed
13580 as an identifier. Fix it by inserting a space around former
13581 symbols. Call 'isatool fixgreek' to try to fix parsing errors in
13582 existing theory and ML files.
13584 * Pure: Macintosh and Windows line-breaks are now allowed in theory files.
13586 * Pure: single letter sub/superscripts (\<^isub> and \<^isup>) are now
13587 allowed in identifiers. Similar to Greek letters \<^isub> is now considered
13588 a normal (but invisible) letter. For multiple letter subscripts repeat
13589 \<^isub> like this: x\<^isub>1\<^isub>2.
13591 * Pure: There are now sub-/superscripts that can span more than one
13592 character. Text between \<^bsub> and \<^esub> is set in subscript in
13593 ProofGeneral and LaTeX, text between \<^bsup> and \<^esup> in
13594 superscript. The new control characters are not identifier parts.
13596 * Pure: Control-symbols of the form \<^raw:...> will literally print the
13597 content of "..." to the latex file instead of \isacntrl... . The "..."
13598 may consist of any printable characters excluding the end bracket >.
13600 * Pure: Using new Isar command "finalconsts" (or the ML functions
13601 Theory.add_finals or Theory.add_finals_i) it is now possible to
13602 declare constants "final", which prevents their being given a definition
13603 later. It is useful for constants whose behaviour is fixed axiomatically
13604 rather than definitionally, such as the meta-logic connectives.
13606 * Pure: 'instance' now handles general arities with general sorts
13607 (i.e. intersections of classes),
13609 * Presentation: generated HTML now uses a CSS style sheet to make layout
13610 (somewhat) independent of content. It is copied from lib/html/isabelle.css.
13611 It can be changed to alter the colors/layout of generated pages.
13616 * Tactic emulation methods rule_tac, erule_tac, drule_tac, frule_tac,
13617 cut_tac, subgoal_tac and thin_tac:
13618 - Now understand static (Isar) contexts. As a consequence, users of Isar
13619 locales are no longer forced to write Isar proof scripts.
13620 For details see Isar Reference Manual, paragraph 4.3.2: Further tactic
13622 - INCOMPATIBILITY: names of variables to be instantiated may no
13623 longer be enclosed in quotes. Instead, precede variable name with `?'.
13624 This is consistent with the instantiation attribute "where".
13626 * Attributes "where" and "of":
13627 - Now take type variables of instantiated theorem into account when reading
13628 the instantiation string. This fixes a bug that caused instantiated
13629 theorems to have too special types in some circumstances.
13630 - "where" permits explicit instantiations of type variables.
13632 * Calculation commands "moreover" and "also" no longer interfere with
13633 current facts ("this"), admitting arbitrary combinations with "then"
13637 - Goal statements involving the context element "includes" no longer
13638 generate theorems with internal delta predicates (those ending on
13639 "_axioms") in the premise.
13640 Resolve particular premise with <locale>.intro to obtain old form.
13641 - Fixed bug in type inference ("unify_frozen") that prevented mix of target
13642 specification and "includes" elements in goal statement.
13643 - Rule sets <locale>.intro and <locale>.axioms no longer declared as
13644 [intro?] and [elim?] (respectively) by default.
13645 - Experimental command for instantiation of locales in proof contexts:
13646 instantiate <label>[<attrs>]: <loc>
13647 Instantiates locale <loc> and adds all its theorems to the current context
13648 taking into account their attributes. Label and attrs are optional
13649 modifiers, like in theorem declarations. If present, names of
13650 instantiated theorems are qualified with <label>, and the attributes
13651 <attrs> are applied after any attributes these theorems might have already.
13652 If the locale has assumptions, a chained fact of the form
13653 "<loc> t1 ... tn" is expected from which instantiations of the parameters
13654 are derived. The command does not support old-style locales declared
13655 with "locale (open)".
13656 A few (very simple) examples can be found in FOL/ex/LocaleInst.thy.
13658 * HOL: Tactic emulation methods induct_tac and case_tac understand static
13664 * Proof import: new image HOL4 contains the imported library from
13665 the HOL4 system with about 2500 theorems. It is imported by
13666 replaying proof terms produced by HOL4 in Isabelle. The HOL4 image
13667 can be used like any other Isabelle image. See
13668 HOL/Import/HOL/README for more information.
13671 - Much improved handling of linear and partial orders.
13672 Reasoners for linear and partial orders are set up for type classes
13673 "linorder" and "order" respectively, and are added to the default simpset
13674 as solvers. This means that the simplifier can build transitivity chains
13675 to solve goals from the assumptions.
13676 - INCOMPATIBILITY: old proofs break occasionally. Typically, applications
13677 of blast or auto after simplification become unnecessary because the goal
13678 is solved by simplification already.
13680 * Numerics: new theory Ring_and_Field contains over 250 basic numerical laws,
13681 all proved in axiomatic type classes for semirings, rings and fields.
13684 - Numeric types (nat, int, and in HOL-Complex rat, real, complex, etc.) are
13685 now formalized using the Ring_and_Field theory mentioned above.
13686 - INCOMPATIBILITY: simplification and arithmetic behaves somewhat differently
13687 than before, because now they are set up once in a generic manner.
13688 - INCOMPATIBILITY: many type-specific arithmetic laws have gone.
13689 Look for the general versions in Ring_and_Field (and Power if they concern
13692 * Type "rat" of the rational numbers is now available in HOL-Complex.
13695 - Record types are now by default printed with their type abbreviation
13696 instead of the list of all field types. This can be configured via
13697 the reference "print_record_type_abbr".
13698 - Simproc "record_upd_simproc" for simplification of multiple updates added
13699 (not enabled by default).
13700 - Simproc "record_ex_sel_eq_simproc" to simplify EX x. sel r = x resp.
13701 EX x. x = sel r to True (not enabled by default).
13702 - Tactic "record_split_simp_tac" to split and simplify records added.
13704 * 'specification' command added, allowing for definition by
13705 specification. There is also an 'ax_specification' command that
13706 introduces the new constants axiomatically.
13708 * arith(_tac) is now able to generate counterexamples for reals as well.
13710 * HOL-Algebra: new locale "ring" for non-commutative rings.
13712 * HOL-ex: InductiveInvariant_examples illustrates advanced recursive function
13713 definitions, thanks to Sava Krsti\'{c} and John Matthews.
13715 * HOL-Matrix: a first theory for matrices in HOL with an application of
13716 matrix theory to linear programming.
13718 * Unions and Intersections:
13719 The latex output syntax of UN and INT has been changed
13720 from "\Union x \in A. B" to "\Union_{x \in A} B"
13721 i.e. the index formulae has become a subscript.
13722 Similarly for "\Union x. B", and for \Inter instead of \Union.
13724 * Unions and Intersections over Intervals:
13725 There is new short syntax "UN i<=n. A" for "UN i:{0..n}. A". There is
13726 also an x-symbol version with subscripts "\<Union>\<^bsub>i <= n\<^esub>. A"
13727 like in normal math, and corresponding versions for < and for intersection.
13729 * HOL/List: Ordering "lexico" is renamed "lenlex" and the standard
13730 lexicographic dictonary ordering has been added as "lexord".
13732 * ML: the legacy theory structures Int and List have been removed. They had
13733 conflicted with ML Basis Library structures having the same names.
13735 * 'refute' command added to search for (finite) countermodels. Only works
13736 for a fragment of HOL. The installation of an external SAT solver is
13737 highly recommended. See "HOL/Refute.thy" for details.
13739 * 'quickcheck' command: Allows to find counterexamples by evaluating
13740 formulae under an assignment of free variables to random values.
13741 In contrast to 'refute', it can deal with inductive datatypes,
13742 but cannot handle quantifiers. See "HOL/ex/Quickcheck_Examples.thy"
13748 * Streams now come with concatenation and are part of the HOLCF image
13752 New in Isabelle2003 (May 2003)
13753 ------------------------------
13757 * Provers/simplifier:
13759 - Completely reimplemented method simp (ML: Asm_full_simp_tac):
13760 Assumptions are now subject to complete mutual simplification,
13761 not just from left to right. The simplifier now preserves
13762 the order of assumptions.
13764 Potential INCOMPATIBILITY:
13766 -- simp sometimes diverges where the old version did
13767 not, e.g. invoking simp on the goal
13769 [| P (f x); y = x; f x = f y |] ==> Q
13771 now gives rise to the infinite reduction sequence
13773 P(f x) --(f x = f y)--> P(f y) --(y = x)--> P(f x) --(f x = f y)--> ...
13775 Using "simp (asm_lr)" (ML: Asm_lr_simp_tac) instead often solves this
13778 -- Tactics combining classical reasoner and simplification (such as auto)
13779 are also affected by this change, because many of them rely on
13780 simp. They may sometimes diverge as well or yield a different numbers
13781 of subgoals. Try to use e.g. force, fastsimp, or safe instead of auto
13782 in case of problems. Sometimes subsequent calls to the classical
13783 reasoner will fail because a preceeding call to the simplifier too
13784 eagerly simplified the goal, e.g. deleted redundant premises.
13786 - The simplifier trace now shows the names of the applied rewrite rules
13788 - You can limit the number of recursive invocations of the simplifier
13789 during conditional rewriting (where the simplifie tries to solve the
13790 conditions before applying the rewrite rule):
13791 ML "simp_depth_limit := n"
13792 where n is an integer. Thus you can force termination where previously
13793 the simplifier would diverge.
13795 - Accepts free variables as head terms in congruence rules. Useful in Isar.
13797 - No longer aborts on failed congruence proof. Instead, the
13798 congruence is ignored.
13800 * Pure: New generic framework for extracting programs from constructive
13801 proofs. See HOL/Extraction.thy for an example instantiation, as well
13802 as HOL/Extraction for some case studies.
13804 * Pure: The main goal of the proof state is no longer shown by default, only
13805 the subgoals. This behaviour is controlled by a new flag.
13806 PG menu: Isabelle/Isar -> Settings -> Show Main Goal
13807 (ML: Proof.show_main_goal).
13809 * Pure: You can find all matching introduction rules for subgoal 1, i.e. all
13810 rules whose conclusion matches subgoal 1:
13811 PG menu: Isabelle/Isar -> Show me -> matching rules
13812 The rules are ordered by how closely they match the subgoal.
13813 In particular, rules that solve a subgoal outright are displayed first
13814 (or rather last, the way they are printed).
13815 (ML: ProofGeneral.print_intros())
13817 * Pure: New flag trace_unify_fail causes unification to print
13818 diagnostic information (PG: in trace buffer) when it fails. This is
13819 useful for figuring out why single step proofs like rule, erule or
13822 * Pure: Locale specifications now produce predicate definitions
13823 according to the body of text (covering assumptions modulo local
13824 definitions); predicate "loc_axioms" covers newly introduced text,
13825 while "loc" is cumulative wrt. all included locale expressions; the
13826 latter view is presented only on export into the global theory
13827 context; potential INCOMPATIBILITY, use "(open)" option to fall back
13828 on the old view without predicates;
13830 * Pure: predefined locales "var" and "struct" are useful for sharing
13831 parameters (as in CASL, for example); just specify something like
13832 ``var x + var y + struct M'' as import;
13834 * Pure: improved thms_containing: proper indexing of facts instead of
13835 raw theorems; check validity of results wrt. current name space;
13836 include local facts of proof configuration (also covers active
13837 locales), cover fixed variables in index; may use "_" in term
13838 specification; an optional limit for the number of printed facts may
13839 be given (the default is 40);
13841 * Pure: disallow duplicate fact bindings within new-style theory files
13844 * Provers: improved induct method: assumptions introduced by case
13845 "foo" are split into "foo.hyps" (from the rule) and "foo.prems" (from
13846 the goal statement); "foo" still refers to all facts collectively;
13848 * Provers: the function blast.overloaded has been removed: all constants
13849 are regarded as potentially overloaded, which improves robustness in exchange
13850 for slight decrease in efficiency;
13852 * Provers/linorder: New generic prover for transitivity reasoning over
13853 linear orders. Note: this prover is not efficient!
13855 * Isar: preview of problems to finish 'show' now produce an error
13856 rather than just a warning (in interactive mode);
13863 - Produces a counter example if it cannot prove a goal.
13864 Note that the counter example may be spurious if the goal is not a formula
13865 of quantifier-free linear arithmetic.
13866 In ProofGeneral the counter example appears in the trace buffer.
13868 - Knows about div k and mod k where k is a numeral of type nat or int.
13870 - Calls full Presburger arithmetic (by Amine Chaieb) if quantifier-free
13871 linear arithmetic fails. This takes account of quantifiers and divisibility.
13872 Presburger arithmetic can also be called explicitly via presburger(_tac).
13874 * simp's arithmetic capabilities have been enhanced a bit: it now
13875 takes ~= in premises into account (by performing a case split);
13877 * simp reduces "m*(n div m) + n mod m" to n, even if the two summands
13878 are distributed over a sum of terms;
13880 * New tactic "trans_tac" and method "trans" instantiate
13881 Provers/linorder.ML for axclasses "order" and "linorder" (predicates
13882 "<=", "<" and "=").
13884 * function INCOMPATIBILITIES: Pi-sets have been redefined and moved from main
13885 HOL to Library/FuncSet; constant "Fun.op o" is now called "Fun.comp";
13887 * 'typedef' command has new option "open" to suppress the set
13890 * functions Min and Max on finite sets have been introduced (theory
13893 * attribute [symmetric] now works for relations as well; it turns
13894 (x,y) : R^-1 into (y,x) : R, and vice versa;
13896 * induct over a !!-quantified statement (say !!x1..xn):
13897 each "case" automatically performs "fix x1 .. xn" with exactly those names.
13899 * Map: `empty' is no longer a constant but a syntactic abbreviation for
13900 %x. None. Warning: empty_def now refers to the previously hidden definition
13903 * Algebra: formalization of classical algebra. Intended as base for
13904 any algebraic development in Isabelle. Currently covers group theory
13905 (up to Sylow's theorem) and ring theory (Universal Property of
13906 Univariate Polynomials). Contributions welcome;
13908 * GroupTheory: deleted, since its material has been moved to Algebra;
13910 * Complex: new directory of the complex numbers with numeric constants,
13911 nonstandard complex numbers, and some complex analysis, standard and
13912 nonstandard (Jacques Fleuriot);
13914 * HOL-Complex: new image for analysis, replacing HOL-Real and HOL-Hyperreal;
13916 * Hyperreal: introduced Gauge integration and hyperreal logarithms (Jacques
13919 * Real/HahnBanach: updated and adapted to locales;
13921 * NumberTheory: added Gauss's law of quadratic reciprocity (by Avigad,
13924 * UNITY: added the Meier-Sanders theory of progress sets;
13926 * MicroJava: bytecode verifier and lightweight bytecode verifier
13927 as abstract algorithms, instantiated to the JVM;
13929 * Bali: Java source language formalization. Type system, operational
13930 semantics, axiomatic semantics. Supported language features:
13931 classes, interfaces, objects,virtual methods, static methods,
13932 static/instance fields, arrays, access modifiers, definite
13933 assignment, exceptions.
13938 * ZF/Constructible: consistency proof for AC (Gdel's constructible
13941 * Main ZF: virtually all theories converted to new-style format;
13946 * Pure: Tactic.prove provides sane interface for internal proofs;
13947 omits the infamous "standard" operation, so this is more appropriate
13948 than prove_goalw_cterm in many situations (e.g. in simprocs);
13950 * Pure: improved error reporting of simprocs;
13952 * Provers: Simplifier.simproc(_i) provides sane interface for setting
13956 *** Document preparation ***
13958 * uses \par instead of \\ for line breaks in theory text. This may
13959 shift some page breaks in large documents. To get the old behaviour
13960 use \renewcommand{\isanewline}{\mbox{}\\\mbox{}} in root.tex.
13962 * minimized dependencies of isabelle.sty and isabellesym.sty on
13965 * \<euro> now needs package babel/greek instead of marvosym (which
13968 * normal size for \<zero>...\<nine> (uses \mathbf instead of
13973 New in Isabelle2002 (March 2002)
13974 --------------------------------
13976 *** Document preparation ***
13978 * greatly simplified document preparation setup, including more
13979 graceful interpretation of isatool usedir -i/-d/-D options, and more
13980 instructive isatool mkdir; users should basically be able to get
13981 started with "isatool mkdir HOL Test && isatool make"; alternatively,
13982 users may run a separate document processing stage manually like this:
13983 "isatool usedir -D output HOL Test && isatool document Test/output";
13985 * theory dependency graph may now be incorporated into documents;
13986 isatool usedir -g true will produce session_graph.eps/.pdf for use
13987 with \includegraphics of LaTeX;
13989 * proper spacing of consecutive markup elements, especially text
13990 blocks after section headings;
13992 * support bold style (for single symbols only), input syntax is like
13993 this: "\<^bold>\<alpha>" or "\<^bold>A";
13995 * \<bullet> is now output as bold \cdot by default, which looks much
13996 better in printed text;
13998 * added default LaTeX bindings for \<tturnstile> and \<TTurnstile>;
13999 note that these symbols are currently unavailable in Proof General /
14000 X-Symbol; new symbols \<zero>, \<one>, ..., \<nine>, and \<euro>;
14002 * isatool latex no longer depends on changed TEXINPUTS, instead
14003 isatool document copies the Isabelle style files to the target
14009 * Pure/Provers: improved proof by cases and induction;
14010 - 'case' command admits impromptu naming of parameters (such as
14012 - 'induct' method divinates rule instantiation from the inductive
14013 claim; no longer requires excessive ?P bindings for proper
14014 instantiation of cases;
14015 - 'induct' method properly enumerates all possibilities of set/type
14016 rules; as a consequence facts may be also passed through *type*
14017 rules without further ado;
14018 - 'induct' method now derives symbolic cases from the *rulified*
14019 rule (before it used to rulify cases stemming from the internal
14020 atomized version); this means that the context of a non-atomic
14021 statement becomes is included in the hypothesis, avoiding the
14022 slightly cumbersome show "PROP ?case" form;
14023 - 'induct' may now use elim-style induction rules without chaining
14024 facts, using ``missing'' premises from the goal state; this allows
14025 rules stemming from inductive sets to be applied in unstructured
14026 scripts, while still benefitting from proper handling of non-atomic
14027 statements; NB: major inductive premises need to be put first, all
14028 the rest of the goal is passed through the induction;
14029 - 'induct' proper support for mutual induction involving non-atomic
14030 rule statements (uses the new concept of simultaneous goals, see
14032 - append all possible rule selections, but only use the first
14033 success (no backtracking);
14034 - removed obsolete "(simplified)" and "(stripped)" options of methods;
14035 - undeclared rule case names default to numbers 1, 2, 3, ...;
14036 - added 'print_induct_rules' (covered by help item in recent Proof
14038 - moved induct/cases attributes to Pure, methods to Provers;
14039 - generic method setup instantiated for FOL and HOL;
14041 * Pure: support multiple simultaneous goal statements, for example
14042 "have a: A and b: B" (same for 'theorem' etc.); being a pure
14043 meta-level mechanism, this acts as if several individual goals had
14044 been stated separately; in particular common proof methods need to be
14045 repeated in order to cover all claims; note that a single elimination
14046 step is *not* sufficient to establish the two conjunctions, so this
14049 assume "A & B" then have A and B .. (*".." fails*)
14051 better use "obtain" in situations as above; alternative refer to
14052 multi-step methods like 'auto', 'simp_all', 'blast+' etc.;
14054 * Pure: proper integration with ``locales''; unlike the original
14055 version by Florian Kammller, Isar locales package high-level proof
14056 contexts rather than raw logical ones (e.g. we admit to include
14057 attributes everywhere); operations on locales include merge and
14058 rename; support for implicit arguments (``structures''); simultaneous
14059 type-inference over imports and text; see also HOL/ex/Locales.thy for
14062 * Pure: the following commands have been ``localized'', supporting a
14063 target locale specification "(in name)": 'lemma', 'theorem',
14064 'corollary', 'lemmas', 'theorems', 'declare'; the results will be
14065 stored both within the locale and at the theory level (exported and
14066 qualified by the locale name);
14068 * Pure: theory goals may now be specified in ``long'' form, with
14069 ad-hoc contexts consisting of arbitrary locale elements. for example
14070 ``lemma foo: fixes x assumes "A x" shows "B x"'' (local syntax and
14071 definitions may be given, too); the result is a meta-level rule with
14072 the context elements being discharged in the obvious way;
14074 * Pure: new proof command 'using' allows to augment currently used
14075 facts after a goal statement ('using' is syntactically analogous to
14076 'apply', but acts on the goal's facts only); this allows chained facts
14077 to be separated into parts given before and after a claim, as in
14078 ``from a and b have C using d and e <proof>'';
14080 * Pure: renamed "antecedent" case to "rule_context";
14082 * Pure: new 'judgment' command records explicit information about the
14083 object-logic embedding (used by several tools internally); no longer
14084 use hard-wired "Trueprop";
14086 * Pure: added 'corollary' command;
14088 * Pure: fixed 'token_translation' command;
14090 * Pure: removed obsolete 'exported' attribute;
14092 * Pure: dummy pattern "_" in is/let is now automatically lifted over
14093 bound variables: "ALL x. P x --> Q x" (is "ALL x. _ --> ?C x")
14094 supersedes more cumbersome ... (is "ALL x. _ x --> ?C x");
14096 * Pure: method 'atomize' presents local goal premises as object-level
14097 statements (atomic meta-level propositions); setup controlled via
14098 rewrite rules declarations of 'atomize' attribute; example
14099 application: 'induct' method with proper rule statements in improper
14102 * Pure: emulation of instantiation tactics (rule_tac, cut_tac, etc.)
14103 now consider the syntactic context of assumptions, giving a better
14104 chance to get type-inference of the arguments right (this is
14105 especially important for locales);
14107 * Pure: "sorry" no longer requires quick_and_dirty in interactive
14110 * Pure/obtain: the formal conclusion "thesis", being marked as
14111 ``internal'', may no longer be reference directly in the text;
14112 potential INCOMPATIBILITY, may need to use "?thesis" in rare
14115 * Pure: generic 'sym' attribute which declares a rule both as pure
14116 'elim?' and for the 'symmetric' operation;
14118 * Pure: marginal comments ``--'' may now occur just anywhere in the
14119 text; the fixed correlation with particular command syntax has been
14122 * Pure: new method 'rules' is particularly well-suited for proof
14123 search in intuitionistic logic; a bit slower than 'blast' or 'fast',
14124 but often produces more compact proof terms with less detours;
14126 * Pure/Provers/classical: simplified integration with pure rule
14127 attributes and methods; the classical "intro?/elim?/dest?"
14128 declarations coincide with the pure ones; the "rule" method no longer
14129 includes classically swapped intros; "intro" and "elim" methods no
14130 longer pick rules from the context; also got rid of ML declarations
14131 AddXIs/AddXEs/AddXDs; all of this has some potential for
14134 * Provers/classical: attribute 'swapped' produces classical inversions
14135 of introduction rules;
14137 * Provers/simplifier: 'simplified' attribute may refer to explicit
14138 rules instead of full simplifier context; 'iff' attribute handles
14141 * HOL: 'typedef' now allows alternative names for Rep/Abs morphisms;
14143 * HOL: 'recdef' now fails on unfinished automated proofs, use
14144 "(permissive)" option to recover old behavior;
14146 * HOL: 'inductive' no longer features separate (collective) attributes
14147 for 'intros' (was found too confusing);
14149 * HOL: properly declared induction rules less_induct and
14155 * HOL: moved over to sane numeral syntax; the new policy is as
14158 - 0 and 1 are polymorphic constants, which are defined on any
14159 numeric type (nat, int, real etc.);
14161 - 2, 3, 4, ... and -1, -2, -3, ... are polymorphic numerals, based
14162 binary representation internally;
14164 - type nat has special constructor Suc, and generally prefers Suc 0
14165 over 1::nat and Suc (Suc 0) over 2::nat;
14167 This change may cause significant problems of INCOMPATIBILITY; here
14168 are some hints on converting existing sources:
14170 - due to the new "num" token, "-0" and "-1" etc. are now atomic
14171 entities, so expressions involving "-" (unary or binary minus) need
14172 to be spaced properly;
14174 - existing occurrences of "1" may need to be constraint "1::nat" or
14175 even replaced by Suc 0; similar for old "2";
14177 - replace "#nnn" by "nnn", and "#-nnn" by "-nnn";
14179 - remove all special provisions on numerals in proofs;
14181 * HOL: simp rules nat_number expand numerals on nat to Suc/0
14182 representation (depends on bin_arith_simps in the default context);
14184 * HOL: symbolic syntax for x^2 (numeral 2);
14186 * HOL: the class of all HOL types is now called "type" rather than
14187 "term"; INCOMPATIBILITY, need to adapt references to this type class
14188 in axclass/classes, instance/arities, and (usually rare) occurrences
14189 in typings (of consts etc.); internally the class is called
14190 "HOL.type", ML programs should refer to HOLogic.typeS;
14192 * HOL/record package improvements:
14193 - new derived operations "fields" to build a partial record section,
14194 "extend" to promote a fixed record to a record scheme, and
14195 "truncate" for the reverse; cf. theorems "xxx.defs", which are *not*
14196 declared as simp by default;
14197 - shared operations ("more", "fields", etc.) now need to be always
14198 qualified) --- potential INCOMPATIBILITY;
14199 - removed "make_scheme" operations (use "make" with "extend") --
14201 - removed "more" class (simply use "term") -- INCOMPATIBILITY;
14202 - provides cases/induct rules for use with corresponding Isar
14203 methods (for concrete records, record schemes, concrete more
14204 parts, and schematic more parts -- in that order);
14205 - internal definitions directly based on a light-weight abstract
14206 theory of product types over typedef rather than datatype;
14208 * HOL: generic code generator for generating executable ML code from
14209 specifications; specific support for HOL constructs such as inductive
14210 datatypes and sets, as well as recursive functions; can be invoked
14211 via 'generate_code' theory section;
14213 * HOL: canonical cases/induct rules for n-tuples (n = 3..7);
14215 * HOL: consolidated and renamed several theories. In particular:
14216 Ord.thy has been absorbed into HOL.thy
14217 String.thy has been absorbed into List.thy
14219 * HOL: concrete setsum syntax "\<Sum>i:A. b" == "setsum (%i. b) A"
14220 (beware of argument permutation!);
14222 * HOL: linorder_less_split superseded by linorder_cases;
14224 * HOL/List: "nodups" renamed to "distinct";
14226 * HOL: added "The" definite description operator; move Hilbert's "Eps"
14227 to peripheral theory "Hilbert_Choice"; some INCOMPATIBILITIES:
14228 - Ex_def has changed, now need to use some_eq_ex
14230 * HOL: made split_all_tac safe; EXISTING PROOFS MAY FAIL OR LOOP, so
14231 in this (rare) case use:
14233 delSWrapper "split_all_tac"
14234 addSbefore ("unsafe_split_all_tac", unsafe_split_all_tac)
14236 * HOL: added safe wrapper "split_conv_tac" to claset; EXISTING PROOFS
14239 * HOL: introduced f^n = f o ... o f; warning: due to the limits of
14240 Isabelle's type classes, ^ on functions and relations has too general
14241 a domain, namely ('a * 'b) set and 'a => 'b; this means that it may be
14242 necessary to attach explicit type constraints;
14244 * HOL/Relation: the prefix name of the infix "O" has been changed from
14245 "comp" to "rel_comp"; INCOMPATIBILITY: a few theorems have been
14246 renamed accordingly (eg "compI" -> "rel_compI").
14248 * HOL: syntax translations now work properly with numerals and records
14251 * HOL: bounded abstraction now uses syntax "%" / "\<lambda>" instead
14252 of "lam" -- INCOMPATIBILITY;
14254 * HOL: got rid of some global declarations (potential INCOMPATIBILITY
14255 for ML tools): const "()" renamed "Product_Type.Unity", type "unit"
14256 renamed "Product_Type.unit";
14258 * HOL: renamed rtrancl_into_rtrancl2 to converse_rtrancl_into_rtrancl
14260 * HOL: removed obsolete theorem "optionE" (use "option.exhaust", or
14261 the "cases" method);
14263 * HOL/GroupTheory: group theory examples including Sylow's theorem (by
14266 * HOL/IMP: updated and converted to new-style theory format; several
14267 parts turned into readable document, with proper Isar proof texts and
14268 some explanations (by Gerwin Klein);
14270 * HOL-Real: added Complex_Numbers (by Gertrud Bauer);
14272 * HOL-Hyperreal is now a logic image;
14277 * Isar: consts/constdefs supports mixfix syntax for continuous
14280 * Isar: domain package adapted to new-style theory format, e.g. see
14283 * theory Lift: proper use of rep_datatype lift instead of ML hacks --
14284 potential INCOMPATIBILITY; now use plain induct_tac instead of former
14285 lift.induct_tac, always use UU instead of Undef;
14287 * HOLCF/IMP: updated and converted to new-style theory;
14292 * Isar: proper integration of logic-specific tools and packages,
14293 including theory commands '(co)inductive', '(co)datatype',
14294 'rep_datatype', 'inductive_cases', as well as methods 'ind_cases',
14295 'induct_tac', 'case_tac', and 'typecheck' (with attribute 'TC');
14297 * theory Main no longer includes AC; for the Axiom of Choice, base
14298 your theory on Main_ZFC;
14300 * the integer library now covers quotients and remainders, with many
14301 laws relating division to addition, multiplication, etc.;
14303 * ZF/UNITY: Chandy and Misra's UNITY is now available in ZF, giving a
14304 typeless version of the formalism;
14306 * ZF/AC, Coind, IMP, Resid: updated and converted to new-style theory
14309 * ZF/Induct: new directory for examples of inductive definitions,
14310 including theory Multiset for multiset orderings; converted to
14311 new-style theory format;
14313 * ZF: many new theorems about lists, ordinals, etc.;
14318 * Pure/kernel: meta-level proof terms (by Stefan Berghofer); reference
14319 variable proof controls level of detail: 0 = no proofs (only oracle
14320 dependencies), 1 = lemma dependencies, 2 = compact proof terms; see
14321 also ref manual for further ML interfaces;
14323 * Pure/axclass: removed obsolete ML interface
14324 goal_subclass/goal_arity;
14326 * Pure/syntax: new token syntax "num" for plain numerals (without "#"
14327 of "xnum"); potential INCOMPATIBILITY, since -0, -1 etc. are now
14328 separate tokens, so expressions involving minus need to be spaced
14331 * Pure/syntax: support non-oriented infixes, using keyword "infix"
14332 rather than "infixl" or "infixr";
14334 * Pure/syntax: concrete syntax for dummy type variables admits genuine
14335 sort constraint specifications in type inference; e.g. "x::_::foo"
14336 ensures that the type of "x" is of sort "foo" (but not necessarily a
14339 * Pure/syntax: print modes "type_brackets" and "no_type_brackets"
14340 control output of nested => (types); the default behavior is
14343 * Pure/syntax: builtin parse translation for "_constify" turns valued
14344 tokens into AST constants;
14346 * Pure/syntax: prefer later declarations of translations and print
14347 translation functions; potential INCOMPATIBILITY: need to reverse
14348 multiple declarations for same syntax element constant;
14350 * Pure/show_hyps reset by default (in accordance to existing Isar
14353 * Provers/classical: renamed addaltern to addafter, addSaltern to
14356 * Provers/clasimp: ``iff'' declarations now handle conditional rules
14359 * system: tested support for MacOS X; should be able to get Isabelle +
14360 Proof General to work in a plain Terminal after installing Poly/ML
14361 (e.g. from the Isabelle distribution area) and GNU bash alone
14362 (e.g. from http://www.apple.com); full X11, XEmacs and X-Symbol
14363 support requires further installations, e.g. from
14364 http://fink.sourceforge.net/);
14366 * system: support Poly/ML 4.1.1 (able to manage larger heaps);
14368 * system: reduced base memory usage by Poly/ML (approx. 20 MB instead
14369 of 40 MB), cf. ML_OPTIONS;
14371 * system: Proof General keywords specification is now part of the
14372 Isabelle distribution (see etc/isar-keywords.el);
14374 * system: support for persistent Proof General sessions (refrain from
14375 outdating all loaded theories on startup); user may create writable
14376 logic images like this: ``isabelle -q HOL Test'';
14378 * system: smart selection of Isabelle process versus Isabelle
14379 interface, accommodates case-insensitive file systems (e.g. HFS+); may
14380 run both "isabelle" and "Isabelle" even if file names are badly
14381 damaged (executable inspects the case of the first letter of its own
14382 name); added separate "isabelle-process" and "isabelle-interface";
14384 * system: refrain from any attempt at filtering input streams; no
14385 longer support ``8bit'' encoding of old isabelle font, instead proper
14386 iso-latin characters may now be used; the related isatools
14387 "symbolinput" and "nonascii" have disappeared as well;
14389 * system: removed old "xterm" interface (the print modes "xterm" and
14390 "xterm_color" are still available for direct use in a suitable
14395 New in Isabelle99-2 (February 2001)
14396 -----------------------------------
14398 *** Overview of INCOMPATIBILITIES ***
14400 * HOL: please note that theories in the Library and elsewhere often use the
14401 new-style (Isar) format; to refer to their theorems in an ML script you must
14402 bind them to ML identifers by e.g. val thm_name = thm "thm_name";
14404 * HOL: inductive package no longer splits induction rule aggressively,
14405 but only as far as specified by the introductions given; the old
14406 format may be recovered via ML function complete_split_rule or attribute
14407 'split_rule (complete)';
14409 * HOL: induct renamed to lfp_induct, lfp_Tarski to lfp_unfold,
14410 gfp_Tarski to gfp_unfold;
14412 * HOL: contrapos, contrapos2 renamed to contrapos_nn, contrapos_pp;
14414 * HOL: infix "dvd" now has priority 50 rather than 70 (because it is a
14415 relation); infix "^^" has been renamed "``"; infix "``" has been
14416 renamed "`"; "univalent" has been renamed "single_valued";
14418 * HOL/Real: "rinv" and "hrinv" replaced by overloaded "inverse"
14421 * HOLCF: infix "`" has been renamed "$"; the symbol syntax is \<cdot>;
14423 * Isar: 'obtain' no longer declares "that" fact as simp/intro;
14425 * Isar/HOL: method 'induct' now handles non-atomic goals; as a
14426 consequence, it is no longer monotonic wrt. the local goal context
14427 (which is now passed through the inductive cases);
14429 * Document preparation: renamed standard symbols \<ll> to \<lless> and
14430 \<gg> to \<ggreater>;
14433 *** Document preparation ***
14435 * \isabellestyle{NAME} selects version of Isabelle output (currently
14436 available: are "it" for near math-mode best-style output, "sl" for
14437 slanted text style, and "tt" for plain type-writer; if no
14438 \isabellestyle command is given, output is according to slanted
14441 * support sub/super scripts (for single symbols only), input syntax is
14442 like this: "A\<^sup>*" or "A\<^sup>\<star>";
14444 * some more standard symbols; see Appendix A of the system manual for
14445 the complete list of symbols defined in isabellesym.sty;
14447 * improved isabelle style files; more abstract symbol implementation
14448 (should now use \isamath{...} and \isatext{...} in custom symbol
14451 * antiquotation @{goals} and @{subgoals} for output of *dynamic* goals
14452 state; Note that presentation of goal states does not conform to
14453 actual human-readable proof documents. Please do not include goal
14454 states into document output unless you really know what you are doing!
14456 * proper indentation of antiquoted output with proportional LaTeX
14459 * no_document ML operator temporarily disables LaTeX document
14462 * isatool unsymbolize tunes sources for plain ASCII communication;
14467 * Pure: Isar now suffers initial goal statements to contain unbound
14468 schematic variables (this does not conform to actual readable proof
14469 documents, due to unpredictable outcome and non-compositional proof
14470 checking); users who know what they are doing may use schematic goals
14471 for Prolog-style synthesis of proven results;
14473 * Pure: assumption method (an implicit finishing) now handles actual
14476 * Pure: improved 'obtain' --- moved to Pure, insert "that" into
14477 initial goal, declare "that" only as Pure intro (only for single
14478 steps); the "that" rule assumption may now be involved in implicit
14479 finishing, thus ".." becomes a feasible for trivial obtains;
14481 * Pure: default proof step now includes 'intro_classes'; thus trivial
14482 instance proofs may be performed by "..";
14484 * Pure: ?thesis / ?this / "..." now work for pure meta-level
14485 statements as well;
14487 * Pure: more robust selection of calculational rules;
14489 * Pure: the builtin notion of 'finished' goal now includes the ==-refl
14490 rule (as well as the assumption rule);
14492 * Pure: 'thm_deps' command visualizes dependencies of theorems and
14493 lemmas, using the graph browser tool;
14495 * Pure: predict failure of "show" in interactive mode;
14497 * Pure: 'thms_containing' now takes actual terms as arguments;
14499 * HOL: improved method 'induct' --- now handles non-atomic goals
14500 (potential INCOMPATIBILITY); tuned error handling;
14502 * HOL: cases and induct rules now provide explicit hints about the
14503 number of facts to be consumed (0 for "type" and 1 for "set" rules);
14504 any remaining facts are inserted into the goal verbatim;
14506 * HOL: local contexts (aka cases) may now contain term bindings as
14507 well; the 'cases' and 'induct' methods new provide a ?case binding for
14508 the result to be shown in each case;
14510 * HOL: added 'recdef_tc' command;
14512 * isatool convert assists in eliminating legacy ML scripts;
14517 * HOL/Library: a collection of generic theories to be used together
14518 with main HOL; the theory loader path already includes this directory
14519 by default; the following existing theories have been moved here:
14520 HOL/Induct/Multiset, HOL/Induct/Acc (as Accessible_Part), HOL/While
14521 (as While_Combinator), HOL/Lex/Prefix (as List_Prefix);
14523 * HOL/Unix: "Some aspects of Unix file-system security", a typical
14524 modelling and verification task performed in Isabelle/HOL +
14525 Isabelle/Isar + Isabelle document preparation (by Markus Wenzel).
14527 * HOL/Algebra: special summation operator SUM no longer exists, it has
14528 been replaced by setsum; infix 'assoc' now has priority 50 (like
14529 'dvd'); axiom 'one_not_zero' has been moved from axclass 'ring' to
14530 'domain', this makes the theory consistent with mathematical
14533 * HOL basics: added overloaded operations "inverse" and "divide"
14534 (infix "/"), syntax for generic "abs" operation, generic summation
14537 * HOL/typedef: simplified package, provide more useful rules (see also
14540 * HOL/datatype: induction rule for arbitrarily branching datatypes is
14541 now expressed as a proper nested rule (old-style tactic scripts may
14542 require atomize_strip_tac to cope with non-atomic premises);
14544 * HOL: renamed theory "Prod" to "Product_Type", renamed "split" rule
14545 to "split_conv" (old name still available for compatibility);
14547 * HOL: improved concrete syntax for strings (e.g. allows translation
14548 rules with string literals);
14550 * HOL-Real-Hyperreal: this extends HOL-Real with the hyperreals
14551 and Fleuriot's mechanization of analysis, including the transcendental
14552 functions for the reals;
14554 * HOL/Real, HOL/Hyperreal: improved arithmetic simplification;
14559 * CTT: x-symbol support for Pi, Sigma, -->, : (membership); note that
14560 "lam" is displayed as TWO lambda-symbols
14562 * CTT: theory Main now available, containing everything (that is, Bool
14568 * Pure: the Simplifier has been implemented properly as a derived rule
14569 outside of the actual kernel (at last!); the overall performance
14570 penalty in practical applications is about 50%, while reliability of
14571 the Isabelle inference kernel has been greatly improved;
14573 * print modes "brackets" and "no_brackets" control output of nested =>
14574 (types) and ==> (props); the default behaviour is "brackets";
14576 * Provers: fast_tac (and friends) now handle actual object-logic rules
14577 as assumptions as well;
14579 * system: support Poly/ML 4.0;
14581 * system: isatool install handles KDE version 1 or 2;
14585 New in Isabelle99-1 (October 2000)
14586 ----------------------------------
14588 *** Overview of INCOMPATIBILITIES ***
14590 * HOL: simplification of natural numbers is much changed; to partly
14591 recover the old behaviour (e.g. to prevent n+n rewriting to #2*n)
14592 issue the following ML commands:
14594 Delsimprocs Nat_Numeral_Simprocs.cancel_numerals;
14595 Delsimprocs [Nat_Numeral_Simprocs.combine_numerals];
14597 * HOL: simplification no longer dives into case-expressions; this is
14598 controlled by "t.weak_case_cong" for each datatype t;
14600 * HOL: nat_less_induct renamed to less_induct;
14602 * HOL: systematic renaming of the SOME (Eps) rules, may use isatool
14603 fixsome to patch .thy and .ML sources automatically;
14605 select_equality -> some_equality
14606 select_eq_Ex -> some_eq_ex
14607 selectI2EX -> someI2_ex
14610 select1_equality -> some1_equality
14611 Eps_sym_eq -> some_sym_eq_trivial
14612 Eps_eq -> some_eq_trivial
14614 * HOL: exhaust_tac on datatypes superceded by new generic case_tac;
14616 * HOL: removed obsolete theorem binding expand_if (refer to split_if
14619 * HOL: the recursion equations generated by 'recdef' are now called
14620 f.simps instead of f.rules;
14622 * HOL: qed_spec_mp now also handles bounded ALL as well;
14624 * HOL: 0 is now overloaded, so the type constraint ":: nat" may
14625 sometimes be needed;
14627 * HOL: the constant for "f``x" is now "image" rather than "op ``";
14629 * HOL: the constant for "f-``x" is now "vimage" rather than "op -``";
14631 * HOL: the disjoint sum is now "<+>" instead of "Plus"; the cartesian
14632 product is now "<*>" instead of "Times"; the lexicographic product is
14633 now "<*lex*>" instead of "**";
14635 * HOL: theory Sexp is now in HOL/Induct examples (it used to be part
14636 of main HOL, but was unused); better use HOL's datatype package;
14638 * HOL: removed "symbols" syntax for constant "override" of theory Map;
14639 the old syntax may be recovered as follows:
14642 override :: "('a ~=> 'b) => ('a ~=> 'b) => ('a ~=> 'b)"
14643 (infixl "\\<oplus>" 100)
14645 * HOL/Real: "rabs" replaced by overloaded "abs" function;
14647 * HOL/ML: even fewer consts are declared as global (see theories Ord,
14648 Lfp, Gfp, WF); this only affects ML packages that refer to const names
14651 * HOL and ZF: syntax for quotienting wrt an equivalence relation
14652 changed from A/r to A//r;
14654 * ZF: new treatment of arithmetic (nat & int) may break some old
14657 * Isar: renamed some attributes (RS -> THEN, simplify -> simplified,
14658 rulify -> rule_format, elimify -> elim_format, ...);
14660 * Isar/Provers: intro/elim/dest attributes changed; renamed
14661 intro/intro!/intro!! flags to intro!/intro/intro? (in most cases, one
14662 should have to change intro!! to intro? only); replaced "delrule" by
14665 * Isar/HOL: renamed "intrs" to "intros" in inductive definitions;
14667 * Provers: strengthened force_tac by using new first_best_tac;
14669 * LaTeX document preparation: several changes of isabelle.sty (see
14673 *** Document preparation ***
14675 * formal comments (text blocks etc.) in new-style theories may now
14676 contain antiquotations of thm/prop/term/typ/text to be presented
14677 according to latex print mode; concrete syntax is like this:
14678 @{term[show_types] "f(x) = a + x"};
14680 * isatool mkdir provides easy setup of Isabelle session directories,
14681 including proper document sources;
14683 * generated LaTeX sources are now deleted after successful run
14684 (isatool document -c); may retain a copy somewhere else via -D option
14687 * isatool usedir -D now lets isatool latex -o sty update the Isabelle
14688 style files, achieving self-contained LaTeX sources and simplifying
14691 * old-style theories now produce (crude) LaTeX output as well;
14693 * browser info session directories are now self-contained (may be put
14694 on WWW server seperately); improved graphs of nested sessions; removed
14695 graph for 'all sessions';
14697 * several improvements in isabelle style files; \isabellestyle{it}
14698 produces fake math mode output; \isamarkupheader is now \section by
14699 default; see lib/texinputs/isabelle.sty etc.;
14704 * Isar/Pure: local results and corresponding term bindings are now
14705 subject to Hindley-Milner polymorphism (similar to ML); this
14706 accommodates incremental type-inference very nicely;
14708 * Isar/Pure: new derived language element 'obtain' supports
14709 generalized existence reasoning;
14711 * Isar/Pure: new calculational elements 'moreover' and 'ultimately'
14712 support accumulation of results, without applying any rules yet;
14713 useful to collect intermediate results without explicit name
14714 references, and for use with transitivity rules with more than 2
14717 * Isar/Pure: scalable support for case-analysis type proofs: new
14718 'case' language element refers to local contexts symbolically, as
14719 produced by certain proof methods; internally, case names are attached
14720 to theorems as "tags";
14722 * Isar/Pure: theory command 'hide' removes declarations from
14723 class/type/const name spaces;
14725 * Isar/Pure: theory command 'defs' supports option "(overloaded)" to
14726 indicate potential overloading;
14728 * Isar/Pure: changed syntax of local blocks from {{ }} to { };
14730 * Isar/Pure: syntax of sorts made 'inner', i.e. have to write
14731 "{a,b,c}" instead of {a,b,c};
14733 * Isar/Pure now provides its own version of intro/elim/dest
14734 attributes; useful for building new logics, but beware of confusion
14735 with the version in Provers/classical;
14737 * Isar/Pure: the local context of (non-atomic) goals is provided via
14738 case name 'antecedent';
14740 * Isar/Pure: removed obsolete 'transfer' attribute (transfer of thms
14741 to the current context is now done automatically);
14743 * Isar/Pure: theory command 'method_setup' provides a simple interface
14744 for definining proof methods in ML;
14746 * Isar/Provers: intro/elim/dest attributes changed; renamed
14747 intro/intro!/intro!! flags to intro!/intro/intro? (INCOMPATIBILITY, in
14748 most cases, one should have to change intro!! to intro? only);
14749 replaced "delrule" by "rule del";
14751 * Isar/Provers: new 'hypsubst' method, plain 'subst' method and
14752 'symmetric' attribute (the latter supercedes [RS sym]);
14754 * Isar/Provers: splitter support (via 'split' attribute and 'simp'
14755 method modifier); 'simp' method: 'only:' modifier removes loopers as
14756 well (including splits);
14758 * Isar/Provers: Simplifier and Classical methods now support all kind
14759 of modifiers used in the past, including 'cong', 'iff', etc.
14761 * Isar/Provers: added 'fastsimp' and 'clarsimp' methods (combination
14762 of Simplifier and Classical reasoner);
14764 * Isar/HOL: new proof method 'cases' and improved version of 'induct'
14765 now support named cases; major packages (inductive, datatype, primrec,
14766 recdef) support case names and properly name parameters;
14768 * Isar/HOL: new transitivity rules for substitution in inequalities --
14769 monotonicity conditions are extracted to be proven at end of
14772 * Isar/HOL: removed 'case_split' thm binding, should use 'cases' proof
14775 * Isar/HOL: removed old expand_if = split_if; theorems if_splits =
14776 split_if split_if_asm; datatype package provides theorems foo.splits =
14777 foo.split foo.split_asm for each datatype;
14779 * Isar/HOL: tuned inductive package, rename "intrs" to "intros"
14780 (potential INCOMPATIBILITY), emulation of mk_cases feature for proof
14781 scripts: new 'inductive_cases' command and 'ind_cases' method; (Note:
14782 use "(cases (simplified))" method in proper proof texts);
14784 * Isar/HOL: added global 'arith_split' attribute for 'arith' method;
14786 * Isar: names of theorems etc. may be natural numbers as well;
14788 * Isar: 'pr' command: optional arguments for goals_limit and
14789 ProofContext.prems_limit; no longer prints theory contexts, but only
14792 * Isar: diagnostic commands 'pr', 'thm', 'prop', 'term', 'typ' admit
14793 additional print modes to be specified; e.g. "pr(latex)" will print
14794 proof state according to the Isabelle LaTeX style;
14796 * Isar: improved support for emulating tactic scripts, including proof
14797 methods 'rule_tac' etc., 'cut_tac', 'thin_tac', 'subgoal_tac',
14798 'rename_tac', 'rotate_tac', 'tactic', and 'case_tac' / 'induct_tac'
14799 (for HOL datatypes);
14801 * Isar: simplified (more robust) goal selection of proof methods: 1st
14802 goal, all goals, or explicit goal specifier (tactic emulation); thus
14803 'proof method scripts' have to be in depth-first order;
14805 * Isar: tuned 'let' syntax: replaced 'as' keyword by 'and';
14807 * Isar: removed 'help' command, which hasn't been too helpful anyway;
14808 should instead use individual commands for printing items
14809 (print_commands, print_methods etc.);
14811 * Isar: added 'nothing' --- the empty list of theorems;
14816 * HOL/MicroJava: formalization of a fragment of Java, together with a
14817 corresponding virtual machine and a specification of its bytecode
14818 verifier and a lightweight bytecode verifier, including proofs of
14819 type-safety; by Gerwin Klein, Tobias Nipkow, David von Oheimb, and
14820 Cornelia Pusch (see also the homepage of project Bali at
14821 http://isabelle.in.tum.de/Bali/);
14823 * HOL/Algebra: new theory of rings and univariate polynomials, by
14826 * HOL/NumberTheory: fundamental Theorem of Arithmetic, Chinese
14827 Remainder Theorem, Fermat/Euler Theorem, Wilson's Theorem, by Thomas M
14830 * HOL/Lattice: fundamental concepts of lattice theory and order
14831 structures, including duals, properties of bounds versus algebraic
14832 laws, lattice operations versus set-theoretic ones, the Knaster-Tarski
14833 Theorem for complete lattices etc.; may also serve as a demonstration
14834 for abstract algebraic reasoning using axiomatic type classes, and
14835 mathematics-style proof in Isabelle/Isar; by Markus Wenzel;
14837 * HOL/Prolog: a (bare-bones) implementation of Lambda-Prolog, by David
14840 * HOL/IMPP: extension of IMP with local variables and mutually
14841 recursive procedures, by David von Oheimb;
14843 * HOL/Lambda: converted into new-style theory and document;
14845 * HOL/ex/Multiquote: example of multiple nested quotations and
14846 anti-quotations -- basically a generalized version of de-Bruijn
14847 representation; very useful in avoiding lifting of operations;
14849 * HOL/record: added general record equality rule to simpset; fixed
14850 select-update simplification procedure to handle extended records as
14851 well; admit "r" as field name;
14853 * HOL: 0 is now overloaded over the new sort "zero", allowing its use with
14854 other numeric types and also as the identity of groups, rings, etc.;
14856 * HOL: new axclass plus_ac0 for addition with the AC-laws and 0 as identity.
14857 Types nat and int belong to this axclass;
14859 * HOL: greatly improved simplification involving numerals of type nat, int, real:
14860 (i + #8 + j) = Suc k simplifies to #7 + (i + j) = k
14861 i*j + k + j*#3*i simplifies to #4*(i*j) + k
14862 two terms #m*u and #n*u are replaced by #(m+n)*u
14863 (where #m, #n and u can implicitly be 1; this is simproc combine_numerals)
14864 and the term/formula #m*u+x ~~ #n*u+y simplifies simplifies to #(m-n)+x ~~ y
14865 or x ~~ #(n-m)+y, where ~~ is one of = < <= or - (simproc cancel_numerals);
14867 * HOL: meson_tac is available (previously in ex/meson.ML); it is a
14868 powerful prover for predicate logic but knows nothing of clasets; see
14869 ex/mesontest.ML and ex/mesontest2.ML for example applications;
14871 * HOL: new version of "case_tac" subsumes both boolean case split and
14872 "exhaust_tac" on datatypes; INCOMPATIBILITY: exhaust_tac no longer
14873 exists, may define val exhaust_tac = case_tac for ad-hoc portability;
14875 * HOL: simplification no longer dives into case-expressions: only the
14876 selector expression is simplified, but not the remaining arms; to
14877 enable full simplification of case-expressions for datatype t, you may
14878 remove t.weak_case_cong from the simpset, either globally (Delcongs
14879 [thm"t.weak_case_cong"];) or locally (delcongs [...]).
14881 * HOL/recdef: the recursion equations generated by 'recdef' for
14882 function 'f' are now called f.simps instead of f.rules; if all
14883 termination conditions are proved automatically, these simplification
14884 rules are added to the simpset, as in primrec; rules may be named
14885 individually as well, resulting in a separate list of theorems for
14888 * HOL/While is a new theory that provides a while-combinator. It
14889 permits the definition of tail-recursive functions without the
14890 provision of a termination measure. The latter is necessary once the
14891 invariant proof rule for while is applied.
14893 * HOL: new (overloaded) notation for the set of elements below/above
14894 some element: {..u}, {..u(}, {l..}, {)l..}. See theory SetInterval.
14896 * HOL: theorems impI, allI, ballI bound as "strip";
14898 * HOL: new tactic induct_thm_tac: thm -> string -> int -> tactic
14899 induct_tac th "x1 ... xn" expects th to have a conclusion of the form
14900 P v1 ... vn and abbreviates res_inst_tac [("v1","x1"),...,("vn","xn")] th;
14902 * HOL/Real: "rabs" replaced by overloaded "abs" function;
14904 * HOL: theory Sexp now in HOL/Induct examples (it used to be part of
14905 main HOL, but was unused);
14907 * HOL: fewer consts declared as global (e.g. have to refer to
14908 "Lfp.lfp" instead of "lfp" internally; affects ML packages only);
14910 * HOL: tuned AST representation of nested pairs, avoiding bogus output
14911 in case of overlap with user translations (e.g. judgements over
14912 tuples); (note that the underlying logical represenation is still
14918 * ZF: simplification automatically cancels common terms in arithmetic
14919 expressions over nat and int;
14921 * ZF: new treatment of nat to minimize type-checking: all operators
14922 coerce their operands to a natural number using the function natify,
14923 making the algebraic laws unconditional;
14925 * ZF: as above, for int: operators coerce their operands to an integer
14926 using the function intify;
14928 * ZF: the integer library now contains many of the usual laws for the
14929 orderings, including $<=, and monotonicity laws for $+ and $*;
14931 * ZF: new example ZF/ex/NatSum to demonstrate integer arithmetic
14934 * FOL and ZF: AddIffs now available, giving theorems of the form P<->Q
14935 to the simplifier and classical reasoner simultaneously;
14940 * Provers: blast_tac now handles actual object-logic rules as
14941 assumptions; note that auto_tac uses blast_tac internally as well;
14943 * Provers: new functions rulify/rulify_no_asm: thm -> thm for turning
14944 outer -->/All/Ball into ==>/!!; qed_spec_mp now uses rulify_no_asm;
14946 * Provers: delrules now handles destruct rules as well (no longer need
14947 explicit make_elim);
14949 * Provers: Blast_tac now warns of and ignores "weak elimination rules" e.g.
14950 [| inj ?f; ?f ?x = ?f ?y; ?x = ?y ==> ?W |] ==> ?W
14951 use instead the strong form,
14952 [| inj ?f; ~ ?W ==> ?f ?x = ?f ?y; ?x = ?y ==> ?W |] ==> ?W
14953 in HOL, FOL and ZF the function cla_make_elim will create such rules
14954 from destruct-rules;
14956 * Provers: Simplifier.easy_setup provides a fast path to basic
14957 Simplifier setup for new object-logics;
14959 * Pure: AST translation rules no longer require constant head on LHS;
14961 * Pure: improved name spaces: ambiguous output is qualified; support
14962 for hiding of names;
14964 * system: smart setup of canonical ML_HOME, ISABELLE_INTERFACE, and
14965 XSYMBOL_HOME; no longer need to do manual configuration in most
14968 * system: compression of ML heaps images may now be controlled via -c
14969 option of isabelle and isatool usedir (currently only observed by
14972 * system: isatool installfonts may handle X-Symbol fonts as well (very
14973 useful for remote X11);
14975 * system: provide TAGS file for Isabelle sources;
14977 * ML: infix 'OF' is a version of 'MRS' with more appropriate argument
14980 * ML: renamed flags Syntax.trace_norm_ast to Syntax.trace_ast; global
14981 timing flag supersedes proof_timing and Toplevel.trace;
14983 * ML: new combinators |>> and |>>> for incremental transformations
14984 with secondary results (e.g. certain theory extensions):
14986 * ML: PureThy.add_defs gets additional argument to indicate potential
14987 overloading (usually false);
14989 * ML: PureThy.add_thms/add_axioms/add_defs now return theorems as
14994 New in Isabelle99 (October 1999)
14995 --------------------------------
14997 *** Overview of INCOMPATIBILITIES (see below for more details) ***
14999 * HOL: The THEN and ELSE parts of conditional expressions (if P then x else y)
15000 are no longer simplified. (This allows the simplifier to unfold recursive
15001 functional programs.) To restore the old behaviour, declare
15003 Delcongs [if_weak_cong];
15005 * HOL: Removed the obsolete syntax "Compl A"; use -A for set
15008 * HOL: the predicate "inj" is now defined by translation to "inj_on";
15010 * HOL/datatype: mutual_induct_tac no longer exists --
15011 use induct_tac "x_1 ... x_n" instead of mutual_induct_tac ["x_1", ..., "x_n"]
15013 * HOL/typedef: fixed type inference for representing set; type
15014 arguments now have to occur explicitly on the rhs as type constraints;
15016 * ZF: The con_defs part of an inductive definition may no longer refer
15017 to constants declared in the same theory;
15019 * HOL, ZF: the function mk_cases, generated by the inductive
15020 definition package, has lost an argument. To simplify its result, it
15021 uses the default simpset instead of a supplied list of theorems.
15023 * HOL/List: the constructors of type list are now Nil and Cons;
15025 * Simplifier: the type of the infix ML functions
15026 setSSolver addSSolver setSolver addSolver
15027 is now simpset * solver -> simpset where `solver' is a new abstract type
15028 for packaging solvers. A solver is created via
15029 mk_solver: string -> (thm list -> int -> tactic) -> solver
15030 where the string argument is only a comment.
15033 *** Proof tools ***
15035 * Provers/Arith/fast_lin_arith.ML contains a functor for creating a
15036 decision procedure for linear arithmetic. Currently it is used for
15037 types `nat', `int', and `real' in HOL (see below); it can, should and
15038 will be instantiated for other types and logics as well.
15040 * The simplifier now accepts rewrite rules with flexible heads, eg
15041 hom ?f ==> ?f(?x+?y) = ?f ?x + ?f ?y
15042 They are applied like any rule with a non-pattern lhs, i.e. by first-order
15048 * New Isabelle/Isar subsystem provides an alternative to traditional
15049 tactical theorem proving; together with the ProofGeneral/isar user
15050 interface it offers an interactive environment for developing human
15051 readable proof documents (Isar == Intelligible semi-automated
15052 reasoning); for further information see isatool doc isar-ref,
15053 src/HOL/Isar_examples and http://isabelle.in.tum.de/Isar/
15055 * improved and simplified presentation of theories: better HTML markup
15056 (including colors), graph views in several sizes; isatool usedir now
15057 provides a proper interface for user theories (via -P option); actual
15058 document preparation based on (PDF)LaTeX is available as well (for
15059 new-style theories only); see isatool doc system for more information;
15061 * native support for Proof General, both for classic Isabelle and
15064 * ML function thm_deps visualizes dependencies of theorems and lemmas,
15065 using the graph browser tool;
15067 * Isabelle manuals now also available as PDF;
15069 * theory loader rewritten from scratch (may not be fully
15070 bug-compatible); old loadpath variable has been replaced by show_path,
15071 add_path, del_path, reset_path functions; new operations such as
15072 update_thy, touch_thy, remove_thy, use/update_thy_only (see also
15075 * improved isatool install: option -k creates KDE application icon,
15076 option -p DIR installs standalone binaries;
15078 * added ML_PLATFORM setting (useful for cross-platform installations);
15079 more robust handling of platform specific ML images for SML/NJ;
15081 * the settings environment is now statically scoped, i.e. it is never
15082 created again in sub-processes invoked from isabelle, isatool, or
15085 * path element specification '~~' refers to '$ISABELLE_HOME';
15087 * in locales, the "assumes" and "defines" parts may be omitted if
15090 * new print_mode "xsymbols" for extended symbol support (e.g. genuine
15093 * new print_mode "HTML";
15095 * new flag show_tags controls display of tags of theorems (which are
15096 basically just comments that may be attached by some tools);
15098 * Isamode 2.6 requires patch to accomodate change of Isabelle font
15099 mode and goal output format:
15101 diff -r Isamode-2.6/elisp/isa-load.el Isamode/elisp/isa-load.el
15103 < (list (isa-getenv "ISABELLE") "-msymbols" logic-name)
15105 > (list (isa-getenv "ISABELLE") "-misabelle_font" "-msymbols" logic-name)
15106 diff -r Isabelle-2.6/elisp/isa-proofstate.el Isamode/elisp/isa-proofstate.el
15108 < (defconst proofstate-proofstart-regexp "^Level [0-9]+$"
15110 > (defconst proofstate-proofstart-regexp "^Level [0-9]+"
15112 * function bind_thms stores lists of theorems (cf. bind_thm);
15114 * new shorthand tactics ftac, eatac, datac, fatac;
15116 * qed (and friends) now accept "" as result name; in that case the
15117 theorem is not stored, but proper checks and presentation of the
15118 result still apply;
15120 * theorem database now also indexes constants "Trueprop", "all",
15121 "==>", "=="; thus thms_containing, findI etc. may retrieve more rules;
15126 ** HOL arithmetic **
15128 * There are now decision procedures for linear arithmetic over nat and
15131 1. arith_tac copes with arbitrary formulae involving `=', `<', `<=',
15132 `+', `-', `Suc', `min', `max' and numerical constants; other subterms
15133 are treated as atomic; subformulae not involving type `nat' or `int'
15134 are ignored; quantified subformulae are ignored unless they are
15135 positive universal or negative existential. The tactic has to be
15136 invoked by hand and can be a little bit slow. In particular, the
15137 running time is exponential in the number of occurrences of `min' and
15138 `max', and `-' on `nat'.
15140 2. fast_arith_tac is a cut-down version of arith_tac: it only takes
15141 (negated) (in)equalities among the premises and the conclusion into
15142 account (i.e. no compound formulae) and does not know about `min' and
15143 `max', and `-' on `nat'. It is fast and is used automatically by the
15146 NB: At the moment, these decision procedures do not cope with mixed
15147 nat/int formulae where the two parts interact, such as `m < n ==>
15150 * HOL/Numeral provides a generic theory of numerals (encoded
15151 efficiently as bit strings); setup for types nat/int/real is in place;
15152 INCOMPATIBILITY: since numeral syntax is now polymorphic, rather than
15153 int, existing theories and proof scripts may require a few additional
15156 * integer division and remainder can now be performed on constant
15159 * many properties of integer multiplication, division and remainder
15162 * An interface to the Stanford Validity Checker (SVC) is available through the
15163 tactic svc_tac. Propositional tautologies and theorems of linear arithmetic
15164 are proved automatically. SVC must be installed separately, and its results
15165 must be TAKEN ON TRUST (Isabelle does not check the proofs, but tags any
15166 invocation of the underlying oracle). For SVC see
15167 http://verify.stanford.edu/SVC
15169 * IsaMakefile: the HOL-Real target now builds an actual image;
15174 * HOL/Real/HahnBanach: the Hahn-Banach theorem for real vector spaces
15175 (in Isabelle/Isar) -- by Gertrud Bauer;
15177 * HOL/BCV: generic model of bytecode verification, i.e. data-flow
15178 analysis for assembly languages with subtypes;
15180 * HOL/TLA (Lamport's Temporal Logic of Actions): major reorganization
15181 -- avoids syntactic ambiguities and treats state, transition, and
15182 temporal levels more uniformly; introduces INCOMPATIBILITIES due to
15183 changed syntax and (many) tactics;
15185 * HOL/inductive: Now also handles more general introduction rules such
15186 as "ALL y. (y, x) : r --> y : acc r ==> x : acc r"; monotonicity
15187 theorems are now maintained within the theory (maintained via the
15190 * HOL/datatype: Now also handles arbitrarily branching datatypes
15191 (using function types) such as
15193 datatype 'a tree = Atom 'a | Branch "nat => 'a tree"
15195 * HOL/record: record_simproc (part of the default simpset) takes care
15196 of selectors applied to updated records; record_split_tac is no longer
15197 part of the default claset; update_defs may now be removed from the
15198 simpset in many cases; COMPATIBILITY: old behavior achieved by
15200 claset_ref () := claset() addSWrapper record_split_wrapper;
15201 Delsimprocs [record_simproc]
15203 * HOL/typedef: fixed type inference for representing set; type
15204 arguments now have to occur explicitly on the rhs as type constraints;
15206 * HOL/recdef (TFL): 'congs' syntax now expects comma separated list of theorem
15207 names rather than an ML expression;
15209 * HOL/defer_recdef (TFL): like recdef but the well-founded relation can be
15210 supplied later. Program schemes can be defined, such as
15211 "While B C s = (if B s then While B C (C s) else s)"
15212 where the well-founded relation can be chosen after B and C have been given.
15214 * HOL/List: the constructors of type list are now Nil and Cons;
15215 INCOMPATIBILITY: while [] and infix # syntax is still there, of
15216 course, ML tools referring to List.list.op # etc. have to be adapted;
15218 * HOL_quantifiers flag superseded by "HOL" print mode, which is
15219 disabled by default; run isabelle with option -m HOL to get back to
15220 the original Gordon/HOL-style output;
15222 * HOL/Ord.thy: new bounded quantifier syntax (input only): ALL x<y. P,
15223 ALL x<=y. P, EX x<y. P, EX x<=y. P;
15225 * HOL basic syntax simplified (more orthogonal): all variants of
15226 All/Ex now support plain / symbolic / HOL notation; plain syntax for
15227 Eps operator is provided as well: "SOME x. P[x]";
15229 * HOL/Sum.thy: sum_case has been moved to HOL/Datatype;
15231 * HOL/Univ.thy: infix syntax <*>, <+>, <**>, <+> eliminated and made
15232 thus available for user theories;
15234 * HOLCF/IOA/Sequents: renamed 'Cons' to 'Consq' to avoid clash with
15235 HOL/List; hardly an INCOMPATIBILITY since '>>' syntax is used all the
15238 * HOL: new tactic smp_tac: int -> int -> tactic, which applies spec
15239 several times and then mp;
15244 * the notation <<...>> is now available as a notation for sequences of
15247 * the simplifier is now installed
15249 * the axiom system has been generalized (thanks to Soren Heilmann)
15251 * the classical reasoner now has a default rule database
15256 * new primrec section allows primitive recursive functions to be given
15257 directly (as in HOL) over datatypes and the natural numbers;
15259 * new tactics induct_tac and exhaust_tac for induction (or case
15260 analysis) over datatypes and the natural numbers;
15262 * the datatype declaration of type T now defines the recursor T_rec;
15264 * simplification automatically does freeness reasoning for datatype
15267 * automatic type-inference, with AddTCs command to insert new
15268 type-checking rules;
15270 * datatype introduction rules are now added as Safe Introduction rules
15273 * the syntax "if P then x else y" is now available in addition to
15277 *** Internal programming interfaces ***
15279 * tuned simplifier trace output; new flag debug_simp;
15281 * structures Vartab / Termtab (instances of TableFun) offer efficient
15282 tables indexed by indexname_ord / term_ord (compatible with aconv);
15284 * AxClass.axclass_tac lost the theory argument;
15286 * tuned current_goals_markers semantics: begin / end goal avoids
15287 printing empty lines;
15289 * removed prs and prs_fn hook, which was broken because it did not
15290 include \n in its semantics, forcing writeln to add one
15291 uncoditionally; replaced prs_fn by writeln_fn; consider std_output:
15292 string -> unit if you really want to output text without newline;
15294 * Symbol.output subject to print mode; INCOMPATIBILITY: defaults to
15295 plain output, interface builders may have to enable 'isabelle_font'
15296 mode to get Isabelle font glyphs as before;
15298 * refined token_translation interface; INCOMPATIBILITY: output length
15299 now of type real instead of int;
15301 * theory loader actions may be traced via new ThyInfo.add_hook
15302 interface (see src/Pure/Thy/thy_info.ML); example application: keep
15303 your own database of information attached to *whole* theories -- as
15304 opposed to intra-theory data slots offered via TheoryDataFun;
15306 * proper handling of dangling sort hypotheses (at last!);
15307 Thm.strip_shyps and Drule.strip_shyps_warning take care of removing
15308 extra sort hypotheses that can be witnessed from the type signature;
15309 the force_strip_shyps flag is gone, any remaining shyps are simply
15310 left in the theorem (with a warning issued by strip_shyps_warning);
15314 New in Isabelle98-1 (October 1998)
15315 ----------------------------------
15317 *** Overview of INCOMPATIBILITIES (see below for more details) ***
15319 * several changes of automated proof tools;
15321 * HOL: major changes to the inductive and datatype packages, including
15322 some minor incompatibilities of theory syntax;
15324 * HOL: renamed r^-1 to 'converse' from 'inverse'; 'inj_onto' is now
15327 * HOL: removed duplicate thms in Arith:
15328 less_imp_add_less should be replaced by trans_less_add1
15329 le_imp_add_le should be replaced by trans_le_add1
15331 * HOL: unary minus is now overloaded (new type constraints may be
15334 * HOL and ZF: unary minus for integers is now #- instead of #~. In
15335 ZF, expressions such as n#-1 must be changed to n#- 1, since #-1 is
15336 now taken as an integer constant.
15338 * Pure: ML function 'theory_of' renamed to 'theory';
15341 *** Proof tools ***
15344 1. Asm_full_simp_tac is now more aggressive.
15345 1. It will sometimes reorient premises if that increases their power to
15347 2. It does no longer proceed strictly from left to right but may also
15348 rotate premises to achieve further simplification.
15349 For compatibility reasons there is now Asm_lr_simp_tac which is like the
15350 old Asm_full_simp_tac in that it does not rotate premises.
15351 2. The simplifier now knows a little bit about nat-arithmetic.
15353 * Classical reasoner: wrapper mechanism for the classical reasoner now
15354 allows for selected deletion of wrappers, by introduction of names for
15355 wrapper functionals. This implies that addbefore, addSbefore,
15356 addaltern, and addSaltern now take a pair (name, tactic) as argument,
15357 and that adding two tactics with the same name overwrites the first
15358 one (emitting a warning).
15359 type wrapper = (int -> tactic) -> (int -> tactic)
15360 setWrapper, setSWrapper, compWrapper and compSWrapper are replaced by
15361 addWrapper, addSWrapper: claset * (string * wrapper) -> claset
15362 delWrapper, delSWrapper: claset * string -> claset
15363 getWrapper is renamed to appWrappers, getSWrapper to appSWrappers;
15365 * Classical reasoner: addbefore/addSbefore now have APPEND/ORELSE
15366 semantics; addbefore now affects only the unsafe part of step_tac
15367 etc.; this affects addss/auto_tac/force_tac, so EXISTING PROOFS MAY
15368 FAIL, but proofs should be fixable easily, e.g. by replacing Auto_tac
15371 * Classical reasoner: setwrapper to setWrapper and compwrapper to
15372 compWrapper; added safe wrapper (and access functions for it);
15374 * HOL/split_all_tac is now much faster and fails if there is nothing
15375 to split. Some EXISTING PROOFS MAY REQUIRE ADAPTION because the order
15376 and the names of the automatically generated variables have changed.
15377 split_all_tac has moved within claset() from unsafe wrappers to safe
15378 wrappers, which means that !!-bound variables are split much more
15379 aggressively, and safe_tac and clarify_tac now split such variables.
15380 If this splitting is not appropriate, use delSWrapper "split_all_tac".
15381 Note: the same holds for record_split_tac, which does the job of
15382 split_all_tac for record fields.
15384 * HOL/Simplifier: Rewrite rules for case distinctions can now be added
15385 permanently to the default simpset using Addsplits just like
15386 Addsimps. They can be removed via Delsplits just like
15387 Delsimps. Lower-case versions are also available.
15389 * HOL/Simplifier: The rule split_if is now part of the default
15390 simpset. This means that the simplifier will eliminate all occurrences
15391 of if-then-else in the conclusion of a goal. To prevent this, you can
15392 either remove split_if completely from the default simpset by
15393 `Delsplits [split_if]' or remove it in a specific call of the
15394 simplifier using `... delsplits [split_if]'. You can also add/delete
15395 other case splitting rules to/from the default simpset: every datatype
15396 generates suitable rules `split_t_case' and `split_t_case_asm' (where
15397 t is the name of the datatype).
15399 * Classical reasoner / Simplifier combination: new force_tac (and
15400 derivatives Force_tac, force) combines rewriting and classical
15401 reasoning (and whatever other tools) similarly to auto_tac, but is
15402 aimed to solve the given subgoal completely.
15407 * new top-level commands `Goal' and `Goalw' that improve upon `goal'
15408 and `goalw': the theory is no longer needed as an explicit argument -
15409 the current theory context is used; assumptions are no longer returned
15410 at the ML-level unless one of them starts with ==> or !!; it is
15411 recommended to convert to these new commands using isatool fixgoal
15412 (backup your sources first!);
15414 * new top-level commands 'thm' and 'thms' for retrieving theorems from
15415 the current theory context, and 'theory' to lookup stored theories;
15417 * new theory section 'locale' for declaring constants, assumptions and
15418 definitions that have local scope;
15420 * new theory section 'nonterminals' for purely syntactic types;
15422 * new theory section 'setup' for generic ML setup functions
15423 (e.g. package initialization);
15425 * the distribution now includes Isabelle icons: see
15426 lib/logo/isabelle-{small,tiny}.xpm;
15428 * isatool install - install binaries with absolute references to
15431 * isatool logo -- create instances of the Isabelle logo (as EPS);
15433 * print mode 'emacs' reserved for Isamode;
15435 * support multiple print (ast) translations per constant name;
15437 * theorems involving oracles are now printed with a suffixed [!];
15442 * there is now a tutorial on Isabelle/HOL (do 'isatool doc tutorial');
15444 * HOL/inductive package reorganized and improved: now supports mutual
15445 definitions such as
15450 oddI "n : EVEN ==> Suc n : ODD"
15451 evenI "n : ODD ==> Suc n : EVEN"
15453 new theorem list "elims" contains an elimination rule for each of the
15454 recursive sets; inductive definitions now handle disjunctive premises
15455 correctly (also ZF);
15457 INCOMPATIBILITIES: requires Inductive as an ancestor; component
15458 "mutual_induct" no longer exists - the induction rule is always
15459 contained in "induct";
15462 * HOL/datatype package re-implemented and greatly improved: now
15463 supports mutually recursive datatypes such as
15466 'a aexp = IF_THEN_ELSE ('a bexp) ('a aexp) ('a aexp)
15467 | SUM ('a aexp) ('a aexp)
15468 | DIFF ('a aexp) ('a aexp)
15471 'a bexp = LESS ('a aexp) ('a aexp)
15472 | AND ('a bexp) ('a bexp)
15473 | OR ('a bexp) ('a bexp)
15475 as well as indirectly recursive datatypes such as
15478 ('a, 'b) term = Var 'a
15479 | App 'b ((('a, 'b) term) list)
15481 The new tactic mutual_induct_tac [<var_1>, ..., <var_n>] i performs
15482 induction on mutually / indirectly recursive datatypes.
15484 Primrec equations are now stored in theory and can be accessed via
15485 <function_name>.simps.
15489 - Theories using datatypes must now have theory Datatype as an
15491 - The specific <typename>.induct_tac no longer exists - use the
15492 generic induct_tac instead.
15493 - natE has been renamed to nat.exhaust - use exhaust_tac
15494 instead of res_inst_tac ... natE. Note that the variable
15495 names in nat.exhaust differ from the names in natE, this
15496 may cause some "fragile" proofs to fail.
15497 - The theorems split_<typename>_case and split_<typename>_case_asm
15498 have been renamed to <typename>.split and <typename>.split_asm.
15499 - Since default sorts of type variables are now handled correctly,
15500 some datatype definitions may have to be annotated with explicit
15502 - Primrec definitions no longer require function name and type
15503 of recursive argument.
15505 Consider using isatool fixdatatype to adapt your theories and proof
15506 scripts to the new package (backup your sources first!).
15509 * HOL/record package: considerably improved implementation; now
15510 includes concrete syntax for record types, terms, updates; theorems
15511 for surjective pairing and splitting !!-bound record variables; proof
15512 support is as follows:
15514 1) standard conversions (selectors or updates applied to record
15515 constructor terms) are part of the standard simpset;
15517 2) inject equations of the form ((x, y) = (x', y')) == x=x' & y=y' are
15518 made part of standard simpset and claset via addIffs;
15520 3) a tactic for record field splitting (record_split_tac) is part of
15521 the standard claset (addSWrapper);
15523 To get a better idea about these rules you may retrieve them via
15524 something like 'thms "foo.simps"' or 'thms "foo.iffs"', where "foo" is
15525 the name of your record type.
15527 The split tactic 3) conceptually simplifies by the following rule:
15529 "(!!x. PROP ?P x) == (!!a b. PROP ?P (a, b))"
15531 Thus any record variable that is bound by meta-all will automatically
15532 blow up into some record constructor term, consequently the
15533 simplifications of 1), 2) apply. Thus force_tac, auto_tac etc. shall
15534 solve record problems automatically.
15537 * reorganized the main HOL image: HOL/Integ and String loaded by
15538 default; theory Main includes everything;
15540 * automatic simplification of integer sums and comparisons, using cancellation;
15542 * added option_map_eq_Some and not_Some_eq to the default simpset and claset;
15544 * added disj_not1 = "(~P | Q) = (P --> Q)" to the default simpset;
15546 * many new identities for unions, intersections, set difference, etc.;
15548 * expand_if, expand_split, expand_sum_case and expand_nat_case are now
15549 called split_if, split_split, split_sum_case and split_nat_case (to go
15550 with add/delsplits);
15552 * HOL/Prod introduces simplification procedure unit_eq_proc rewriting
15553 (?x::unit) = (); this is made part of the default simpset, which COULD
15554 MAKE EXISTING PROOFS FAIL under rare circumstances (consider
15555 'Delsimprocs [unit_eq_proc];' as last resort); also note that
15556 unit_abs_eta_conv is added in order to counter the effect of
15557 unit_eq_proc on (%u::unit. f u), replacing it by f rather than by
15560 * HOL/Fun INCOMPATIBILITY: `inj_onto' is now called `inj_on' (which
15563 * HOL/Set INCOMPATIBILITY: rule `equals0D' is now a well-formed destruct rule;
15564 It and 'sym RS equals0D' are now in the default claset, giving automatic
15565 disjointness reasoning but breaking a few old proofs.
15567 * HOL/Relation INCOMPATIBILITY: renamed the relational operator r^-1
15568 to 'converse' from 'inverse' (for compatibility with ZF and some
15571 * HOL/recdef can now declare non-recursive functions, with {} supplied as
15572 the well-founded relation;
15574 * HOL/Set INCOMPATIBILITY: the complement of set A is now written -A instead of
15575 Compl A. The "Compl" syntax remains available as input syntax for this
15578 * HOL/Update: new theory of function updates:
15579 f(a:=b) == %x. if x=a then b else f x
15580 may also be iterated as in f(a:=b,c:=d,...);
15582 * HOL/Vimage: new theory for inverse image of a function, syntax f-``B;
15585 - new function list_update written xs[i:=v] that updates the i-th
15586 list position. May also be iterated as in xs[i:=a,j:=b,...].
15587 - new function `upt' written [i..j(] which generates the list
15588 [i,i+1,...,j-1], i.e. the upper bound is excluded. To include the upper
15589 bound write [i..j], which is a shorthand for [i..j+1(].
15590 - new lexicographic orderings and corresponding wellfoundedness theorems.
15593 - removed 'pred' (predecessor) function;
15594 - generalized some theorems about n-1;
15595 - many new laws about "div" and "mod";
15596 - new laws about greatest common divisors (see theory ex/Primes);
15598 * HOL/Relation: renamed the relational operator r^-1 "converse"
15599 instead of "inverse";
15601 * HOL/Induct/Multiset: a theory of multisets, including the wellfoundedness
15602 of the multiset ordering;
15604 * directory HOL/Real: a construction of the reals using Dedekind cuts
15605 (not included by default);
15607 * directory HOL/UNITY: Chandy and Misra's UNITY formalism;
15609 * directory HOL/Hoare: a new version of Hoare logic which permits many-sorted
15610 programs, i.e. different program variables may have different types.
15612 * calling (stac rew i) now fails if "rew" has no effect on the goal
15613 [previously, this check worked only if the rewrite rule was unconditional]
15614 Now rew can involve either definitions or equalities (either == or =).
15619 * theory Main includes everything; INCOMPATIBILITY: theory ZF.thy contains
15620 only the theorems proved on ZF.ML;
15622 * ZF INCOMPATIBILITY: rule `equals0D' is now a well-formed destruct rule;
15623 It and 'sym RS equals0D' are now in the default claset, giving automatic
15624 disjointness reasoning but breaking a few old proofs.
15626 * ZF/Update: new theory of function updates
15627 with default rewrite rule f(x:=y) ` z = if(z=x, y, f`z)
15628 may also be iterated as in f(a:=b,c:=d,...);
15630 * in let x=t in u(x), neither t nor u(x) has to be an FOL term.
15632 * calling (stac rew i) now fails if "rew" has no effect on the goal
15633 [previously, this check worked only if the rewrite rule was unconditional]
15634 Now rew can involve either definitions or equalities (either == or =).
15636 * case_tac provided for compatibility with HOL
15637 (like the old excluded_middle_tac, but with subgoals swapped)
15640 *** Internal programming interfaces ***
15642 * Pure: several new basic modules made available for general use, see
15643 also src/Pure/README;
15645 * improved the theory data mechanism to support encapsulation (data
15646 kind name replaced by private Object.kind, acting as authorization
15647 key); new type-safe user interface via functor TheoryDataFun; generic
15648 print_data function becomes basically useless;
15650 * removed global_names compatibility flag -- all theory declarations
15651 are qualified by default;
15653 * module Pure/Syntax now offers quote / antiquote translation
15654 functions (useful for Hoare logic etc. with implicit dependencies);
15655 see HOL/ex/Antiquote for an example use;
15657 * Simplifier now offers conversions (asm_)(full_)rewrite: simpset ->
15660 * new tactical CHANGED_GOAL for checking that a tactic modifies a
15663 * Display.print_goals function moved to Locale.print_goals;
15665 * standard print function for goals supports current_goals_markers
15666 variable for marking begin of proof, end of proof, start of goal; the
15667 default is ("", "", ""); setting current_goals_markers := ("<proof>",
15668 "</proof>", "<goal>") causes SGML like tagged proof state printing,
15673 New in Isabelle98 (January 1998)
15674 --------------------------------
15676 *** Overview of INCOMPATIBILITIES (see below for more details) ***
15678 * changed lexical syntax of terms / types: dots made part of long
15679 identifiers, e.g. "%x.x" no longer possible, should be "%x. x";
15681 * simpset (and claset) reference variable replaced by functions
15682 simpset / simpset_ref;
15684 * no longer supports theory aliases (via merge) and non-trivial
15685 implicit merge of thms' signatures;
15687 * most internal names of constants changed due to qualified names;
15689 * changed Pure/Sequence interface (see Pure/seq.ML);
15692 *** General Changes ***
15694 * hierachically structured name spaces (for consts, types, axms, thms
15695 etc.); new lexical class 'longid' (e.g. Foo.bar.x) may render much of
15696 old input syntactically incorrect (e.g. "%x.x"); COMPATIBILITY:
15697 isatool fixdots ensures space after dots (e.g. "%x. x"); set
15698 long_names for fully qualified output names; NOTE: ML programs
15699 (special tactics, packages etc.) referring to internal names may have
15700 to be adapted to cope with fully qualified names; in case of severe
15701 backward campatibility problems try setting 'global_names' at compile
15702 time to have enrything declared within a flat name space; one may also
15703 fine tune name declarations in theories via the 'global' and 'local'
15706 * reimplemented the implicit simpset and claset using the new anytype
15707 data filed in signatures; references simpset:simpset ref etc. are
15708 replaced by functions simpset:unit->simpset and
15709 simpset_ref:unit->simpset ref; COMPATIBILITY: use isatool fixclasimp
15710 to patch your ML files accordingly;
15712 * HTML output now includes theory graph data for display with Java
15713 applet or isatool browser; data generated automatically via isatool
15714 usedir (see -i option, ISABELLE_USEDIR_OPTIONS);
15716 * defs may now be conditional; improved rewrite_goals_tac to handle
15717 conditional equations;
15719 * defs now admits additional type arguments, using TYPE('a) syntax;
15721 * theory aliases via merge (e.g. M=A+B+C) no longer supported, always
15722 creates a new theory node; implicit merge of thms' signatures is
15723 restricted to 'trivial' ones; COMPATIBILITY: one may have to use
15724 transfer:theory->thm->thm in (rare) cases;
15726 * improved handling of draft signatures / theories; draft thms (and
15727 ctyps, cterms) are automatically promoted to real ones;
15729 * slightly changed interfaces for oracles: admit many per theory, named
15730 (e.g. oracle foo = mlfun), additional name argument for invoke_oracle;
15732 * print_goals: optional output of const types (set show_consts and
15735 * improved output of warnings (###) and errors (***);
15737 * subgoal_tac displays a warning if the new subgoal has type variables;
15739 * removed old README and Makefiles;
15741 * replaced print_goals_ref hook by print_current_goals_fn and result_error_fn;
15743 * removed obsolete init_pps and init_database;
15745 * deleted the obsolete tactical STATE, which was declared by
15746 fun STATE tacfun st = tacfun st st;
15748 * cd and use now support path variables, e.g. $ISABELLE_HOME, or ~
15749 (which abbreviates $HOME);
15751 * changed Pure/Sequence interface (see Pure/seq.ML); COMPATIBILITY:
15752 use isatool fixseq to adapt your ML programs (this works for fully
15753 qualified references to the Sequence structure only!);
15755 * use_thy no longer requires writable current directory; it always
15756 reloads .ML *and* .thy file, if either one is out of date;
15759 *** Classical Reasoner ***
15761 * Clarify_tac, clarify_tac, clarify_step_tac, Clarify_step_tac: new
15762 tactics that use classical reasoning to simplify a subgoal without
15763 splitting it into several subgoals;
15765 * Safe_tac: like safe_tac but uses the default claset;
15770 * added simplification meta rules:
15771 (asm_)(full_)simplify: simpset -> thm -> thm;
15773 * simplifier.ML no longer part of Pure -- has to be loaded by object
15776 * added prems argument to simplification procedures;
15778 * HOL, FOL, ZF: added infix function `addsplits':
15779 instead of `<simpset> setloop (split_tac <thms>)'
15780 you can simply write `<simpset> addsplits <thms>'
15785 * TYPE('a) syntax for type reflection terms;
15787 * no longer handles consts with name "" -- declare as 'syntax' instead;
15789 * pretty printer: changed order of mixfix annotation preference (again!);
15791 * Pure: fixed idt/idts vs. pttrn/pttrns syntactic categories;
15796 * HOL: there is a new splitter `split_asm_tac' that can be used e.g.
15797 with `addloop' of the simplifier to faciliate case splitting in premises.
15799 * HOL/TLA: Stephan Merz's formalization of Lamport's Temporal Logic of Actions;
15801 * HOL/Auth: new protocol proofs including some for the Internet
15804 * HOL/Map: new theory of `maps' a la VDM;
15806 * HOL/simplifier: simplification procedures nat_cancel_sums for
15807 cancelling out common nat summands from =, <, <= (in)equalities, or
15808 differences; simplification procedures nat_cancel_factor for
15809 cancelling common factor from =, <, <= (in)equalities over natural
15810 sums; nat_cancel contains both kinds of procedures, it is installed by
15811 default in Arith.thy -- this COULD MAKE EXISTING PROOFS FAIL;
15813 * HOL/simplifier: terms of the form
15814 `? x. P1(x) & ... & Pn(x) & x=t & Q1(x) & ... Qn(x)' (or t=x)
15816 `P1(t) & ... & Pn(t) & Q1(t) & ... Qn(t)',
15817 and those of the form
15818 `! x. P1(x) & ... & Pn(x) & x=t & Q1(x) & ... Qn(x) --> R(x)' (or t=x)
15820 `P1(t) & ... & Pn(t) & Q1(t) & ... Qn(t) --> R(t)',
15823 Each datatype `t' now comes with a theorem `split_t_case' of the form
15825 P(t_case f1 ... fn x) =
15826 ( (!y1 ... ym1. x = C1 y1 ... ym1 --> P(f1 y1 ... ym1)) &
15828 (!y1 ... ymn. x = Cn y1 ... ymn --> P(f1 y1 ... ymn))
15831 and a theorem `split_t_case_asm' of the form
15833 P(t_case f1 ... fn x) =
15834 ~( (? y1 ... ym1. x = C1 y1 ... ym1 & ~P(f1 y1 ... ym1)) |
15836 (? y1 ... ymn. x = Cn y1 ... ymn & ~P(f1 y1 ... ymn))
15838 which can be added to a simpset via `addsplits'. The existing theorems
15839 expand_list_case and expand_option_case have been renamed to
15840 split_list_case and split_option_case.
15843 - `pred n' is automatically converted to `n-1'.
15844 Users are strongly encouraged not to use `pred' any longer,
15845 because it will disappear altogether at some point.
15846 - Users are strongly encouraged to write "0 < n" rather than
15847 "n ~= 0". Theorems and proof tools have been modified towards this
15851 the function "set_of_list" has been renamed "set" (and its theorems too);
15852 the function "nth" now takes its arguments in the reverse order and
15853 has acquired the infix notation "!" as in "xs!n".
15855 * HOL/Set: UNIV is now a constant and is no longer translated to Compl{};
15857 * HOL/Set: The operator (UN x.B x) now abbreviates (UN x:UNIV. B x) and its
15858 specialist theorems (like UN1_I) are gone. Similarly for (INT x.B x);
15860 * HOL/record: extensible records with schematic structural subtyping
15861 (single inheritance); EXPERIMENTAL version demonstrating the encoding,
15862 still lacks various theorems and concrete record syntax;
15867 * removed "axioms" and "generated by" sections;
15869 * replaced "ops" section by extended "consts" section, which is capable of
15870 handling the continuous function space "->" directly;
15873 . proves theorems immediately and stores them in the theory,
15874 . creates hierachical name space,
15875 . now uses normal mixfix annotations (instead of cinfix...),
15876 . minor changes to some names and values (for consistency),
15877 . e.g. cases -> casedist, dists_eq -> dist_eqs, [take_lemma] -> take_lemmas,
15878 . separator between mutual domain defs: changed "," to "and",
15879 . improved handling of sort constraints; now they have to
15880 appear on the left-hand side of the equations only;
15882 * fixed LAM <x,y,zs>.b syntax;
15884 * added extended adm_tac to simplifier in HOLCF -- can now discharge
15885 adm (%x. P (t x)), where P is chainfinite and t continuous;
15890 * FOL: there is a new splitter `split_asm_tac' that can be used e.g.
15891 with `addloop' of the simplifier to faciliate case splitting in premises.
15893 * qed_spec_mp, qed_goal_spec_mp, qed_goalw_spec_mp are available, as
15894 in HOL, they strip ALL and --> from proved theorems;
15898 New in Isabelle94-8 (May 1997)
15899 ------------------------------
15901 *** General Changes ***
15903 * new utilities to build / run / maintain Isabelle etc. (in parts
15904 still somewhat experimental); old Makefiles etc. still functional;
15906 * new 'Isabelle System Manual';
15908 * INSTALL text, together with ./configure and ./build scripts;
15910 * reimplemented type inference for greater efficiency, better error
15911 messages and clean internal interface;
15913 * prlim command for dealing with lots of subgoals (an easier way of
15914 setting goals_limit);
15919 * supports alternative (named) syntax tables (parser and pretty
15920 printer); internal interface is provided by add_modesyntax(_i);
15922 * Pure, FOL, ZF, HOL, HOLCF now support symbolic input and output; to
15923 be used in conjunction with the Isabelle symbol font; uses the
15924 "symbols" syntax table;
15926 * added token_translation interface (may translate name tokens in
15927 arbitrary ways, dependent on their type (free, bound, tfree, ...) and
15928 the current print_mode); IMPORTANT: user print translation functions
15929 are responsible for marking newly introduced bounds
15930 (Syntax.mark_boundT);
15932 * token translations for modes "xterm" and "xterm_color" that display
15933 names in bold, underline etc. or colors (which requires a color
15936 * infixes may now be declared with names independent of their syntax;
15938 * added typed_print_translation (like print_translation, but may
15939 access type of constant);
15942 *** Classical Reasoner ***
15944 Blast_tac: a new tactic! It is often more powerful than fast_tac, but has
15945 some limitations. Blast_tac...
15946 + ignores addss, addbefore, addafter; this restriction is intrinsic
15947 + ignores elimination rules that don't have the correct format
15948 (the conclusion MUST be a formula variable)
15949 + ignores types, which can make HOL proofs fail
15950 + rules must not require higher-order unification, e.g. apply_type in ZF
15951 [message "Function Var's argument not a bound variable" relates to this]
15952 + its proof strategy is more general but can actually be slower
15954 * substitution with equality assumptions no longer permutes other
15957 * minor changes in semantics of addafter (now called addaltern); renamed
15958 setwrapper to setWrapper and compwrapper to compWrapper; added safe wrapper
15959 (and access functions for it);
15961 * improved combination of classical reasoner and simplifier:
15962 + functions for handling clasimpsets
15963 + improvement of addss: now the simplifier is called _after_ the
15965 + safe variant of addss called addSss: uses safe simplifications
15966 _during_ the safe steps. It is more complete as it allows multiple
15967 instantiations of unknowns (e.g. with slow_tac).
15971 * added interface for simplification procedures (functions that
15972 produce *proven* rewrite rules on the fly, depending on current
15975 * ordering on terms as parameter (used for ordered rewriting);
15977 * new functions delcongs, deleqcongs, and Delcongs. richer rep_ss;
15979 * the solver is now split into a safe and an unsafe part.
15980 This should be invisible for the normal user, except that the
15981 functions setsolver and addsolver have been renamed to setSolver and
15982 addSolver; added safe_asm_full_simp_tac;
15987 * a generic induction tactic `induct_tac' which works for all datatypes and
15988 also for type `nat';
15990 * a generic case distinction tactic `exhaust_tac' which works for all
15991 datatypes and also for type `nat';
15993 * each datatype comes with a function `size';
15995 * patterns in case expressions allow tuple patterns as arguments to
15996 constructors, for example `case x of [] => ... | (x,y,z)#ps => ...';
15998 * primrec now also works with type nat;
16000 * recdef: a new declaration form, allows general recursive functions to be
16001 defined in theory files. See HOL/ex/Fib, HOL/ex/Primes, HOL/Subst/Unify.
16003 * the constant for negation has been renamed from "not" to "Not" to
16004 harmonize with FOL, ZF, LK, etc.;
16006 * HOL/ex/LFilter theory of a corecursive "filter" functional for
16009 * HOL/Modelcheck demonstrates invocation of model checker oracle;
16011 * HOL/ex/Ring.thy declares cring_simp, which solves equational
16012 problems in commutative rings, using axiomatic type classes for + and *;
16014 * more examples in HOL/MiniML and HOL/Auth;
16016 * more default rewrite rules for quantifiers, union/intersection;
16018 * a new constant `arbitrary == @x.False';
16020 * HOLCF/IOA replaces old HOL/IOA;
16022 * HOLCF changes: derived all rules and arities
16023 + axiomatic type classes instead of classes
16024 + typedef instead of faking type definitions
16025 + eliminated the internal constants less_fun, less_cfun, UU_fun, UU_cfun etc.
16026 + new axclasses cpo, chfin, flat with flat < chfin < pcpo < cpo < po
16027 + eliminated the types void, one, tr
16028 + use unit lift and bool lift (with translations) instead of one and tr
16029 + eliminated blift from Lift3.thy (use Def instead of blift)
16030 all eliminated rules are derived as theorems --> no visible changes ;
16035 * ZF now has Fast_tac, Simp_tac and Auto_tac. Union_iff is a now a default
16036 rewrite rule; this may affect some proofs. eq_cs is gone but can be put back
16037 as ZF_cs addSIs [equalityI];
16041 New in Isabelle94-7 (November 96)
16042 ---------------------------------
16044 * allowing negative levels (as offsets) in prlev and choplev;
16046 * super-linear speedup for large simplifications;
16048 * FOL, ZF and HOL now use miniscoping: rewriting pushes
16049 quantifications in as far as possible (COULD MAKE EXISTING PROOFS
16050 FAIL); can suppress it using the command Delsimps (ex_simps @
16051 all_simps); De Morgan laws are also now included, by default;
16053 * improved printing of ==> : ~:
16055 * new object-logic "Sequents" adds linear logic, while replacing LK
16056 and Modal (thanks to Sara Kalvala);
16058 * HOL/Auth: correctness proofs for authentication protocols;
16060 * HOL: new auto_tac combines rewriting and classical reasoning (many
16061 examples on HOL/Auth);
16063 * HOL: new command AddIffs for declaring theorems of the form P=Q to
16064 the rewriter and classical reasoner simultaneously;
16066 * function uresult no longer returns theorems in "standard" format;
16067 regain previous version by: val uresult = standard o uresult;
16071 New in Isabelle94-6
16072 -------------------
16074 * oracles -- these establish an interface between Isabelle and trusted
16075 external reasoners, which may deliver results as theorems;
16077 * proof objects (in particular record all uses of oracles);
16079 * Simp_tac, Fast_tac, etc. that refer to implicit simpset / claset;
16081 * "constdefs" section in theory files;
16083 * "primrec" section (HOL) no longer requires names;
16085 * internal type "tactic" now simply "thm -> thm Sequence.seq";
16089 New in Isabelle94-5
16090 -------------------
16092 * reduced space requirements;
16094 * automatic HTML generation from theories;
16096 * theory files no longer require "..." (quotes) around most types;
16098 * new examples, including two proofs of the Church-Rosser theorem;
16100 * non-curried (1994) version of HOL is no longer distributed;
16104 New in Isabelle94-4
16105 -------------------
16107 * greatly reduced space requirements;
16109 * theory files (.thy) no longer require \...\ escapes at line breaks;
16111 * searchable theorem database (see the section "Retrieving theorems" on
16112 page 8 of the Reference Manual);
16114 * new examples, including Grabczewski's monumental case study of the
16117 * The previous version of HOL renamed to Old_HOL;
16119 * The new version of HOL (previously called CHOL) uses a curried syntax
16120 for functions. Application looks like f a b instead of f(a,b);
16122 * Mutually recursive inductive definitions finally work in HOL;
16124 * In ZF, pattern-matching on tuples is now available in all abstractions and
16125 translates to the operator "split";
16129 New in Isabelle94-3
16130 -------------------
16132 * new infix operator, addss, allowing the classical reasoner to
16133 perform simplification at each step of its search. Example:
16134 fast_tac (cs addss ss)
16136 * a new logic, CHOL, the same as HOL, but with a curried syntax
16137 for functions. Application looks like f a b instead of f(a,b). Also pairs
16138 look like (a,b) instead of <a,b>;
16140 * PLEASE NOTE: CHOL will eventually replace HOL!
16142 * In CHOL, pattern-matching on tuples is now available in all abstractions.
16143 It translates to the operator "split". A new theory of integers is available;
16145 * In ZF, integer numerals now denote two's-complement binary integers.
16146 Arithmetic operations can be performed by rewriting. See ZF/ex/Bin.ML;
16148 * Many new examples: I/O automata, Church-Rosser theorem, equivalents
16149 of the Axiom of Choice;
16153 New in Isabelle94-2
16154 -------------------
16156 * Significantly faster resolution;
16158 * the different sections in a .thy file can now be mixed and repeated
16161 * Database of theorems for FOL, HOL and ZF. New
16162 commands including qed, qed_goal and bind_thm store theorems in the database.
16164 * Simple database queries: return a named theorem (get_thm) or all theorems of
16165 a given theory (thms_of), or find out what theory a theorem was proved in
16168 * Bugs fixed in the inductive definition and datatype packages;
16170 * The classical reasoner provides deepen_tac and depth_tac, making FOL_dup_cs
16171 and HOL_dup_cs obsolete;
16173 * Syntactic ambiguities caused by the new treatment of syntax in Isabelle94-1
16176 * Simpler definition of function space in ZF;
16178 * new results about cardinal and ordinal arithmetic in ZF;
16180 * 'subtype' facility in HOL for introducing new types as subsets of existing
16183 :mode=isabelle-news:wrap=hard:maxLineLen=72: