| author | wenzelm | 
| Wed, 30 Jun 1999 16:00:06 +0200 | |
| changeset 6863 | 6c8bf18f9da9 | 
| parent 6795 | 35f214e73668 | 
| child 6922 | f5c5b81b3f14 | 
| permissions | -rw-r--r-- | 
| 6420 | 1 | |
| 5363 | 2 | Isabelle NEWS -- history user-relevant changes | 
| 3 | ============================================== | |
| 2553 | 4 | |
| 4981 | 5 | New in this Isabelle version | 
| 6 | ---------------------------- | |
| 4649 | 7 | |
| 5931 | 8 | *** Overview of INCOMPATIBILITIES (see below for more details) *** | 
| 9 | ||
| 6269 | 10 | * HOL: Removed the obsolete syntax "Compl A"; use -A for set | 
| 11 | complement; | |
| 5931 | 12 | |
| 6269 | 13 | * HOL: the predicate "inj" is now defined by translation to "inj_on"; | 
| 6174 | 14 | |
| 6386 
e9e8af97f48f
HOL/typedef: fixed type inference for representing set;
 wenzelm parents: 
6343diff
changeset | 15 | * HOL/typedef: fixed type inference for representing set; type | 
| 
e9e8af97f48f
HOL/typedef: fixed type inference for representing set;
 wenzelm parents: 
6343diff
changeset | 16 | arguments now have to occur explicitly on the rhs as type constraints; | 
| 
e9e8af97f48f
HOL/typedef: fixed type inference for representing set;
 wenzelm parents: 
6343diff
changeset | 17 | |
| 6269 | 18 | * ZF: The con_defs part of an inductive definition may no longer refer | 
| 19 | to constants declared in the same theory; | |
| 6057 | 20 | |
| 6269 | 21 | * HOL, ZF: the function mk_cases, generated by the inductive | 
| 22 | definition package, has lost an argument. To simplify its result, it | |
| 23 | uses the default simpset instead of a supplied list of theorems. | |
| 6141 | 24 | |
| 6057 | 25 | |
| 6069 | 26 | *** Proof tools *** | 
| 27 | ||
| 6343 | 28 | * Provers/Arith/fast_lin_arith.ML contains a functor for creating a | 
| 29 | decision procedure for linear arithmetic. Currently it is used for | |
| 30 | types `nat' and `int' in HOL (see below) but can, should and will be | |
| 31 | instantiated for other types and logics as well. | |
| 6069 | 32 | |
| 33 | ||
| 6014 | 34 | *** General *** | 
| 35 | ||
| 6751 | 36 | * Isabelle manuals now also available as PDF; | 
| 37 | ||
| 6671 | 38 | * improved browser info generation: better HTML markup (including | 
| 39 | colors), graph views in several sizes; isatool usedir now provides a | |
| 40 | proper interface for user theories (via -P option); | |
| 41 | ||
| 6449 | 42 | * theory loader rewritten from scratch (may not be fully | 
| 43 | bug-compatible); old loadpath variable has been replaced by show_path, | |
| 6671 | 44 | add_path, del_path, reset_path functions; new operations such as | 
| 45 | update_thy, touch_thy, remove_thy (see also isatool doc ref); | |
| 6449 | 46 | |
| 6343 | 47 | * in locales, the "assumes" and "defines" parts may be omitted if | 
| 48 | empty; | |
| 5973 | 49 | |
| 6269 | 50 | * new print_mode "xsymbols" for extended symbol support (e.g. genuine | 
| 51 | long arrows); | |
| 6259 
488bdc1bd11a
path element specification '~~' refers to '$ISABELLE_HOME';
 wenzelm parents: 
6174diff
changeset | 52 | |
| 6343 | 53 | * new print_mode "HTML"; | 
| 54 | ||
| 6259 
488bdc1bd11a
path element specification '~~' refers to '$ISABELLE_HOME';
 wenzelm parents: 
6174diff
changeset | 55 | * path element specification '~~' refers to '$ISABELLE_HOME'; | 
| 
488bdc1bd11a
path element specification '~~' refers to '$ISABELLE_HOME';
 wenzelm parents: 
