143 simprocs is gone -- use prems_of_ss on the simpset instead. |
137 simprocs is gone -- use prems_of_ss on the simpset instead. |
144 Moreover, the low-level mk_simproc no longer applies Logic.varify |
138 Moreover, the low-level mk_simproc no longer applies Logic.varify |
145 internally, to allow for use in a context of fixed variables. |
139 internally, to allow for use in a context of fixed variables. |
146 |
140 |
147 * Pure/Simplifier: Command "find_rewrites" takes a string and lists all |
141 * Pure/Simplifier: Command "find_rewrites" takes a string and lists all |
148 equality theorems (not just those with attribute simp!) whose left-hand |
142 equality theorems (not just those declared as simp!) whose left-hand |
149 side matches the term given via the string. In PG the command can be |
143 side matches the term given via the string. In PG the command can be |
150 activated via Isabelle -> Show me -> matching rewrites. |
144 activated via Isabelle -> Show me -> matching rewrites. |
151 |
145 |
152 * Provers: Simplifier and Classical Reasoner now support proof context |
146 * Isar debugging: new reference Toplevel.debug; default false. |
153 dependent plug-ins (simprocs, solvers, wrappers etc.). These extra |
147 Set to make printing of exceptions THM, TERM, TYPE and THEORY more verbose. |
154 components are stored in the theory and patched into the |
148 |
155 simpset/claset when used in an Isar proof context. Context |
149 * Locales: |
156 dependent components are maintained by the following theory |
150 - "includes" disallowed in declaration of named locales (command "locale"). |
157 operations: |
151 - Fixed parameter management in theorem generation for goals with "includes". |
158 |
152 INCOMPATIBILITY: rarely, the generated theorem statement is different. |
159 Simplifier.add_context_simprocs |
153 |
160 Simplifier.del_context_simprocs |
154 * Locales: new commands for the interpretation of locale expressions |
161 Simplifier.set_context_subgoaler |
155 in theories (interpretation) and proof contexts (interpret). These take an |
162 Simplifier.reset_context_subgoaler |
156 instantiation of the locale parameters and compute proof obligations from |
163 Simplifier.add_context_looper |
157 the instantiated specification. After the obligations have been discharged, |
164 Simplifier.del_context_looper |
158 the instantiated theorems of the locale are added to the theory or proof |
165 Simplifier.add_context_unsafe_solver |
159 context. Interpretation is smart in that already active interpretations |
166 Simplifier.add_context_safe_solver |
160 do not occur in proof obligations, neither are instantiated theorems stored |
167 |
161 in duplicate. |
168 Classical.add_context_safe_wrapper |
162 Use print_interps to inspect active interpretations of a particular locale. |
169 Classical.del_context_safe_wrapper |
163 |
170 Classical.add_context_unsafe_wrapper |
164 * Isar: new syntax 'name(i-j, i-, i, ...)' for referring to specific |
171 Classical.del_context_unsafe_wrapper |
165 selections of theorems in named facts via indices. |
172 |
166 |
173 IMPORTANT NOTE: proof tools (methods etc.) need to use |
167 |
174 local_simpset_of and local_claset_of to instead of the primitive |
168 *** Document preparation *** |
175 Simplifier.get_local_simpset and Classical.get_local_claset, |
169 |
176 respectively, in order to see the context dependent fields! |
170 * New antiquotations @{lhs thm} and @{rhs thm} printing the lhs/rhs of |
177 |
171 definitions, equations, inequations etc. |
178 * Document preparation: antiquotations now provide the option |
172 |
179 'locale=NAME' to specify an alternative context used for evaluating |
173 * Antiquotations now provide the option 'locale=NAME' to specify an |
180 and printing the subsequent argument, as in @{thm [locale=LC] |
174 alternative context used for evaluating and printing the subsequent |
181 fold_commute}, for example. |
175 argument, as in @{thm [locale=LC] fold_commute}, for example. |
182 |
176 |
183 * Document preparation: commands 'display_drafts' and 'print_drafts' |
177 * Commands 'display_drafts' and 'print_drafts' perform simple output |
184 perform simple output of raw sources. Only those symbols that do |
178 of raw sources. Only those symbols that do not require additional |
185 not require additional LaTeX packages (depending on comments in |
179 LaTeX packages (depending on comments in isabellesym.sty) are |
186 isabellesym.sty) are displayed properly, everything else is left |
180 displayed properly, everything else is left verbatim. We use |
187 verbatim. We use isatool display and isatool print as front ends; |
181 isatool display and isatool print as front ends; these are subject |
188 these are subject to the DVI_VIEWER and PRINT_COMMAND settings, |
182 to the DVI/PDF_VIEWER and PRINT_COMMAND settings, respectively. |
189 respectively. |
183 |
190 |
184 * Proof scripts as well as some other commands such as ML or |
191 * Document preparation: Proof scripts as well as some other commands |
185 parse/print_translation can now be hidden in the document. Hiding |
192 such as ML or parse/print_translation can now be hidden in the document. |
186 is enabled by default, and can be disabled either via the option '-H |
193 Hiding is enabled by default, and can be disabled either via the option |
187 false' of isatool usedir or by resetting the reference variable |
194 '-H false' of isatool usedir or by resetting the reference variable |
|
195 IsarOutput.hide_commands. Additional commands to be hidden may be |
188 IsarOutput.hide_commands. Additional commands to be hidden may be |
196 declared using IsarOutput.add_hidden_commands. |
189 declared using IsarOutput.add_hidden_commands. |
197 |
190 |
198 * ML: output via the Isabelle channels of writeln/warning/error |
191 |
|
192 *** HOL *** |
|
193 |
|
194 * Datatype induction via method `induct' now preserves the name of the |
|
195 induction variable. For example, when proving P(xs::'a list) by induction |
|
196 on xs, the induction step is now P(xs) ==> P(a#xs) rather than |
|
197 P(list) ==> P(a#list) as previously. |
|
198 |
|
199 * HOL/record: reimplementation of records. Improved scalability for |
|
200 records with many fields, avoiding performance problems for type |
|
201 inference. Records are no longer composed of nested field types, but |
|
202 of nested extension types. Therefore the record type only grows |
|
203 linear in the number of extensions and not in the number of fields. |
|
204 The top-level (users) view on records is preserved. Potential |
|
205 INCOMPATIBILITY only in strange cases, where the theory depends on |
|
206 the old record representation. The type generated for a record is |
|
207 called <record_name>_ext_type. |
|
208 |
|
209 * HOL/record: Reference record_quick_and_dirty_sensitive can be |
|
210 enabled to skip the proofs triggered by a record definition or a |
|
211 simproc (if quick_and_dirty is enabled). Definitions of large |
|
212 records can take quite long. |
|
213 |
|
214 * HOL/record: "record_upd_simproc" for simplification of multiple |
|
215 record updates enabled by default. Moreover, trivial updates are |
|
216 also removed: r(|x := x r|) = r. INCOMPATIBILITY: old proofs break |
|
217 occasionally, since simplification is more powerful by default. |
|
218 |
|
219 * HOL: symbolic syntax of Hilbert Choice Operator is now as follows: |
|
220 |
|
221 syntax (epsilon) |
|
222 "_Eps" :: "[pttrn, bool] => 'a" ("(3\<some>_./ _)" [0, 10] 10) |
|
223 |
|
224 The symbol \<some> is displayed as the alternative epsilon of LaTeX |
|
225 and x-symbol; use option '-m epsilon' to get it actually printed. |
|
226 Moreover, the mathematically important symbolic identifier |
|
227 \<epsilon> becomes available as variable, constant etc. |
|
228 |
|
229 * HOL: "x > y" abbreviates "y < x" and "x >= y" abbreviates "y <= x". |
|
230 Similarly for all quantifiers: "ALL x > y" etc. |
|
231 The x-symbol for >= is \<ge>. |
|
232 |
|
233 * HOL/Set: "{x:A. P}" abbreviates "{x. x:A & P}" |
|
234 (and similarly for "\<in>" instead of ":") |
|
235 |
|
236 * HOL/SetInterval: The syntax for open intervals has changed: |
|
237 |
|
238 Old New |
|
239 {..n(} -> {..<n} |
|
240 {)n..} -> {n<..} |
|
241 {m..n(} -> {m..<n} |
|
242 {)m..n} -> {m<..n} |
|
243 {)m..n(} -> {m<..<n} |
|
244 |
|
245 The old syntax is still supported but will disappear in the future. |
|
246 For conversion use the following emacs search and replace patterns: |
|
247 |
|
248 {)\([^\.]*\)\.\. -> {\1<\.\.} |
|
249 \.\.\([^(}]*\)(} -> \.\.<\1} |
|
250 |
|
251 They are not perfect but work quite well. |
|
252 |
|
253 * HOL: The syntax for 'setsum', summation over finite sets, has changed: |
|
254 |
|
255 The syntax for 'setsum (%x. e) A' used to be '\<Sum>x:A. e' |
|
256 and is now either 'SUM x:A. e' or '\<Sum>x\<in>A. e'. |
|
257 |
|
258 There is new syntax for summation over finite sets: |
|
259 |
|
260 '\<Sum>x | P. e' is the same as 'setsum (%x. e) {x. P}' |
|
261 '\<Sum>x=a..b. e' is the same as 'setsum (%x. e) {a..b}' |
|
262 '\<Sum>x=a..<b. e' is the same as 'setsum (%x. e) {a..<b}' |
|
263 '\<Sum>x<k. e' is the same as 'setsum (%x. e) {..<k}' |
|
264 |
|
265 Function 'Summation' over nat is gone, its syntax '\<Sum>i<k. e' |
|
266 now translates into 'setsum' as above. |
|
267 |
|
268 * HOL: Finite set induction: In Isar proofs, the insert case is now |
|
269 "case (insert x F)" instead of the old counterintuitive "case (insert F x)". |
|
270 |
|
271 * HOL/Simplifier: |
|
272 |
|
273 - Is now set up to reason about transitivity chains involving "trancl" |
|
274 (r^+) and "rtrancl" (r^*) by setting up tactics provided by |
|
275 Provers/trancl.ML as additional solvers. INCOMPATIBILITY: old proofs break |
|
276 occasionally as simplification may now solve more goals than previously. |
|
277 |
|
278 - Converts x <= y into x = y if assumption y <= x is present. Works for |
|
279 all partial orders (class "order"), in particular numbers and sets. For |
|
280 linear orders (e.g. numbers) it treats ~ x < y just like y <= x. |
|
281 |
|
282 - Simproc for "let x = a in f x" |
|
283 If a is a free or bound variable or a constant then the let is unfolded. |
|
284 Otherwise first a is simplified to a', and then f a' is simplified to |
|
285 g. If possible we abstract a' from g arriving at "let x = a' in g' x", |
|
286 otherwise we unfold the let and arrive at g. The simproc can be |
|
287 enabled/disabled by the reference use_let_simproc. Potential |
|
288 INCOMPATIBILITY since simplification is more powerful by default. |
|
289 |
|
290 |
|
291 *** HOLCF *** |
|
292 |
|
293 * HOLCF: discontinued special version of 'constdefs' (which used to |
|
294 support continuous functions) in favor of the general Pure one with |
|
295 full type-inference. |
|
296 |
|
297 |
|
298 *** ZF *** |
|
299 |
|
300 * ZF/ex/{Group,Ring}: examples in abstract algebra, including the |
|
301 First Isomorphism Theorem (on quotienting by the kernel of a |
|
302 homomorphism). |
|
303 |
|
304 * ZF/Simplifier: install second copy of type solver that actually |
|
305 makes use of TC rules declared to Isar proof contexts (or locales); |
|
306 the old version is still required for ML proof scripts. |
|
307 |
|
308 |
|
309 *** System *** |
|
310 |
|
311 * HOL: isatool dimacs2hol converts files in DIMACS CNF format |
|
312 (containing Boolean satisfiability problems) into Isabelle/HOL |
|
313 theories. |
|
314 |
|
315 * isatool usedir: option -f allows specification of the ML file to be |
|
316 used by Isabelle; default is ROOT.ML. |
|
317 |
|
318 * ISABELLE_DOC_FORMAT setting specifies preferred document format (for |
|
319 isatool doc, isatool mkdir, display_drafts etc.). |
|
320 |
|
321 |
|
322 *** ML *** |
|
323 |
|
324 * Pure: output via the Isabelle channels of writeln/warning/error |
199 etc. is now passed through Output.output, with a hook for arbitrary |
325 etc. is now passed through Output.output, with a hook for arbitrary |
200 transformations depending on the print_mode (cf. Output.add_mode -- |
326 transformations depending on the print_mode (cf. Output.add_mode -- |
201 the first active mode that provides a output function wins). |
327 the first active mode that provides a output function wins). |
202 Already formatted output may be embedded into further text via |
328 Already formatted output may be embedded into further text via |
203 Output.raw; the result of Pretty.string_of/str_of and derived |
329 Output.raw; the result of Pretty.string_of/str_of and derived |
209 translations to produce properly formatted results; Output.raw is |
335 translations to produce properly formatted results; Output.raw is |
210 required when capturing already output material that will eventually |
336 required when capturing already output material that will eventually |
211 be presented to the user a second time. For the default print mode, |
337 be presented to the user a second time. For the default print mode, |
212 both Output.output and Output.raw have no effect. |
338 both Output.output and Output.raw have no effect. |
213 |
339 |
214 |
340 * Provers: Simplifier and Classical Reasoner now support proof context |
215 *** Isar *** |
341 dependent plug-ins (simprocs, solvers, wrappers etc.). These extra |
216 |
342 components are stored in the theory and patched into the |
217 * Debugging: new reference Toplevel.debug; default false. |
343 simpset/claset when used in an Isar proof context. Context |
218 Set to make printing of exceptions THM, TERM, TYPE and THEORY more verbose. |
344 dependent components are maintained by the following theory |
219 |
345 operations: |
220 * Locales: |
346 |
221 - "includes" disallowed in declaration of named locales (command "locale"). |
347 Simplifier.add_context_simprocs |
222 - Fixed parameter management in theorem generation for goals with "includes". |
348 Simplifier.del_context_simprocs |
223 INCOMPATIBILITY: rarely, the generated theorem statement is different. |
349 Simplifier.set_context_subgoaler |
224 |
350 Simplifier.reset_context_subgoaler |
225 * Locales: new commands for the interpretation of locale expressions |
351 Simplifier.add_context_looper |
226 in theories (interpretation) and proof contexts (interpret). These take an |
352 Simplifier.del_context_looper |
227 instantiation of the locale parameters and compute proof obligations from |
353 Simplifier.add_context_unsafe_solver |
228 the instantiated specification. After the obligations have been discharged, |
354 Simplifier.add_context_safe_solver |
229 the instantiated theorems of the locale are added to the theory or proof |
355 |
230 context. Interpretation is smart in that already active interpretations |
356 Classical.add_context_safe_wrapper |
231 do not occur in proof obligations, neither are instantiated theorems stored |
357 Classical.del_context_safe_wrapper |
232 in duplicate. |
358 Classical.add_context_unsafe_wrapper |
233 Use print_interps to inspect active interpretations of a particular locale. |
359 Classical.del_context_unsafe_wrapper |
234 |
360 |
235 * New syntax |
361 IMPORTANT NOTE: proof tools (methods etc.) need to use |
236 |
362 local_simpset_of and local_claset_of to instead of the primitive |
237 <theorem_name> (<index>, ..., <index>-<index>, ...) |
363 Simplifier.get_local_simpset and Classical.get_local_claset, |
238 |
364 respectively, in order to see the context dependent fields! |
239 for referring to specific theorems in a named list of theorems via |
|
240 indices. |
|
241 |
|
242 *** HOL *** |
|
243 |
|
244 * Datatype induction via method `induct' now preserves the name of the |
|
245 induction variable. For example, when proving P(xs::'a list) by induction |
|
246 on xs, the induction step is now P(xs) ==> P(a#xs) rather than |
|
247 P(list) ==> P(a#list) as previously. |
|
248 |
|
249 * HOL/record: reimplementation of records. Improved scalability for |
|
250 records with many fields, avoiding performance problems for type |
|
251 inference. Records are no longer composed of nested field types, but |
|
252 of nested extension types. Therefore the record type only grows |
|
253 linear in the number of extensions and not in the number of fields. |
|
254 The top-level (users) view on records is preserved. Potential |
|
255 INCOMPATIBILITY only in strange cases, where the theory depends on |
|
256 the old record representation. The type generated for a record is |
|
257 called <record_name>_ext_type. |
|
258 |
|
259 * HOL/record: Reference record_quick_and_dirty_sensitive can be |
|
260 enabled to skip the proofs triggered by a record definition or a |
|
261 simproc (if quick_and_dirty is enabled). Definitions of large |
|
262 records can take quite long. |
|
263 |
|
264 * HOL/record: "record_upd_simproc" for simplification of multiple |
|
265 record updates enabled by default. Moreover, trivial updates are |
|
266 also removed: r(|x := x r|) = r. INCOMPATIBILITY: old proofs break |
|
267 occasionally, since simplification is more powerful by default. |
|
268 |
|
269 * HOL: symbolic syntax of Hilbert Choice Operator is now as follows: |
|
270 |
|
271 syntax (epsilon) |
|
272 "_Eps" :: "[pttrn, bool] => 'a" ("(3\<some>_./ _)" [0, 10] 10) |
|
273 |
|
274 The symbol \<some> is displayed as the alternative epsilon of LaTeX |
|
275 and x-symbol; use option '-m epsilon' to get it actually printed. |
|
276 Moreover, the mathematically important symbolic identifier |
|
277 \<epsilon> becomes available as variable, constant etc. |
|
278 |
|
279 * HOL: "x > y" abbreviates "y < x" and "x >= y" abbreviates "y <= x". |
|
280 Similarly for all quantifiers: "ALL x > y" etc. |
|
281 The x-symbol for >= is \<ge>. |
|
282 |
|
283 * HOL/Set: "{x:A. P}" abbreviates "{x. x:A & P}" |
|
284 (and similarly for "\<in>" instead of ":") |
|
285 |
|
286 * HOL/SetInterval: The syntax for open intervals has changed: |
|
287 |
|
288 Old New |
|
289 {..n(} -> {..<n} |
|
290 {)n..} -> {n<..} |
|
291 {m..n(} -> {m..<n} |
|
292 {)m..n} -> {m<..n} |
|
293 {)m..n(} -> {m<..<n} |
|
294 |
|
295 The old syntax is still supported but will disappear in the future. |
|
296 For conversion use the following emacs search and replace patterns: |
|
297 |
|
298 {)\([^\.]*\)\.\. -> {\1<\.\.} |
|
299 \.\.\([^(}]*\)(} -> \.\.<\1} |
|
300 |
|
301 They are not perfect but work quite well. |
|
302 |
|
303 * HOL: The syntax for 'setsum', summation over finite sets, has changed: |
|
304 |
|
305 The syntax for 'setsum (%x. e) A' used to be '\<Sum>x:A. e' |
|
306 and is now either 'SUM x:A. e' or '\<Sum>x\<in>A. e'. |
|
307 |
|
308 There is new syntax for summation over finite sets: |
|
309 |
|
310 '\<Sum>x | P. e' is the same as 'setsum (%x. e) {x. P}' |
|
311 '\<Sum>x=a..b. e' is the same as 'setsum (%x. e) {a..b}' |
|
312 '\<Sum>x=a..<b. e' is the same as 'setsum (%x. e) {a..<b}' |
|
313 '\<Sum>x<k. e' is the same as 'setsum (%x. e) {..<k}' |
|
314 |
|
315 Function 'Summation' over nat is gone, its syntax '\<Sum>i<k. e' |
|
316 now translates into 'setsum' as above. |
|
317 |
|
318 * HOL: Finite set induction: In Isar proofs, the insert case is now |
|
319 "case (insert x F)" instead of the old counterintuitive "case (insert F x)". |
|
320 |
|
321 * HOL/Simplifier: |
|
322 |
|
323 - Is now set up to reason about transitivity chains involving "trancl" |
|
324 (r^+) and "rtrancl" (r^*) by setting up tactics provided by |
|
325 Provers/trancl.ML as additional solvers. INCOMPATIBILITY: old proofs break |
|
326 occasionally as simplification may now solve more goals than previously. |
|
327 |
|
328 - Converts x <= y into x = y if assumption y <= x is present. Works for |
|
329 all partial orders (class "order"), in particular numbers and sets. For |
|
330 linear orders (e.g. numbers) it treats ~ x < y just like y <= x. |
|
331 |
|
332 - Simproc for "let x = a in f x" |
|
333 If a is a free or bound variable or a constant then the let is unfolded. |
|
334 Otherwise first a is simplified to a', and then f a' is simplified to |
|
335 g. If possible we abstract a' from g arriving at "let x = a' in g' x", |
|
336 otherwise we unfold the let and arrive at g. The simproc can be |
|
337 enabled/disabled by the reference use_let_simproc. Potential |
|
338 INCOMPATIBILITY since simplification is more powerful by default. |
|
339 |
|
340 * HOL: new 'isatool dimacs2hol' to convert files in DIMACS CNF format |
|
341 (containing Boolean satisfiability problems) into Isabelle/HOL theories. |
|
342 |
|
343 |
|
344 *** HOLCF *** |
|
345 |
|
346 * HOLCF: discontinued special version of 'constdefs' (which used to |
|
347 support continuous functions) in favor of the general Pure one with |
|
348 full type-inference. |
|
349 |
|
350 |
|
351 *** ZF *** |
|
352 |
|
353 * ZF/ex/{Group,Ring}: examples in abstract algebra, including the |
|
354 First Isomorphism Theorem (on quotienting by the kernel of a |
|
355 homomorphism). |
|
356 |
|
357 * ZF/Simplifier: install second copy of type solver that actually |
|
358 makes use of TC rules declared to Isar proof contexts (or locales); |
|
359 the old version is still required for ML proof scripts. |
|
360 |
365 |
361 |
366 |
362 |
367 |
363 New in Isabelle2004 (April 2004) |
368 New in Isabelle2004 (April 2004) |
364 -------------------------------- |
369 -------------------------------- |