6174diff
changeset | 56 | |
| 6343 | 57 | * new flag show_tags controls display of tags of theorems (which are | 
| 58 | basically just comments that may be attached by some tools); | |
| 59 | ||
| 6420 | 60 | * improved isatool install: option -k creates KDE application icon, | 
| 61 | option -p DIR installs standalone binaries; | |
| 6415 | 62 | |
| 6413 | 63 | * added ML_PLATFORM setting (useful for cross-platform installations); | 
| 6671 | 64 | more robust handling of platform specific ML images for SML/NJ; | 
| 6413 | 65 | |
| 6461 | 66 | * Isamode 2.6 requires patch to accomodate change of Isabelle font | 
| 67 | mode and goal output format: | |
| 68 | ||
| 69 | diff -r Isamode-2.6/elisp/isa-load.el Isamode/elisp/isa-load.el | |
| 70 | 244c244 | |
| 71 | < (list (isa-getenv "ISABELLE") "-msymbols" logic-name) | |
| 72 | --- | |
| 6533 | 73 | > (list (isa-getenv "ISABELLE") "-misabelle_font" "-msymbols" logic-name) | 
| 6461 | 74 | diff -r Isabelle-2.6/elisp/isa-proofstate.el Isamode/elisp/isa-proofstate.el | 
| 75 | 181c181 | |
| 76 | < (defconst proofstate-proofstart-regexp "^Level [0-9]+$" | |
| 77 | --- | |
| 78 | > (defconst proofstate-proofstart-regexp "^Level [0-9]+" | |
| 79 | ||
| 6028 | 80 | |
| 6057 | 81 | *** HOL *** | 
| 82 | ||
| 6343 | 83 | * There are now decision procedures for linear arithmetic over nat and | 
| 84 | int: | |
| 6131 | 85 | |
| 6343 | 86 | 1. arith_tac copes with arbitrary formulae involving `=', `<', `<=', | 
| 87 | `+', `-', `Suc', `min', `max' and numerical constants; other subterms | |
| 88 | are treated as atomic; subformulae not involving type `nat' or `int' | |
| 89 | are ignored; quantified subformulae are ignored unless they are | |
| 90 | positive universal or negative existential. The tactic has to be | |
| 91 | invoked by hand and can be a little bit slow. In particular, the | |
| 92 | running time is exponential in the number of occurrences of `min' and | |
| 93 | `max', and `-' on `nat'. | |
| 6131 | 94 | |
| 6343 | 95 | 2. fast_arith_tac is a cut-down version of arith_tac: it only takes | 
| 96 | (negated) (in)equalities among the premises and the conclusion into | |
| 97 | account (i.e. no compound formulae) and does not know about `min' and | |
| 98 | `max', and `-' on `nat'. It is fast and is used automatically by the | |
| 99 | simplifier. | |
| 6131 | 100 | |
| 6343 | 101 | NB: At the moment, these decision procedures do not cope with mixed | 
| 102 | nat/int formulae where the two parts interact, such as `m < n ==> | |
| 103 | int(m) < int(n)'. | |
| 6028 | 104 | |
| 6403 | 105 | * New bounded quantifier syntax (input only): | 
| 106 | ! x < y. P, ! x <= y. P, ? x < y. P, ? x <= y. P | |
| 107 | ||
| 6278 | 108 | * HOL/TLA (Lamport's Temporal Logic of Actions): major reorganization | 
| 109 | -- avoids syntactic ambiguities and treats state, transition, and | |
| 110 | temporal levels more uniformly; introduces INCOMPATIBILITIES due to | |
| 111 | changed syntax and (many) tactics; | |
| 112 | ||
| 6386 
e9e8af97f48f
HOL/typedef: fixed type inference for representing set;
 wenzelm parents: 
6343diff
changeset | 113 | * HOL/typedef: fixed type inference for representing set; type | 
| 
e9e8af97f48f
HOL/typedef: fixed type inference for representing set;
 wenzelm parents: 
6343diff
changeset | 114 | arguments now have to occur explicitly on the rhs as type constraints; | 
| 
e9e8af97f48f
HOL/typedef: fixed type inference for representing set;
 wenzelm parents: 
6343diff
changeset | 115 | |
| 6671 | 116 | * HOL/recdef (TFL): requires theory Recdef; 'congs' syntax now expects | 
| 117 | comma separated list of theorem names rather than an ML expression; | |
| 6563 | 118 | |
| 6795 | 119 | * reset HOL_quantifiers by default, i.e. quantifiers are printed as | 
| 120 | ALL/EX rather than !/?; | |
| 121 | ||
| 6269 | 122 | |
| 6064 | 123 | *** ZF *** | 
| 124 | ||
| 125 | * new primrec section allows primitive recursive functions to be given | |
| 6269 | 126 | directly (as in HOL) over datatypes and the natural numbers; | 
| 6064 | 127 | |
| 6269 | 128 | * new tactics induct_tac and exhaust_tac for induction (or case | 
| 129 | analysis) over datatypes and the natural numbers; | |
| 6064 | 130 | |
| 131 | * the datatype declaration of type T now defines the recursor T_rec; | |
| 132 | ||
| 6141 | 133 | * simplification automatically does freeness reasoning for datatype | 
| 6269 | 134 | constructors; | 
| 6141 | 135 | |
| 6269 | 136 | * automatic type-inference, with AddTCs command to insert new | 
| 137 | type-checking rules; | |
| 6155 | 138 | |
| 6269 | 139 | * datatype introduction rules are now added as Safe Introduction rules | 
| 140 | to the claset; | |
| 6155 | 141 | |
| 6269 | 142 | * the syntax "if P then x else y" is now available in addition to | 
| 143 | if(P,x,y); | |
| 144 | ||
| 6069 | 145 | |
| 6343 | 146 | *** Internal programming interfaces *** | 
| 147 | ||
| 6386 
e9e8af97f48f
HOL/typedef: fixed type inference for representing set;
 wenzelm parents: 
6343diff
changeset | 148 | * AxClass.axclass_tac lost the theory argument; | 
| 
e9e8af97f48f
HOL/typedef: fixed type inference for representing set;
 wenzelm parents: 
6343diff
changeset | 149 | |
| 6343 | 150 | * tuned current_goals_markers semantics: begin / end goal avoids | 
| 151 | printing empty lines; | |
| 152 | ||
| 153 | * removed prs and prs_fn hook, which was broken because it did not | |
| 154 | include \n in its semantics, forcing writeln to add one | |
| 155 | uncoditionally; replaced prs_fn by writeln_fn; consider std_output: | |
| 156 | string -> unit if you really want to output text without newline; | |
| 157 | ||
| 158 | * Symbol.output subject to print mode; INCOMPATIBILITY: defaults to | |
| 159 | plain output, interface builders may have to enable 'isabelle_font' | |
| 160 | mode to get Isabelle font glyphs as before; | |
| 161 | ||
| 162 | * refined token_translation interface; INCOMPATIBILITY: output length | |
| 163 | now of type real instead of int; | |
| 164 | ||
| 165 | ||
| 6064 | 166 | |
| 5781 | 167 | New in Isabelle98-1 (October 1998) | 
| 168 | ---------------------------------- | |
| 169 | ||
| 5127 | 170 | *** Overview of INCOMPATIBILITIES (see below for more details) *** | 
| 4842 | 171 | |
| 5726 | 172 | * several changes of automated proof tools; | 
| 5373 | 173 | |
| 5726 | 174 | * HOL: major changes to the inductive and datatype packages, including | 
| 175 | some minor incompatibilities of theory syntax; | |
| 5214 | 176 | |
| 5726 | 177 | * HOL: renamed r^-1 to 'converse' from 'inverse'; 'inj_onto' is now | 
| 5217 | 178 | called `inj_on'; | 
| 5160 | 179 | |
| 5275 | 180 | * HOL: removed duplicate thms in Arith: | 
| 181 | less_imp_add_less should be replaced by trans_less_add1 | |
| 182 | le_imp_add_le should be replaced by trans_le_add1 | |
| 5160 | 183 | |
| 5726 | 184 | * HOL: unary minus is now overloaded (new type constraints may be | 
| 185 | required); | |
| 5490 | 186 | |
| 5726 | 187 | * HOL and ZF: unary minus for integers is now #- instead of #~. In | 
| 188 | ZF, expressions such as n#-1 must be changed to n#- 1, since #-1 is | |
| 189 | now taken as an integer constant. | |
| 5541 | 190 | |
| 5726 | 191 | * Pure: ML function 'theory_of' renamed to 'theory'; | 
| 5397 
034ed25535b9
* Pure: ML function 'theory_of' replaced by 'theory';
 wenzelm parents: 
5373diff
changeset | 192 | |
| 5363 | 193 | |
| 5127 | 194 | *** Proof tools *** | 
| 4880 | 195 | |
| 5657 
1a6c9c6a3f8e
  2. The simplifier now knows a little bit about nat-arithmetic.
 nipkow parents: 
5651diff
changeset | 196 | * Simplifier: | 
| 
1a6c9c6a3f8e
  2. The simplifier now knows a little bit about nat-arithmetic.
 nipkow parents: 
5651diff
changeset | 197 | 1. Asm_full_simp_tac is now more aggressive. | 
| 
1a6c9c6a3f8e
  2. The simplifier now knows a little bit about nat-arithmetic.
 nipkow parents: 
5651diff
changeset | 198 | 1. It will sometimes reorient premises if that increases their power to | 
| 
1a6c9c6a3f8e
  2. The simplifier now knows a little bit about nat-arithmetic.
 nipkow parents: 
5651diff
changeset | 199 | simplify. | 
| 
1a6c9c6a3f8e
  2. The simplifier now knows a little bit about nat-arithmetic.
 nipkow parents: 
5651diff
changeset | 200 | 2. It does no longer proceed strictly from left to right but may also | 
| 
1a6c9c6a3f8e
  2. The simplifier now knows a little bit about nat-arithmetic.
 nipkow parents: 
5651diff
changeset | 201 | rotate premises to achieve further simplification. | 
| 
1a6c9c6a3f8e
  2. The simplifier now knows a little bit about nat-arithmetic.
 nipkow parents: 
5651diff
changeset | 202 | For compatibility reasons there is now Asm_lr_simp_tac which is like the | 
| 
1a6c9c6a3f8e
  2. The simplifier now knows a little bit about nat-arithmetic.
 nipkow parents: 
5651diff
changeset | 203 | old Asm_full_simp_tac in that it does not rotate premises. | 
| 
1a6c9c6a3f8e
  2. The simplifier now knows a little bit about nat-arithmetic.
 nipkow parents: 
5651diff
changeset | 204 | 2. The simplifier now knows a little bit about nat-arithmetic. | 
| 4880 | 205 | |
| 5127 | 206 | * Classical reasoner: wrapper mechanism for the classical reasoner now | 
| 207 | allows for selected deletion of wrappers, by introduction of names for | |
| 208 | wrapper functionals. This implies that addbefore, addSbefore, | |
| 209 | addaltern, and addSaltern now take a pair (name, tactic) as argument, | |
| 210 | and that adding two tactics with the same name overwrites the first | |
| 211 | one (emitting a warning). | |
| 4824 | 212 | type wrapper = (int -> tactic) -> (int -> tactic) | 
| 4649 | 213 | setWrapper, setSWrapper, compWrapper and compSWrapper are replaced by | 
| 4824 | 214 | addWrapper, addSWrapper: claset * (string * wrapper) -> claset | 
| 215 | delWrapper, delSWrapper: claset * string -> claset | |
| 4649 | 216 | getWrapper is renamed to appWrappers, getSWrapper to appSWrappers; | 
| 217 | ||
| 5705 
56f2030c46c6
tuned (all proofs are INSTABLE by David's definition of instability);
 wenzelm parents: 
5671diff
changeset | 218 | * Classical reasoner: addbefore/addSbefore now have APPEND/ORELSE | 
| 5726 | 219 | semantics; addbefore now affects only the unsafe part of step_tac | 
| 220 | etc.; this affects addss/auto_tac/force_tac, so EXISTING PROOFS MAY | |
| 221 | FAIL, but proofs should be fixable easily, e.g. by replacing Auto_tac | |
| 222 | by Force_tac; | |
| 5524 | 223 | |
| 5726 | 224 | * Classical reasoner: setwrapper to setWrapper and compwrapper to | 
| 225 | compWrapper; added safe wrapper (and access functions for it); | |
| 5524 | 226 | |
| 5127 | 227 | * HOL/split_all_tac is now much faster and fails if there is nothing | 
| 5726 | 228 | to split. Some EXISTING PROOFS MAY REQUIRE ADAPTION because the order | 
| 229 | and the names of the automatically generated variables have changed. | |
| 230 | split_all_tac has moved within claset() from unsafe wrappers to safe | |
| 231 | wrappers, which means that !!-bound variables are split much more | |
| 232 | aggressively, and safe_tac and clarify_tac now split such variables. | |
| 233 | If this splitting is not appropriate, use delSWrapper "split_all_tac". | |
| 234 | Note: the same holds for record_split_tac, which does the job of | |
| 235 | split_all_tac for record fields. | |
| 5127 | 236 | |
| 5726 | 237 | * HOL/Simplifier: Rewrite rules for case distinctions can now be added | 
| 238 | permanently to the default simpset using Addsplits just like | |
| 239 | Addsimps. They can be removed via Delsplits just like | |
| 240 | Delsimps. Lower-case versions are also available. | |
| 5127 | 241 | |
| 5726 | 242 | * HOL/Simplifier: The rule split_if is now part of the default | 
| 243 | simpset. This means that the simplifier will eliminate all occurrences | |
| 244 | of if-then-else in the conclusion of a goal. To prevent this, you can | |
| 245 | either remove split_if completely from the default simpset by | |
| 246 | `Delsplits [split_if]' or remove it in a specific call of the | |
| 247 | simplifier using `... delsplits [split_if]'. You can also add/delete | |
| 248 | other case splitting rules to/from the default simpset: every datatype | |
| 249 | generates suitable rules `split_t_case' and `split_t_case_asm' (where | |
| 250 | t is the name of the datatype). | |
| 5127 | 251 | |
| 5726 | 252 | * Classical reasoner / Simplifier combination: new force_tac (and | 
| 5127 | 253 | derivatives Force_tac, force) combines rewriting and classical | 
| 254 | reasoning (and whatever other tools) similarly to auto_tac, but is | |
| 5726 | 255 | aimed to solve the given subgoal completely. | 
| 5127 | 256 | |
| 257 | ||
| 258 | *** General *** | |
| 259 | ||
| 5217 | 260 | * new top-level commands `Goal' and `Goalw' that improve upon `goal' | 
| 5127 | 261 | and `goalw': the theory is no longer needed as an explicit argument - | 
| 262 | the current theory context is used; assumptions are no longer returned | |
| 263 | at the ML-level unless one of them starts with ==> or !!; it is | |
| 5217 | 264 | recommended to convert to these new commands using isatool fixgoal | 
| 265 | (backup your sources first!); | |
| 4842 | 266 | |
| 5217 | 267 | * new top-level commands 'thm' and 'thms' for retrieving theorems from | 
| 5207 | 268 | the current theory context, and 'theory' to lookup stored theories; | 
| 4806 | 269 | |
| 5722 | 270 | * new theory section 'locale' for declaring constants, assumptions and | 
| 271 | definitions that have local scope; | |
| 272 | ||
| 5127 | 273 | * new theory section 'nonterminals' for purely syntactic types; | 
| 4858 | 274 | |
| 5127 | 275 | * new theory section 'setup' for generic ML setup functions | 
| 276 | (e.g. package initialization); | |
| 4869 | 277 | |
| 5131 | 278 | * the distribution now includes Isabelle icons: see | 
| 279 | lib/logo/isabelle-{small,tiny}.xpm;
 | |
| 280 | ||
| 5363 | 281 | * isatool install - install binaries with absolute references to | 
| 282 | ISABELLE_HOME/bin; | |
| 283 | ||
| 5572 | 284 | * isatool logo -- create instances of the Isabelle logo (as EPS); | 
| 285 | ||
| 5407 | 286 | * print mode 'emacs' reserved for Isamode; | 
| 287 | ||
| 5726 | 288 | * support multiple print (ast) translations per constant name; | 
| 289 | ||
| 4711 | 290 | |
| 4661 | 291 | *** HOL *** | 
| 292 | ||
| 5710 | 293 | * there is now a tutorial on Isabelle/HOL (do 'isatool doc tutorial'); | 
| 5709 | 294 | |
| 5217 | 295 | * HOL/inductive package reorganized and improved: now supports mutual | 
| 5267 | 296 | definitions such as | 
| 5217 | 297 | |
| 298 | inductive EVEN ODD | |
| 299 | intrs | |
| 300 | null "0 : EVEN" | |
| 301 | oddI "n : EVEN ==> Suc n : ODD" | |
| 302 | evenI "n : ODD ==> Suc n : EVEN" | |
| 303 | ||
| 304 | new theorem list "elims" contains an elimination rule for each of the | |
| 305 | recursive sets; inductive definitions now handle disjunctive premises | |
| 306 | correctly (also ZF); | |
| 5214 | 307 | |
| 5217 | 308 | INCOMPATIBILITIES: requires Inductive as an ancestor; component | 
| 309 | "mutual_induct" no longer exists - the induction rule is always | |
| 310 | contained in "induct"; | |
| 311 | ||
| 312 | ||
| 313 | * HOL/datatype package re-implemented and greatly improved: now | |
| 5267 | 314 | supports mutually recursive datatypes such as | 
| 5217 | 315 | |
| 316 | datatype | |
| 317 |     'a aexp = IF_THEN_ELSE ('a bexp) ('a aexp) ('a aexp)
 | |
| 318 |             | SUM ('a aexp) ('a aexp)
 | |
| 319 |             | DIFF ('a aexp) ('a aexp)
 | |
| 320 | | NUM 'a | |
| 321 | and | |
| 322 |     'a bexp = LESS ('a aexp) ('a aexp)
 | |
| 323 |             | AND ('a bexp) ('a bexp)
 | |
| 324 |             | OR ('a bexp) ('a bexp)
 | |
| 325 | ||
| 5267 | 326 | as well as indirectly recursive datatypes such as | 
| 5214 | 327 | |
| 5217 | 328 | datatype | 
| 329 |     ('a, 'b) term = Var 'a
 | |
| 330 |                   | App 'b ((('a, 'b) term) list)
 | |
| 5214 | 331 | |
| 5217 | 332 | The new tactic mutual_induct_tac [<var_1>, ..., <var_n>] i performs | 
| 333 | induction on mutually / indirectly recursive datatypes. | |
| 334 | ||
| 335 | Primrec equations are now stored in theory and can be accessed via | |
| 336 | <function_name>.simps. | |
| 337 | ||
| 338 | INCOMPATIBILITIES: | |
| 5214 | 339 | |
| 5217 | 340 | - Theories using datatypes must now have theory Datatype as an | 
| 341 | ancestor. | |
| 342 | - The specific <typename>.induct_tac no longer exists - use the | |
| 343 | generic induct_tac instead. | |
| 5226 | 344 | - natE has been renamed to nat.exhaust - use exhaust_tac | 
| 5217 | 345 | instead of res_inst_tac ... natE. Note that the variable | 
| 5226 | 346 | names in nat.exhaust differ from the names in natE, this | 
| 5217 | 347 | may cause some "fragile" proofs to fail. | 
| 348 | - The theorems split_<typename>_case and split_<typename>_case_asm | |
| 349 | have been renamed to <typename>.split and <typename>.split_asm. | |
| 350 | - Since default sorts of type variables are now handled correctly, | |
| 351 | some datatype definitions may have to be annotated with explicit | |
| 352 | sort constraints. | |
| 353 | - Primrec definitions no longer require function name and type | |
| 354 | of recursive argument. | |
| 5214 | 355 | |
| 5217 | 356 | Consider using isatool fixdatatype to adapt your theories and proof | 
| 357 | scripts to the new package (backup your sources first!). | |
| 358 | ||
| 359 | ||
| 5726 | 360 | * HOL/record package: considerably improved implementation; now | 
| 361 | includes concrete syntax for record types, terms, updates; theorems | |
| 362 | for surjective pairing and splitting !!-bound record variables; proof | |
| 363 | support is as follows: | |
| 364 | ||
| 365 | 1) standard conversions (selectors or updates applied to record | |
| 366 | constructor terms) are part of the standard simpset; | |
| 367 | ||
| 368 | 2) inject equations of the form ((x, y) = (x', y')) == x=x' & y=y' are | |
| 369 | made part of standard simpset and claset via addIffs; | |
| 370 | ||
| 371 | 3) a tactic for record field splitting (record_split_tac) is part of | |
| 372 | the standard claset (addSWrapper); | |
| 373 | ||
| 374 | To get a better idea about these rules you may retrieve them via | |
| 375 | something like 'thms "foo.simps"' or 'thms "foo.iffs"', where "foo" is | |
| 376 | the name of your record type. | |
| 377 | ||
| 378 | The split tactic 3) conceptually simplifies by the following rule: | |
| 379 | ||
| 380 | "(!!x. PROP ?P x) == (!!a b. PROP ?P (a, b))" | |
| 381 | ||
| 382 | Thus any record variable that is bound by meta-all will automatically | |
| 383 | blow up into some record constructor term, consequently the | |
| 384 | simplifications of 1), 2) apply. Thus force_tac, auto_tac etc. shall | |
| 385 | solve record problems automatically. | |
| 386 | ||
| 5214 | 387 | |
| 5125 | 388 | * reorganized the main HOL image: HOL/Integ and String loaded by | 
| 389 | default; theory Main includes everything; | |
| 390 | ||
| 5650 | 391 | * automatic simplification of integer sums and comparisons, using cancellation; | 
| 392 | ||
| 5526 | 393 | * added option_map_eq_Some and not_Some_eq to the default simpset and claset; | 
| 5127 | 394 | |
| 395 | * added disj_not1 = "(~P | Q) = (P --> Q)" to the default simpset; | |
| 396 | ||
| 397 | * many new identities for unions, intersections, set difference, etc.; | |
| 398 | ||
| 399 | * expand_if, expand_split, expand_sum_case and expand_nat_case are now | |
| 400 | called split_if, split_split, split_sum_case and split_nat_case (to go | |
| 401 | with add/delsplits); | |
| 5125 | 402 | |
| 5127 | 403 | * HOL/Prod introduces simplification procedure unit_eq_proc rewriting | 
| 404 | (?x::unit) = (); this is made part of the default simpset, which COULD | |
| 405 | MAKE EXISTING PROOFS FAIL under rare circumstances (consider | |
| 5207 | 406 | 'Delsimprocs [unit_eq_proc];' as last resort); also note that | 
| 407 | unit_abs_eta_conv is added in order to counter the effect of | |
| 408 | unit_eq_proc on (%u::unit. f u), replacing it by f rather than by | |
| 409 | %u.f(); | |
| 5125 | 410 | |
| 5217 | 411 | * HOL/Fun INCOMPATIBILITY: `inj_onto' is now called `inj_on' (which | 
| 412 | makes more sense); | |
| 5109 | 413 | |
| 5475 | 414 | * HOL/Set INCOMPATIBILITY: rule `equals0D' is now a well-formed destruct rule; | 
| 415 | It and 'sym RS equals0D' are now in the default claset, giving automatic | |
| 416 | disjointness reasoning but breaking a few old proofs. | |
| 5267 | 417 | |
| 5217 | 418 | * HOL/Relation INCOMPATIBILITY: renamed the relational operator r^-1 | 
| 419 | to 'converse' from 'inverse' (for compatibility with ZF and some | |
| 420 | literature); | |
| 5085 
8e5a7942fdea
simplification procedure unit_eq_proc rewrites (?x::unit) = ();
 wenzelm parents: 
5077diff
changeset | 421 | |
| 5127 | 422 | * HOL/recdef can now declare non-recursive functions, with {} supplied as
 | 
| 423 | the well-founded relation; | |
| 4838 | 424 | |
| 5490 | 425 | * HOL/Set INCOMPATIBILITY: the complement of set A is now written -A instead of | 
| 426 | Compl A. The "Compl" syntax remains available as input syntax for this | |
| 427 | release ONLY. | |
| 428 | ||
| 5127 | 429 | * HOL/Update: new theory of function updates: | 
| 430 | f(a:=b) == %x. if x=a then b else f x | |
| 431 | may also be iterated as in f(a:=b,c:=d,...); | |
| 5077 
71043526295f
* HOL/List: new function list_update written xs[i:=v] that updates the i-th
 nipkow parents: 
5075diff
changeset | 432 | |
| 5127 | 433 | * HOL/Vimage: new theory for inverse image of a function, syntax f-``B; | 
| 4899 | 434 | |
| 5282 | 435 | * HOL/List: | 
| 436 | - new function list_update written xs[i:=v] that updates the i-th | |
| 437 | list position. May also be iterated as in xs[i:=a,j:=b,...]. | |
| 5428 | 438 | - new function `upt' written [i..j(] which generates the list | 
| 439 | [i,i+1,...,j-1], i.e. the upper bound is excluded. To include the upper | |
| 440 | bound write [i..j], which is a shorthand for [i..j+1(]. | |
| 5282 | 441 | - new lexicographic orderings and corresponding wellfoundedness theorems. | 
| 4779 | 442 | |
| 5127 | 443 | * HOL/Arith: | 
| 444 | - removed 'pred' (predecessor) function; | |
| 445 | - generalized some theorems about n-1; | |
| 446 | - many new laws about "div" and "mod"; | |
| 447 | - new laws about greatest common divisors (see theory ex/Primes); | |
| 4766 | 448 | |
| 5127 | 449 | * HOL/Relation: renamed the relational operator r^-1 "converse" | 
| 4842 | 450 | instead of "inverse"; | 
| 4711 | 451 | |
| 5651 | 452 | * HOL/Induct/Multiset: a theory of multisets, including the wellfoundedness | 
| 453 | of the multiset ordering; | |
| 454 | ||
| 5127 | 455 | * directory HOL/Real: a construction of the reals using Dedekind cuts | 
| 5651 | 456 | (not included by default); | 
| 4835 | 457 | |
| 5127 | 458 | * directory HOL/UNITY: Chandy and Misra's UNITY formalism; | 
| 4711 | 459 | |
| 5651 | 460 | * directory HOL/Hoare: a new version of Hoare logic which permits many-sorted | 
| 461 | programs, i.e. different program variables may have different types. | |
| 462 | ||
| 5142 | 463 | * calling (stac rew i) now fails if "rew" has no effect on the goal | 
| 464 | [previously, this check worked only if the rewrite rule was unconditional] | |
| 5308 | 465 | Now rew can involve either definitions or equalities (either == or =). | 
| 5002 
7b4c2a153738
* improved the theory data mechanism to support real encapsulation;
 wenzelm parents: 
4981diff
changeset | 466 | |
| 5363 | 467 | |
| 4879 
58656c6a3551
"let" is no longer restricted to FOL terms and allows any logical terms
 paulson parents: 
4869diff
changeset | 468 | *** ZF *** | 
| 
58656c6a3551
"let" is no longer restricted to FOL terms and allows any logical terms
 paulson parents: 
4869diff
changeset | 469 | |
| 5332 | 470 | * theory Main includes everything; INCOMPATIBILITY: theory ZF.thy contains | 
| 471 | only the theorems proved on ZF.ML; | |
| 5160 | 472 | |
| 5475 | 473 | * ZF INCOMPATIBILITY: rule `equals0D' is now a well-formed destruct rule; | 
| 474 | It and 'sym RS equals0D' are now in the default claset, giving automatic | |
| 475 | disjointness reasoning but breaking a few old proofs. | |
| 5267 | 476 | |
| 5160 | 477 | * ZF/Update: new theory of function updates | 
| 478 | with default rewrite rule f(x:=y) ` z = if(z=x, y, f`z) | |
| 479 | may also be iterated as in f(a:=b,c:=d,...); | |
| 480 | ||
| 4879 
58656c6a3551
"let" is no longer restricted to FOL terms and allows any logical terms
 paulson parents: 
4869diff
changeset | 481 | * in let x=t in u(x), neither t nor u(x) has to be an FOL term. | 
| 4649 | 482 | |
| 5142 | 483 | * calling (stac rew i) now fails if "rew" has no effect on the goal | 
| 484 | [previously, this check worked only if the rewrite rule was unconditional] | |
| 5308 | 485 | Now rew can involve either definitions or equalities (either == or =). | 
| 5142 | 486 | |
| 5160 | 487 | * case_tac provided for compatibility with HOL | 
| 488 | (like the old excluded_middle_tac, but with subgoals swapped) | |
| 489 | ||
| 4842 | 490 | |
| 5127 | 491 | *** Internal programming interfaces *** | 
| 5002 
7b4c2a153738
* improved the theory data mechanism to support real encapsulation;
 wenzelm parents: 
4981diff
changeset | 492 | |
| 5251 | 493 | * Pure: several new basic modules made available for general use, see | 
| 494 | also src/Pure/README; | |
| 5207 | 495 | |
| 5008 | 496 | * improved the theory data mechanism to support encapsulation (data | 
| 497 | kind name replaced by private Object.kind, acting as authorization | |
| 5373 | 498 | key); new type-safe user interface via functor TheoryDataFun; generic | 
| 499 | print_data function becomes basically useless; | |
| 5002 
7b4c2a153738
* improved the theory data mechanism to support real encapsulation;
 wenzelm parents: 
4981diff
changeset | 500 | |
| 5251 | 501 | * removed global_names compatibility flag -- all theory declarations | 
| 502 | are qualified by default; | |
| 503 | ||
| 5085 
8e5a7942fdea
simplification procedure unit_eq_proc rewrites (?x::unit) = ();
 wenzelm parents: 
5077diff
changeset | 504 | * module Pure/Syntax now offers quote / antiquote translation | 
| 
8e5a7942fdea
simplification procedure unit_eq_proc rewrites (?x::unit) = ();
 wenzelm parents: 
5077diff
changeset | 505 | functions (useful for Hoare logic etc. with implicit dependencies); | 
| 5373 | 506 | see HOL/ex/Antiquote for an example use; | 
| 5085 
8e5a7942fdea
simplification procedure unit_eq_proc rewrites (?x::unit) = ();
 wenzelm parents: 
5077diff
changeset | 507 | |
| 5127 | 508 | * Simplifier now offers conversions (asm_)(full_)rewrite: simpset -> | 
| 509 | cterm -> thm; | |
| 510 | ||
| 5207 | 511 | * new tactical CHANGED_GOAL for checking that a tactic modifies a | 
| 512 | subgoal; | |
| 5142 | 513 | |
| 5251 | 514 | * Display.print_goals function moved to Locale.print_goals; | 
| 515 | ||
| 5731 | 516 | * standard print function for goals supports current_goals_markers | 
| 517 | variable for marking begin of proof, end of proof, start of goal; the | |
| 518 | default is ("", "", ""); setting current_goals_markers := ("<proof>",
 | |
| 519 | "</proof>", "<goal>") causes SGML like tagged proof state printing, | |
| 520 | for example; | |
| 521 | ||
| 5002 
7b4c2a153738
* improved the theory data mechanism to support real encapsulation;
 wenzelm parents: 
4981diff
changeset | 522 | |
| 
7b4c2a153738
* improved the theory data mechanism to support real encapsulation;
 wenzelm parents: 
4981diff
changeset | 523 | |
| 4410 | 524 | New in Isabelle98 (January 1998) | 
| 525 | -------------------------------- | |
| 526 | ||
| 527 | *** Overview of INCOMPATIBILITIES (see below for more details) *** | |
| 528 | ||
| 529 | * changed lexical syntax of terms / types: dots made part of long | |
| 530 | identifiers, e.g. "%x.x" no longer possible, should be "%x. x"; | |
| 531 | ||
| 532 | * simpset (and claset) reference variable replaced by functions | |
| 533 | simpset / simpset_ref; | |
| 534 | ||
| 535 | * no longer supports theory aliases (via merge) and non-trivial | |
| 536 | implicit merge of thms' signatures; | |
| 537 | ||
| 538 | * most internal names of constants changed due to qualified names; | |
| 539 | ||
| 540 | * changed Pure/Sequence interface (see Pure/seq.ML); | |
| 541 | ||
| 3454 | 542 | |
| 3715 | 543 | *** General Changes *** | 
| 544 | ||
| 4174 | 545 | * hierachically structured name spaces (for consts, types, axms, thms | 
| 3943 | 546 | etc.); new lexical class 'longid' (e.g. Foo.bar.x) may render much of | 
| 4108 | 547 | old input syntactically incorrect (e.g. "%x.x"); COMPATIBILITY: | 
| 548 | isatool fixdots ensures space after dots (e.g. "%x. x"); set | |
| 4174 | 549 | long_names for fully qualified output names; NOTE: ML programs | 
| 550 | (special tactics, packages etc.) referring to internal names may have | |
| 551 | to be adapted to cope with fully qualified names; in case of severe | |
| 552 | backward campatibility problems try setting 'global_names' at compile | |
| 553 | time to have enrything declared within a flat name space; one may also | |
| 554 | fine tune name declarations in theories via the 'global' and 'local' | |
| 555 | section; | |
| 4108 | 556 | |
| 557 | * reimplemented the implicit simpset and claset using the new anytype | |
| 558 | data filed in signatures; references simpset:simpset ref etc. are | |
| 559 | replaced by functions simpset:unit->simpset and | |
| 560 | simpset_ref:unit->simpset ref; COMPATIBILITY: use isatool fixclasimp | |
| 561 | to patch your ML files accordingly; | |
| 3856 | 562 | |
| 3857 | 563 | * HTML output now includes theory graph data for display with Java | 
| 564 | applet or isatool browser; data generated automatically via isatool | |
| 3901 | 565 | usedir (see -i option, ISABELLE_USEDIR_OPTIONS); | 
| 3857 | 566 | |
| 3856 | 567 | * defs may now be conditional; improved rewrite_goals_tac to handle | 
| 568 | conditional equations; | |
| 569 | ||
| 4174 | 570 | * defs now admits additional type arguments, using TYPE('a) syntax;
 | 
| 571 | ||
| 3901 | 572 | * theory aliases via merge (e.g. M=A+B+C) no longer supported, always | 
| 573 | creates a new theory node; implicit merge of thms' signatures is | |
| 4112 | 574 | restricted to 'trivial' ones; COMPATIBILITY: one may have to use | 
| 3901 | 575 | transfer:theory->thm->thm in (rare) cases; | 
| 576 | ||
| 3968 
ec138de716d9
improved handling of draft signatures / theories; draft thms (and
 wenzelm parents: 
3964diff
changeset | 577 | * improved handling of draft signatures / theories; draft thms (and | 
| 
ec138de716d9
improved handling of draft signatures / theories; draft thms (and
 wenzelm parents: 
3964diff
changeset | 578 | ctyps, cterms) are automatically promoted to real ones; | 
| 
ec138de716d9
improved handling of draft signatures / theories; draft thms (and
 wenzelm parents: 
3964diff
changeset | 579 | |
| 3901 | 580 | * slightly changed interfaces for oracles: admit many per theory, named | 
| 581 | (e.g. oracle foo = mlfun), additional name argument for invoke_oracle; | |
| 582 | ||
| 583 | * print_goals: optional output of const types (set show_consts and | |
| 584 | show_types); | |
| 3851 
fe9932a7cd46
print_goals: optional output of const types (set show_consts);
 wenzelm parents: 
3846diff
changeset | 585 | |
| 4388 | 586 | * improved output of warnings (###) and errors (***); | 
| 3697 
c5833dfcc2cc
Pure: fixed idt/idts vs. pttrn/pttrns syntactic categories;
 wenzelm parents: 
3671diff
changeset | 587 | |
| 4178 
e64ff1c1bc70
subgoal_tac displays a warning if the new subgoal has type variables
 paulson parents: 
4174diff
changeset | 588 | * subgoal_tac displays a warning if the new subgoal has type variables; | 
| 
e64ff1c1bc70
subgoal_tac displays a warning if the new subgoal has type variables
 paulson parents: 
4174diff
changeset | 589 | |
| 3715 | 590 | * removed old README and Makefiles; | 
| 3697 
c5833dfcc2cc
Pure: fixed idt/idts vs. pttrn/pttrns syntactic categories;
 wenzelm parents: 
3671diff
changeset | 591 | |
| 3856 | 592 | * replaced print_goals_ref hook by print_current_goals_fn and result_error_fn; | 
| 3670 
9fea3562f8c7
replaced print_goals_ref hook by print_current_goals_fn and
 wenzelm parents: 
3658diff
changeset | 593 | |
| 3715 | 594 | * removed obsolete init_pps and init_database; | 
| 595 | ||
| 596 | * deleted the obsolete tactical STATE, which was declared by | |
| 597 | fun STATE tacfun st = tacfun st st; | |
| 598 | ||
| 4388 | 599 | * cd and use now support path variables, e.g. $ISABELLE_HOME, or ~ | 
| 600 | (which abbreviates $HOME); | |
| 4269 | 601 | |
| 602 | * changed Pure/Sequence interface (see Pure/seq.ML); COMPATIBILITY: | |
| 603 | use isatool fixseq to adapt your ML programs (this works for fully | |
| 604 | qualified references to the Sequence structure only!); | |
| 605 | ||
| 4381 | 606 | * use_thy no longer requires writable current directory; it always | 
| 607 | reloads .ML *and* .thy file, if either one is out of date; | |
| 4269 | 608 | |
| 3715 | 609 | |
| 610 | *** Classical Reasoner *** | |
| 611 | ||
| 3744 | 612 | * Clarify_tac, clarify_tac, clarify_step_tac, Clarify_step_tac: new | 
| 613 | tactics that use classical reasoning to simplify a subgoal without | |
| 614 | splitting it into several subgoals; | |
| 3715 | 615 | |
| 3719 | 616 | * Safe_tac: like safe_tac but uses the default claset; | 
| 617 | ||
| 3715 | 618 | |
| 619 | *** Simplifier *** | |
| 620 | ||
| 621 | * added simplification meta rules: | |
| 622 | (asm_)(full_)simplify: simpset -> thm -> thm; | |
| 623 | ||
| 624 | * simplifier.ML no longer part of Pure -- has to be loaded by object | |
| 625 | logics (again); | |
| 626 | ||
| 627 | * added prems argument to simplification procedures; | |
| 628 | ||
| 4325 | 629 | * HOL, FOL, ZF: added infix function `addsplits': | 
| 630 | instead of `<simpset> setloop (split_tac <thms>)' | |
| 631 | you can simply write `<simpset> addsplits <thms>' | |
| 632 | ||
| 3715 | 633 | |
| 634 | *** Syntax *** | |
| 635 | ||
| 4174 | 636 | * TYPE('a) syntax for type reflection terms;
 | 
| 637 | ||
| 3985 | 638 | * no longer handles consts with name "" -- declare as 'syntax' instead; | 
| 3856 | 639 | |
| 640 | * pretty printer: changed order of mixfix annotation preference (again!); | |
| 3846 | 641 | |
| 3715 | 642 | * Pure: fixed idt/idts vs. pttrn/pttrns syntactic categories; | 
| 643 | ||
| 644 | ||
| 645 | *** HOL *** | |
| 646 | ||
| 5726 | 647 | * HOL: there is a new splitter `split_asm_tac' that can be used e.g. | 
| 4189 | 648 | with `addloop' of the simplifier to faciliate case splitting in premises. | 
| 649 | ||
| 4035 | 650 | * HOL/TLA: Stephan Merz's formalization of Lamport's Temporal Logic of Actions; | 
| 3985 | 651 | |
| 652 | * HOL/Auth: new protocol proofs including some for the Internet | |
| 4035 | 653 | protocol TLS; | 
| 3985 | 654 | |
| 4125 | 655 | * HOL/Map: new theory of `maps' a la VDM; | 
| 3982 | 656 | |
| 4335 | 657 | * HOL/simplifier: simplification procedures nat_cancel_sums for | 
| 658 | cancelling out common nat summands from =, <, <= (in)equalities, or | |
| 659 | differences; simplification procedures nat_cancel_factor for | |
| 660 | cancelling common factor from =, <, <= (in)equalities over natural | |
| 4373 | 661 | sums; nat_cancel contains both kinds of procedures, it is installed by | 
| 662 | default in Arith.thy -- this COULD MAKE EXISTING PROOFS FAIL; | |
| 4335 | 663 | |
| 3580 | 664 | * HOL/simplifier: terms of the form | 
| 4325 | 665 | `? x. P1(x) & ... & Pn(x) & x=t & Q1(x) & ... Qn(x)' (or t=x) | 
| 3580 | 666 | are rewritten to | 
| 4035 | 667 | `P1(t) & ... & Pn(t) & Q1(t) & ... Qn(t)', | 
| 668 | and those of the form | |
| 4325 | 669 | `! x. P1(x) & ... & Pn(x) & x=t & Q1(x) & ... Qn(x) --> R(x)' (or t=x) | 
| 4035 | 670 | are rewritten to | 
| 671 | `P1(t) & ... & Pn(t) & Q1(t) & ... Qn(t) --> R(t)', | |
| 672 | ||
| 673 | * HOL/datatype | |
| 674 | Each datatype `t' now comes with a theorem `split_t_case' of the form | |
| 3580 | 675 | |
| 4035 | 676 | P(t_case f1 ... fn x) = | 
| 677 | ( (!y1 ... ym1. x = C1 y1 ... ym1 --> P(f1 y1 ... ym1)) & | |
| 678 | ... | |
| 4189 | 679 | (!y1 ... ymn. x = Cn y1 ... ymn --> P(f1 y1 ... ymn)) | 
| 4035 | 680 | ) | 
| 681 | ||
| 4930 
89271bc4e7ed
extended addsplits and delsplits to handle also split rules for assumptions
 oheimb parents: 
4915diff
changeset | 682 | and a theorem `split_t_case_asm' of the form | 
| 4189 | 683 | |
| 684 | P(t_case f1 ... fn x) = | |
| 685 | ~( (? y1 ... ym1. x = C1 y1 ... ym1 & ~P(f1 y1 ... ym1)) | | |
| 686 | ... | |
| 687 | (? y1 ... ymn. x = Cn y1 ... ymn & ~P(f1 y1 ... ymn)) | |
| 688 | ) | |
| 4930 
89271bc4e7ed
extended addsplits and delsplits to handle also split rules for assumptions
 oheimb parents: 
4915diff
changeset | 689 | which can be added to a simpset via `addsplits'. The existing theorems | 
| 
89271bc4e7ed
extended addsplits and delsplits to handle also split rules for assumptions
 oheimb parents: 
4915diff
changeset | 690 | expand_list_case and expand_option_case have been renamed to | 
| 
89271bc4e7ed
extended addsplits and delsplits to handle also split rules for assumptions
 oheimb parents: 
4915diff
changeset | 691 | split_list_case and split_option_case. | 
| 4189 | 692 | |
| 4361 | 693 | * HOL/Arithmetic: | 
| 694 | - `pred n' is automatically converted to `n-1'. | |
| 695 | Users are strongly encouraged not to use `pred' any longer, | |
| 696 | because it will disappear altogether at some point. | |
| 697 | - Users are strongly encouraged to write "0 < n" rather than | |
| 698 | "n ~= 0". Theorems and proof tools have been modified towards this | |
| 699 | `standard'. | |
| 4357 | 700 | |
| 4502 | 701 | * HOL/Lists: | 
| 702 | the function "set_of_list" has been renamed "set" (and its theorems too); | |
| 703 | the function "nth" now takes its arguments in the reverse order and | |
| 704 | has acquired the infix notation "!" as in "xs!n". | |
| 3570 | 705 | |
| 4154 | 706 | * HOL/Set: UNIV is now a constant and is no longer translated to Compl{};
 | 
| 707 | ||
| 708 | * HOL/Set: The operator (UN x.B x) now abbreviates (UN x:UNIV. B x) and its | |
| 709 | specialist theorems (like UN1_I) are gone. Similarly for (INT x.B x); | |
| 710 | ||
| 4575 | 711 | * HOL/record: extensible records with schematic structural subtyping | 
| 712 | (single inheritance); EXPERIMENTAL version demonstrating the encoding, | |
| 713 | still lacks various theorems and concrete record syntax; | |
| 714 | ||
| 4125 | 715 | |
| 3715 | 716 | *** HOLCF *** | 
| 3535 | 717 | |
| 4125 | 718 | * removed "axioms" and "generated by" sections; | 
| 719 | ||
| 4123 | 720 | * replaced "ops" section by extended "consts" section, which is capable of | 
| 4125 | 721 | handling the continuous function space "->" directly; | 
| 722 | ||
| 723 | * domain package: | |
| 724 | . proves theorems immediately and stores them in the theory, | |
| 725 | . creates hierachical name space, | |
| 726 | . now uses normal mixfix annotations (instead of cinfix...), | |
| 727 | . minor changes to some names and values (for consistency), | |
| 728 | . e.g. cases -> casedist, dists_eq -> dist_eqs, [take_lemma] -> take_lemmas, | |
| 729 | . separator between mutual domain defs: changed "," to "and", | |
| 730 | . improved handling of sort constraints; now they have to | |
| 731 | appear on the left-hand side of the equations only; | |
| 4123 | 732 | |
| 733 | * fixed LAM <x,y,zs>.b syntax; | |
| 3567 | 734 | |
| 3744 | 735 | * added extended adm_tac to simplifier in HOLCF -- can now discharge | 
| 736 | adm (%x. P (t x)), where P is chainfinite and t continuous; | |
| 3579 | 737 | |
| 738 | ||
| 3719 | 739 | *** FOL and ZF *** | 
| 740 | ||
| 5726 | 741 | * FOL: there is a new splitter `split_asm_tac' that can be used e.g. | 
| 4189 | 742 | with `addloop' of the simplifier to faciliate case splitting in premises. | 
| 743 | ||
| 3744 | 744 | * qed_spec_mp, qed_goal_spec_mp, qed_goalw_spec_mp are available, as | 
| 745 | in HOL, they strip ALL and --> from proved theorems; | |
| 746 | ||
| 3719 | 747 | |
| 3579 | 748 | |
| 3006 | 749 | New in Isabelle94-8 (May 1997) | 
| 750 | ------------------------------ | |
| 2654 | 751 | |
| 3002 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 752 | *** General Changes *** | 
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 753 | |
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 754 | * new utilities to build / run / maintain Isabelle etc. (in parts | 
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 755 | still somewhat experimental); old Makefiles etc. still functional; | 
| 2971 | 756 | |
| 3205 | 757 | * new 'Isabelle System Manual'; | 
| 758 | ||
| 2825 | 759 | * INSTALL text, together with ./configure and ./build scripts; | 
| 2773 | 760 | |
| 3006 | 761 | * reimplemented type inference for greater efficiency, better error | 
| 762 | messages and clean internal interface; | |
| 3002 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 763 | |
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 764 | * prlim command for dealing with lots of subgoals (an easier way of | 
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 765 | setting goals_limit); | 
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 766 | |
| 3006 | 767 | |
| 768 | *** Syntax *** | |
| 3002 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 769 | |
| 3116 | 770 | * supports alternative (named) syntax tables (parser and pretty | 
| 771 | printer); internal interface is provided by add_modesyntax(_i); | |
| 772 | ||
| 3002 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 773 | * Pure, FOL, ZF, HOL, HOLCF now support symbolic input and output; to | 
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 774 | be used in conjunction with the Isabelle symbol font; uses the | 
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 775 | "symbols" syntax table; | 
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 776 | |
| 2705 | 777 | * added token_translation interface (may translate name tokens in | 
| 2756 | 778 | arbitrary ways, dependent on their type (free, bound, tfree, ...) and | 
| 3116 | 779 | the current print_mode); IMPORTANT: user print translation functions | 
| 780 | are responsible for marking newly introduced bounds | |
| 781 | (Syntax.mark_boundT); | |
| 2705 | 782 | |
| 2730 | 783 | * token translations for modes "xterm" and "xterm_color" that display | 
| 3006 | 784 | names in bold, underline etc. or colors (which requires a color | 
| 785 | version of xterm); | |
| 2730 | 786 | |
| 3002 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 787 | * infixes may now be declared with names independent of their syntax; | 
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 788 | |
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 789 | * added typed_print_translation (like print_translation, but may | 
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 790 | access type of constant); | 
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 791 | |
| 3006 | 792 | |
| 3002 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 793 | *** Classical Reasoner *** | 
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 794 | |
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 795 | Blast_tac: a new tactic! It is often more powerful than fast_tac, but has | 
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 796 | some limitations. Blast_tac... | 
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 797 | + ignores addss, addbefore, addafter; this restriction is intrinsic | 
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 798 | + ignores elimination rules that don't have the correct format | 
| 5726 | 799 | (the conclusion MUST be a formula variable) | 
| 3002 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 800 | + ignores types, which can make HOL proofs fail | 
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 801 | + rules must not require higher-order unification, e.g. apply_type in ZF | 
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 802 | [message "Function Var's argument not a bound variable" relates to this] | 
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 803 | + its proof strategy is more general but can actually be slower | 
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 804 | |
| 3107 | 805 | * substitution with equality assumptions no longer permutes other | 
| 806 | assumptions; | |
| 3002 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 807 | |
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 808 | * minor changes in semantics of addafter (now called addaltern); renamed | 
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 809 | setwrapper to setWrapper and compwrapper to compWrapper; added safe wrapper | 
| 3107 | 810 | (and access functions for it); | 
| 3002 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 811 | |
| 5726 | 812 | * improved combination of classical reasoner and simplifier: | 
| 3317 | 813 | + functions for handling clasimpsets | 
| 814 | + improvement of addss: now the simplifier is called _after_ the | |
| 815 | safe steps. | |
| 816 | + safe variant of addss called addSss: uses safe simplifications | |
| 5726 | 817 | _during_ the safe steps. It is more complete as it allows multiple | 
| 3317 | 818 | instantiations of unknowns (e.g. with slow_tac). | 
| 3006 | 819 | |
| 3002 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 820 | *** Simplifier *** | 
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 821 | |
| 3006 | 822 | * added interface for simplification procedures (functions that | 
| 823 | produce *proven* rewrite rules on the fly, depending on current | |
| 824 | redex); | |
| 825 | ||
| 826 | * ordering on terms as parameter (used for ordered rewriting); | |
| 827 | ||
| 3107 | 828 | * new functions delcongs, deleqcongs, and Delcongs. richer rep_ss; | 
| 3002 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 829 | |
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 830 | * the solver is now split into a safe and an unsafe part. | 
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 831 | This should be invisible for the normal user, except that the | 
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 832 | functions setsolver and addsolver have been renamed to setSolver and | 
| 3107 | 833 | addSolver; added safe_asm_full_simp_tac; | 
| 3002 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 834 | |
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 835 | |
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 836 | *** HOL *** | 
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 837 | |
| 3042 | 838 | * a generic induction tactic `induct_tac' which works for all datatypes and | 
| 3107 | 839 | also for type `nat'; | 
| 3042 | 840 | |
| 3316 | 841 | * a generic case distinction tactic `exhaust_tac' which works for all | 
| 842 | datatypes and also for type `nat'; | |
| 843 | ||
| 844 | * each datatype comes with a function `size'; | |
| 845 | ||
| 3002 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 846 | * patterns in case expressions allow tuple patterns as arguments to | 
| 3107 | 847 | constructors, for example `case x of [] => ... | (x,y,z)#ps => ...'; | 
| 3002 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 848 | |
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 849 | * primrec now also works with type nat; | 
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 850 | |
| 3338 | 851 | * recdef: a new declaration form, allows general recursive functions to be | 
| 852 | defined in theory files. See HOL/ex/Fib, HOL/ex/Primes, HOL/Subst/Unify. | |
| 853 | ||
| 3002 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 854 | * the constant for negation has been renamed from "not" to "Not" to | 
| 3107 | 855 | harmonize with FOL, ZF, LK, etc.; | 
| 3002 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 856 | |
| 3107 | 857 | * HOL/ex/LFilter theory of a corecursive "filter" functional for | 
| 858 | infinite lists; | |
| 3002 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 859 | |
| 3227 | 860 | * HOL/Modelcheck demonstrates invocation of model checker oracle; | 
| 861 | ||
| 3002 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 862 | * HOL/ex/Ring.thy declares cring_simp, which solves equational | 
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 863 | problems in commutative rings, using axiomatic type classes for + and *; | 
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 864 | |
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 865 | * more examples in HOL/MiniML and HOL/Auth; | 
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 866 | |
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 867 | * more default rewrite rules for quantifiers, union/intersection; | 
| 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 868 | |
| 3321 | 869 | * a new constant `arbitrary == @x.False'; | 
| 870 | ||
| 3107 | 871 | * HOLCF/IOA replaces old HOL/IOA; | 
| 872 | ||
| 5726 | 873 | * HOLCF changes: derived all rules and arities | 
| 874 | + axiomatic type classes instead of classes | |
| 2653 
f1a6997cdc06
described changes for HOLCF-Version without rules and arities
 slotosch parents: 
2649diff
changeset | 875 | + typedef instead of faking type definitions | 
| 2747 | 876 | + eliminated the internal constants less_fun, less_cfun, UU_fun, UU_cfun etc. | 
| 2730 | 877 | + new axclasses cpo, chfin, flat with flat < chfin < pcpo < cpo < po | 
| 2653 
f1a6997cdc06
described changes for HOLCF-Version without rules and arities
 slotosch parents: 
2649diff
changeset | 878 | + eliminated the types void, one, tr | 
| 
f1a6997cdc06
described changes for HOLCF-Version without rules and arities
 slotosch parents: 
2649diff
changeset | 879 | + use unit lift and bool lift (with translations) instead of one and tr | 
| 
f1a6997cdc06
described changes for HOLCF-Version without rules and arities
 slotosch parents: 
2649diff
changeset | 880 | + eliminated blift from Lift3.thy (use Def instead of blift) | 
| 3107 | 881 | all eliminated rules are derived as theorems --> no visible changes ; | 
| 2649 | 882 | |
| 3006 | 883 | |
| 3002 
223e5d65faaa
Reorganized under headings.  Also documented Blast_tac and LFilter
 paulson parents: 
2993diff
changeset | 884 | *** ZF *** | 
| 2553 | 885 | |
| 2865 | 886 | * ZF now has Fast_tac, Simp_tac and Auto_tac. Union_iff is a now a default | 
| 887 | rewrite rule; this may affect some proofs. eq_cs is gone but can be put back | |
| 888 | as ZF_cs addSIs [equalityI]; | |
| 2553 | 889 | |
| 2554 | 890 | |
| 2732 | 891 | |
| 2553 | 892 | New in Isabelle94-7 (November 96) | 
| 893 | --------------------------------- | |
| 894 | ||
| 895 | * allowing negative levels (as offsets) in prlev and choplev; | |
| 896 | ||
| 2554 | 897 | * super-linear speedup for large simplifications; | 
| 898 | ||
| 899 | * FOL, ZF and HOL now use miniscoping: rewriting pushes | |
| 900 | quantifications in as far as possible (COULD MAKE EXISTING PROOFS | |
| 901 | FAIL); can suppress it using the command Delsimps (ex_simps @ | |
| 902 | all_simps); De Morgan laws are also now included, by default; | |
| 903 | ||
| 904 | * improved printing of ==> : ~: | |
| 905 | ||
| 906 | * new object-logic "Sequents" adds linear logic, while replacing LK | |
| 907 | and Modal (thanks to Sara Kalvala); | |
| 908 | ||
| 909 | * HOL/Auth: correctness proofs for authentication protocols; | |
| 910 | ||
| 911 | * HOL: new auto_tac combines rewriting and classical reasoning (many | |
| 912 | examples on HOL/Auth); | |
| 913 | ||
| 914 | * HOL: new command AddIffs for declaring theorems of the form P=Q to | |
| 915 | the rewriter and classical reasoner simultaneously; | |
| 916 | ||
| 917 | * function uresult no longer returns theorems in "standard" format; | |
| 918 | regain previous version by: val uresult = standard o uresult; | |
| 919 | ||
| 920 | ||
| 921 | ||
| 922 | New in Isabelle94-6 | |
| 923 | ------------------- | |
| 924 | ||
| 925 | * oracles -- these establish an interface between Isabelle and trusted | |
| 926 | external reasoners, which may deliver results as theorems; | |
| 927 | ||
| 928 | * proof objects (in particular record all uses of oracles); | |
| 929 | ||
| 930 | * Simp_tac, Fast_tac, etc. that refer to implicit simpset / claset; | |
| 931 | ||
| 932 | * "constdefs" section in theory files; | |
| 933 | ||
| 934 | * "primrec" section (HOL) no longer requires names; | |
| 935 | ||
| 936 | * internal type "tactic" now simply "thm -> thm Sequence.seq"; | |
| 937 | ||
| 938 | ||
| 939 | ||
| 940 | New in Isabelle94-5 | |
| 941 | ------------------- | |
| 942 | ||
| 943 | * reduced space requirements; | |
| 944 | ||
| 945 | * automatic HTML generation from theories; | |
| 946 | ||
| 947 | * theory files no longer require "..." (quotes) around most types; | |
| 948 | ||
| 949 | * new examples, including two proofs of the Church-Rosser theorem; | |
| 950 | ||
| 951 | * non-curried (1994) version of HOL is no longer distributed; | |
| 952 | ||
| 2553 | 953 | |
| 2557 | 954 | |
| 955 | New in Isabelle94-4 | |
| 956 | ------------------- | |
| 957 | ||
| 2747 | 958 | * greatly reduced space requirements; | 
| 2557 | 959 | |
| 960 | * theory files (.thy) no longer require \...\ escapes at line breaks; | |
| 961 | ||
| 5726 | 962 | * searchable theorem database (see the section "Retrieving theorems" on | 
| 2557 | 963 | page 8 of the Reference Manual); | 
| 964 | ||
| 965 | * new examples, including Grabczewski's monumental case study of the | |
| 966 | Axiom of Choice; | |
| 967 | ||
| 968 | * The previous version of HOL renamed to Old_HOL; | |
| 969 | ||
| 5726 | 970 | * The new version of HOL (previously called CHOL) uses a curried syntax | 
| 2557 | 971 | for functions. Application looks like f a b instead of f(a,b); | 
| 972 | ||
| 973 | * Mutually recursive inductive definitions finally work in HOL; | |
| 974 | ||
| 975 | * In ZF, pattern-matching on tuples is now available in all abstractions and | |
| 976 | translates to the operator "split"; | |
| 977 | ||
| 978 | ||
| 979 | ||
| 980 | New in Isabelle94-3 | |
| 981 | ------------------- | |
| 982 | ||
| 5726 | 983 | * new infix operator, addss, allowing the classical reasoner to | 
| 2557 | 984 | perform simplification at each step of its search. Example: | 
| 5726 | 985 | fast_tac (cs addss ss) | 
| 2557 | 986 | |
| 5726 | 987 | * a new logic, CHOL, the same as HOL, but with a curried syntax | 
| 988 | for functions. Application looks like f a b instead of f(a,b). Also pairs | |
| 2557 | 989 | look like (a,b) instead of <a,b>; | 
| 990 | ||
| 991 | * PLEASE NOTE: CHOL will eventually replace HOL! | |
| 992 | ||
| 993 | * In CHOL, pattern-matching on tuples is now available in all abstractions. | |
| 994 | It translates to the operator "split". A new theory of integers is available; | |
| 995 | ||
| 996 | * In ZF, integer numerals now denote two's-complement binary integers. | |
| 997 | Arithmetic operations can be performed by rewriting. See ZF/ex/Bin.ML; | |
| 998 | ||
| 5726 | 999 | * Many new examples: I/O automata, Church-Rosser theorem, equivalents | 
| 2557 | 1000 | of the Axiom of Choice; | 
| 1001 | ||
| 1002 | ||
| 1003 | ||
| 1004 | New in Isabelle94-2 | |
| 1005 | ------------------- | |
| 1006 | ||
| 5726 | 1007 | * Significantly faster resolution; | 
| 2557 | 1008 | |
| 1009 | * the different sections in a .thy file can now be mixed and repeated | |
| 1010 | freely; | |
| 1011 | ||
| 1012 | * Database of theorems for FOL, HOL and ZF. New | |
| 1013 | commands including qed, qed_goal and bind_thm store theorems in the database. | |
| 1014 | ||
| 1015 | * Simple database queries: return a named theorem (get_thm) or all theorems of | |
| 1016 | a given theory (thms_of), or find out what theory a theorem was proved in | |
| 1017 | (theory_of_thm); | |
| 1018 | ||
| 1019 | * Bugs fixed in the inductive definition and datatype packages; | |
| 1020 | ||
| 1021 | * The classical reasoner provides deepen_tac and depth_tac, making FOL_dup_cs | |
| 1022 | and HOL_dup_cs obsolete; | |
| 1023 | ||
| 1024 | * Syntactic ambiguities caused by the new treatment of syntax in Isabelle94-1 | |
| 1025 | have been removed; | |
| 1026 | ||
| 1027 | * Simpler definition of function space in ZF; | |
| 1028 | ||
| 1029 | * new results about cardinal and ordinal arithmetic in ZF; | |
| 1030 | ||
| 1031 | * 'subtype' facility in HOL for introducing new types as subsets of existing | |
| 1032 | types; | |
| 1033 | ||
| 1034 | ||
| 2553 | 1035 | $Id$ |