3 |
3 |
4 New in Isabelle2009-2 (June 2010) |
4 New in Isabelle2009-2 (June 2010) |
5 --------------------------------- |
5 --------------------------------- |
6 |
6 |
7 *** General *** |
7 *** General *** |
8 |
|
9 * Schematic theorem statements need to be explicitly markup as such, |
|
10 via commands 'schematic_lemma', 'schematic_theorem', |
|
11 'schematic_corollary'. Thus the relevance of the proof is made |
|
12 syntactically clear, which impacts performance in a parallel or |
|
13 asynchronous interactive environment. Minor INCOMPATIBILITY. |
|
14 |
8 |
15 * Authentic syntax for *all* logical entities (type classes, type |
9 * Authentic syntax for *all* logical entities (type classes, type |
16 constructors, term constants): provides simple and robust |
10 constructors, term constants): provides simple and robust |
17 correspondence between formal entities and concrete syntax. Within |
11 correspondence between formal entities and concrete syntax. Within |
18 the parse tree / AST representations, "constants" are decorated by |
12 the parse tree / AST representations, "constants" are decorated by |
67 * Concrete syntax may be attached to local entities without a proof |
61 * Concrete syntax may be attached to local entities without a proof |
68 body, too. This works via regular mixfix annotations for 'fix', |
62 body, too. This works via regular mixfix annotations for 'fix', |
69 'def', 'obtain' etc. or via the explicit 'write' command, which is |
63 'def', 'obtain' etc. or via the explicit 'write' command, which is |
70 similar to the 'notation' command in theory specifications. |
64 similar to the 'notation' command in theory specifications. |
71 |
65 |
72 * Use of cumulative prems via "!" in some proof methods has been |
|
73 discontinued (legacy feature). |
|
74 |
|
75 * References 'trace_simp' and 'debug_simp' have been replaced by |
|
76 configuration options stored in the context. Enabling tracing (the |
|
77 case of debugging is similar) in proofs works via |
|
78 |
|
79 using [[trace_simp = true]] |
|
80 |
|
81 Tracing is then active for all invocations of the simplifier in |
|
82 subsequent goal refinement steps. Tracing may also still be enabled or |
|
83 disabled via the ProofGeneral settings menu. |
|
84 |
|
85 * Separate commands 'hide_class', 'hide_type', 'hide_const', |
|
86 'hide_fact' replace the former 'hide' KIND command. Minor |
|
87 INCOMPATIBILITY. |
|
88 |
|
89 * Improved parallelism of proof term normalization: usedir -p2 -q0 is |
|
90 more efficient than combinations with -q1 or -q2. |
|
91 |
|
92 |
|
93 *** Pure *** |
|
94 |
|
95 * Predicates of locales introduced by classes carry a mandatory |
|
96 "class" prefix. INCOMPATIBILITY. |
|
97 |
|
98 * Command 'code_reflect' allows to incorporate generated ML code into |
|
99 runtime environment; replaces immature code_datatype antiquotation. |
|
100 INCOMPATIBILITY. |
|
101 |
|
102 * Empty class specifications observe default sort. INCOMPATIBILITY. |
|
103 |
|
104 * Old 'axclass' command has been discontinued. Use 'class' instead. |
|
105 INCOMPATIBILITY. |
|
106 |
|
107 * Code generator: simple concept for abstract datatypes obeying |
|
108 invariants. |
|
109 |
|
110 * Local theory specifications may depend on extra type variables that |
|
111 are not present in the result type -- arguments TYPE('a) :: 'a itself |
|
112 are added internally. For example: |
|
113 |
|
114 definition unitary :: bool where "unitary = (ALL (x::'a) y. x = y)" |
|
115 |
|
116 * Code generator: details of internal data cache have no impact on the |
|
117 user space functionality any longer. |
|
118 |
|
119 * Methods unfold_locales and intro_locales ignore non-locale subgoals. |
|
120 This is more appropriate for interpretations with 'where'. |
|
121 INCOMPATIBILITY. |
|
122 |
|
123 * Discontinued unnamed infix syntax (legacy feature for many years) -- |
66 * Discontinued unnamed infix syntax (legacy feature for many years) -- |
124 need to specify constant name and syntax separately. Internal ML |
67 need to specify constant name and syntax separately. Internal ML |
125 datatype constructors have been renamed from InfixName to Infix etc. |
68 datatype constructors have been renamed from InfixName to Infix etc. |
126 Minor INCOMPATIBILITY. |
69 Minor INCOMPATIBILITY. |
127 |
70 |
|
71 * Schematic theorem statements need to be explicitly markup as such, |
|
72 via commands 'schematic_lemma', 'schematic_theorem', |
|
73 'schematic_corollary'. Thus the relevance of the proof is made |
|
74 syntactically clear, which impacts performance in a parallel or |
|
75 asynchronous interactive environment. Minor INCOMPATIBILITY. |
|
76 |
|
77 * Use of cumulative prems via "!" in some proof methods has been |
|
78 discontinued (old legacy feature). |
|
79 |
|
80 * References 'trace_simp' and 'debug_simp' have been replaced by |
|
81 configuration options stored in the context. Enabling tracing (the |
|
82 case of debugging is similar) in proofs works via |
|
83 |
|
84 using [[trace_simp = true]] |
|
85 |
|
86 Tracing is then active for all invocations of the simplifier in |
|
87 subsequent goal refinement steps. Tracing may also still be enabled or |
|
88 disabled via the ProofGeneral settings menu. |
|
89 |
|
90 * Separate commands 'hide_class', 'hide_type', 'hide_const', |
|
91 'hide_fact' replace the former 'hide' KIND command. Minor |
|
92 INCOMPATIBILITY. |
|
93 |
|
94 * Improved parallelism of proof term normalization: usedir -p2 -q0 is |
|
95 more efficient than combinations with -q1 or -q2. |
|
96 |
|
97 |
|
98 *** Pure *** |
|
99 |
|
100 * Proofterms record type-class reasoning explicitly, using the |
|
101 "unconstrain" operation internally. This eliminates all sort |
|
102 constraints from a theorem and proof, introducing explicit |
|
103 OFCLASS-premises. On the proof term level, this operation is |
|
104 automatically applied at theorem boundaries, such that closed proofs |
|
105 are always free of sort constraints. INCOMPATIBILITY for tools that |
|
106 inspect proof terms. |
|
107 |
|
108 * Local theory specifications may depend on extra type variables that |
|
109 are not present in the result type -- arguments TYPE('a) :: 'a itself |
|
110 are added internally. For example: |
|
111 |
|
112 definition unitary :: bool where "unitary = (ALL (x::'a) y. x = y)" |
|
113 |
|
114 * Predicates of locales introduced by classes carry a mandatory |
|
115 "class" prefix. INCOMPATIBILITY. |
|
116 |
|
117 * Vacuous class specifications observe default sort. INCOMPATIBILITY. |
|
118 |
|
119 * Old 'axclass' command has been discontinued. INCOMPATIBILITY, use |
|
120 'class' instead. |
|
121 |
|
122 * Command 'code_reflect' allows to incorporate generated ML code into |
|
123 runtime environment; replaces immature code_datatype antiquotation. |
|
124 INCOMPATIBILITY. |
|
125 |
|
126 * Code generator: simple concept for abstract datatypes obeying |
|
127 invariants. |
|
128 |
|
129 * Code generator: details of internal data cache have no impact on the |
|
130 user space functionality any longer. |
|
131 |
|
132 * Methods "unfold_locales" and "intro_locales" ignore non-locale |
|
133 subgoals. This is more appropriate for interpretations with 'where'. |
|
134 INCOMPATIBILITY. |
|
135 |
128 * Command 'example_proof' opens an empty proof body. This allows to |
136 * Command 'example_proof' opens an empty proof body. This allows to |
129 experiment with Isar, without producing any persistent result. |
137 experiment with Isar, without producing any persistent result. |
130 |
138 |
131 * Commands 'type_notation' and 'no_type_notation' declare type syntax |
139 * Commands 'type_notation' and 'no_type_notation' declare type syntax |
132 within a local theory context, with explicit checking of the |
140 within a local theory context, with explicit checking of the |
137 assumptions, which is not possible in Isabelle/Pure. |
145 assumptions, which is not possible in Isabelle/Pure. |
138 |
146 |
139 * Command 'defaultsort' has been renamed to 'default_sort', it works |
147 * Command 'defaultsort' has been renamed to 'default_sort', it works |
140 within a local theory context. Minor INCOMPATIBILITY. |
148 within a local theory context. Minor INCOMPATIBILITY. |
141 |
149 |
142 * Raw axioms/defs may no longer carry sort constraints, and raw defs |
|
143 may no longer carry premises. User-level specifications are |
|
144 transformed accordingly by Thm.add_axiom/add_def. |
|
145 |
|
146 * Proof terms: Type substitutions on proof constants now use canonical |
|
147 order of type variables. INCOMPATIBILITY for tools working with proof |
|
148 terms. |
|
149 |
|
150 * New operation Thm.unconstrainT eliminates all sort constraints from |
|
151 a theorem and proof, introducing explicit OFCLASS-premises. On the |
|
152 proof term level, this operation is automatically applied at PThm |
|
153 boundaries, such that closed proofs are always free of sort |
|
154 constraints. The old (axiomatic) unconstrain operation has been |
|
155 discontinued. INCOMPATIBILITY for tools working with proof terms. |
|
156 |
|
157 |
150 |
158 *** HOL *** |
151 *** HOL *** |
|
152 |
|
153 * Command 'typedef' now works within a local theory context -- without |
|
154 introducing dependencies on parameters or assumptions, which is not |
|
155 possible in Isabelle/Pure/HOL. Note that the logical environment may |
|
156 contain multiple interpretations of local typedefs (with different |
|
157 non-emptiness proofs), even in a global theory context. |
|
158 |
|
159 * New package for quotient types. Commands 'quotient_type' and |
|
160 'quotient_definition' may be used for defining types and constants by |
|
161 quotient constructions. An example is the type of integers created by |
|
162 quotienting pairs of natural numbers: |
|
163 |
|
164 fun |
|
165 intrel :: "(nat * nat) => (nat * nat) => bool" |
|
166 where |
|
167 "intrel (x, y) (u, v) = (x + v = u + y)" |
|
168 |
|
169 quotient_type int = "nat × nat" / intrel |
|
170 by (auto simp add: equivp_def expand_fun_eq) |
|
171 |
|
172 quotient_definition |
|
173 "0::int" is "(0::nat, 0::nat)" |
|
174 |
|
175 The method "lifting" can be used to lift of theorems from the |
|
176 underlying "raw" type to the quotient type. The example |
|
177 src/HOL/Quotient_Examples/FSet.thy includes such a quotient |
|
178 construction and provides a reasoning infrastructure for finite sets. |
|
179 |
|
180 * Renamed Library/Quotient.thy to Library/Quotient_Type.thy to avoid |
|
181 clash with new theory Quotient in Main HOL. |
|
182 |
|
183 * Moved the SMT binding into the main HOL session, eliminating |
|
184 separate HOL-SMT session. |
159 |
185 |
160 * List membership infix mem operation is only an input abbreviation. |
186 * List membership infix mem operation is only an input abbreviation. |
161 INCOMPATIBILITY. |
187 INCOMPATIBILITY. |
162 |
188 |
163 * Theory Library/Word.thy has been removed. Use library Word/Word.thy |
189 * Theory Library/Word.thy has been removed. Use library Word/Word.thy |
216 |
242 |
217 * Library theory "RBT" renamed to "RBT_Impl"; new library theory "RBT" |
243 * Library theory "RBT" renamed to "RBT_Impl"; new library theory "RBT" |
218 provides abstract red-black tree type which is backed by "RBT_Impl" as |
244 provides abstract red-black tree type which is backed by "RBT_Impl" as |
219 implementation. INCOMPATIBILTY. |
245 implementation. INCOMPATIBILTY. |
220 |
246 |
221 * Command 'typedef' now works within a local theory context -- without |
|
222 introducing dependencies on parameters or assumptions, which is not |
|
223 possible in Isabelle/Pure/HOL. Note that the logical environment may |
|
224 contain multiple interpretations of local typedefs (with different |
|
225 non-emptiness proofs), even in a global theory context. |
|
226 |
|
227 * Theory Library/Coinductive_List has been removed -- superseded by |
247 * Theory Library/Coinductive_List has been removed -- superseded by |
228 AFP/thys/Coinductive. |
248 AFP/thys/Coinductive. |
229 |
249 |
230 * Theory PReal, including the type "preal" and related operations, has |
250 * Theory PReal, including the type "preal" and related operations, has |
231 been removed. INCOMPATIBILITY. |
251 been removed. INCOMPATIBILITY. |
232 |
252 |
233 * Split off theory Big_Operators containing setsum, setprod, Inf_fin, |
253 * Split off theory "Big_Operators" containing setsum, setprod, |
234 Sup_fin, Min, Max from theory Finite_Set. INCOMPATIBILITY. |
254 Inf_fin, Sup_fin, Min, Max from theory Finite_Set. INCOMPATIBILITY. |
235 |
255 |
236 * Theory "Rational" renamed to "Rat", for consistency with "Nat", |
256 * Theory "Rational" renamed to "Rat", for consistency with "Nat", |
237 "Int" etc. INCOMPATIBILITY. |
257 "Int" etc. INCOMPATIBILITY. |
238 |
258 |
239 * Constant Rat.normalize needs to be qualified. Minor |
259 * Constant Rat.normalize needs to be qualified. INCOMPATIBILITY. |
240 INCOMPATIBILITY. |
|
241 |
260 |
242 * New set of rules "ac_simps" provides combined assoc / commute |
261 * New set of rules "ac_simps" provides combined assoc / commute |
243 rewrites for all interpretations of the appropriate generic locales. |
262 rewrites for all interpretations of the appropriate generic locales. |
244 |
263 |
245 * Renamed theory "OrderedGroup" to "Groups" and split theory |
264 * Renamed theory "OrderedGroup" to "Groups" and split theory |
333 inter_INTER_fold_inter ~> inf_INFI_fold_inf |
352 inter_INTER_fold_inter ~> inf_INFI_fold_inf |
334 union_UNION_fold_union ~> sup_SUPR_fold_sup |
353 union_UNION_fold_union ~> sup_SUPR_fold_sup |
335 INTER_fold_inter ~> INFI_fold_inf |
354 INTER_fold_inter ~> INFI_fold_inf |
336 UNION_fold_union ~> SUPR_fold_sup |
355 UNION_fold_union ~> SUPR_fold_sup |
337 |
356 |
338 * Theory Complete_Lattice: lemmas top_def and bot_def have been |
357 * Theory "Complete_Lattice": lemmas top_def and bot_def have been |
339 replaced by the more convenient lemmas Inf_empty and Sup_empty. |
358 replaced by the more convenient lemmas Inf_empty and Sup_empty. |
340 Dropped lemmas Inf_insert_simp and Sup_insert_simp, which are subsumed |
359 Dropped lemmas Inf_insert_simp and Sup_insert_simp, which are subsumed |
341 by Inf_insert and Sup_insert. Lemmas Inf_UNIV and Sup_UNIV replace |
360 by Inf_insert and Sup_insert. Lemmas Inf_UNIV and Sup_UNIV replace |
342 former Inf_Univ and Sup_Univ. Lemmas inf_top_right and sup_bot_right |
361 former Inf_Univ and Sup_Univ. Lemmas inf_top_right and sup_bot_right |
343 subsume inf_top and sup_bot respectively. INCOMPATIBILITY. |
362 subsume inf_top and sup_bot respectively. INCOMPATIBILITY. |
344 |
363 |
345 * HOLogic.strip_psplit: types are returned in syntactic order, similar |
|
346 to other strip and tuple operations. INCOMPATIBILITY. |
|
347 |
|
348 * Reorganized theory Multiset: swapped notation of pointwise and |
364 * Reorganized theory Multiset: swapped notation of pointwise and |
349 multiset order: |
365 multiset order: |
|
366 |
350 - pointwise ordering is instance of class order with standard syntax |
367 - pointwise ordering is instance of class order with standard syntax |
351 <= and <; |
368 <= and <; |
352 - multiset ordering has syntax <=# and <#; partial order properties |
369 - multiset ordering has syntax <=# and <#; partial order properties |
353 are provided by means of interpretation with prefix |
370 are provided by means of interpretation with prefix |
354 multiset_order; |
371 multiset_order; |
355 - less duplication, less historical organization of sections, |
372 - less duplication, less historical organization of sections, |
356 conversion from associations lists to multisets, rudimentary code |
373 conversion from associations lists to multisets, rudimentary code |
357 generation; |
374 generation; |
358 - use insert_DiffM2 [symmetric] instead of elem_imp_eq_diff_union, |
375 - use insert_DiffM2 [symmetric] instead of elem_imp_eq_diff_union, |
359 if needed. |
376 if needed. |
|
377 |
360 Renamed: |
378 Renamed: |
361 multiset_eq_conv_count_eq -> multiset_ext_iff |
379 |
362 multi_count_ext -> multiset_ext |
380 multiset_eq_conv_count_eq ~> multiset_ext_iff |
363 diff_union_inverse2 -> diff_union_cancelR |
381 multi_count_ext ~> multiset_ext |
|
382 diff_union_inverse2 ~> diff_union_cancelR |
|
383 |
364 INCOMPATIBILITY. |
384 INCOMPATIBILITY. |
365 |
385 |
366 * Theory Permutation: replaced local "remove" by List.remove1. |
386 * Theory Permutation: replaced local "remove" by List.remove1. |
367 |
387 |
368 * Code generation: ML and OCaml code is decorated with signatures. |
388 * Code generation: ML and OCaml code is decorated with signatures. |
369 |
389 |
370 * Theory List: added transpose. |
390 * Theory List: added transpose. |
371 |
|
372 * Renamed Library/Quotient.thy to Library/Quotient_Type.thy to avoid |
|
373 clash with new theory Quotient in Main HOL. |
|
374 |
391 |
375 * Library/Nat_Bijection.thy is a collection of bijective functions |
392 * Library/Nat_Bijection.thy is a collection of bijective functions |
376 between nat and other types, which supersedes the older libraries |
393 between nat and other types, which supersedes the older libraries |
377 Library/Nat_Int_Bij.thy and HOLCF/NatIso.thy. INCOMPATIBILITY. |
394 Library/Nat_Int_Bij.thy and HOLCF/NatIso.thy. INCOMPATIBILITY. |
378 |
395 |
467 be reformulated in terms of "foo_take", INCOMPATIBILITY. |
482 be reformulated in terms of "foo_take", INCOMPATIBILITY. |
468 |
483 |
469 * Most definedness lemmas generated by the domain package (previously |
484 * Most definedness lemmas generated by the domain package (previously |
470 of the form "x ~= UU ==> foo$x ~= UU") now have an if-and-only-if form |
485 of the form "x ~= UU ==> foo$x ~= UU") now have an if-and-only-if form |
471 like "foo$x = UU <-> x = UU", which works better as a simp rule. |
486 like "foo$x = UU <-> x = UU", which works better as a simp rule. |
472 Proof scripts that used definedness lemmas as intro rules may break, |
487 Proofs that used definedness lemmas as intro rules may break, |
473 potential INCOMPATIBILITY. |
488 potential INCOMPATIBILITY. |
474 |
489 |
475 * Induction and casedist rules generated by the domain package now |
490 * Induction and casedist rules generated by the domain package now |
476 declare proper case_names (one called "bottom", and one named for each |
491 declare proper case_names (one called "bottom", and one named for each |
477 constructor). INCOMPATIBILITY. |
492 constructor). INCOMPATIBILITY. |
510 * The constants cpair, cfst, and csnd have been removed in favor of |
525 * The constants cpair, cfst, and csnd have been removed in favor of |
511 Pair, fst, and snd from Isabelle/HOL, INCOMPATIBILITY. |
526 Pair, fst, and snd from Isabelle/HOL, INCOMPATIBILITY. |
512 |
527 |
513 |
528 |
514 *** ML *** |
529 *** ML *** |
|
530 |
|
531 * Antiquotations for basic formal entities: |
|
532 |
|
533 @{class NAME} -- type class |
|
534 @{class_syntax NAME} -- syntax representation of the above |
|
535 |
|
536 @{type_name NAME} -- logical type |
|
537 @{type_abbrev NAME} -- type abbreviation |
|
538 @{nonterminal NAME} -- type of concrete syntactic category |
|
539 @{type_syntax NAME} -- syntax representation of any of the above |
|
540 |
|
541 @{const_name NAME} -- logical constant (INCOMPATIBILITY) |
|
542 @{const_abbrev NAME} -- abbreviated constant |
|
543 @{const_syntax NAME} -- syntax representation of any of the above |
|
544 |
|
545 * Antiquotation @{syntax_const NAME} ensures that NAME refers to a raw |
|
546 syntax constant (cf. 'syntax' command). |
|
547 |
|
548 * Antiquotation @{make_string} inlines a function to print arbitrary |
|
549 values similar to the ML toplevel. The result is compiler dependent |
|
550 and may fall back on "?" in certain situations. |
|
551 |
|
552 * Diagnostic commands 'ML_val' and 'ML_command' may refer to |
|
553 antiquotations @{Isar.state} and @{Isar.goal}. This replaces impure |
|
554 Isar.state() and Isar.goal(), which belong to the old TTY loop and do |
|
555 not work with the asynchronous Isar document model. |
|
556 |
|
557 * Configuration options now admit dynamic default values, depending on |
|
558 the context or even global references. |
|
559 |
|
560 * SHA1.digest digests strings according to SHA-1 (see RFC 3174). It |
|
561 uses an efficient external library if available (for Poly/ML). |
515 |
562 |
516 * Renamed some important ML structures, while keeping the old names |
563 * Renamed some important ML structures, while keeping the old names |
517 for some time as aliases within the structure Legacy: |
564 for some time as aliases within the structure Legacy: |
518 |
565 |
519 OuterKeyword ~> Keyword |
566 OuterKeyword ~> Keyword |
539 * Discontinued old TheoryDataFun with its copy/init operation -- data |
586 * Discontinued old TheoryDataFun with its copy/init operation -- data |
540 needs to be pure. Functor Theory_Data_PP retains the traditional |
587 needs to be pure. Functor Theory_Data_PP retains the traditional |
541 Pretty.pp argument to merge, which is absent in the standard |
588 Pretty.pp argument to merge, which is absent in the standard |
542 Theory_Data version. |
589 Theory_Data version. |
543 |
590 |
544 * Antiquotations for basic formal entities: |
|
545 |
|
546 @{class NAME} -- type class |
|
547 @{class_syntax NAME} -- syntax representation of the above |
|
548 |
|
549 @{type_name NAME} -- logical type |
|
550 @{type_abbrev NAME} -- type abbreviation |
|
551 @{nonterminal NAME} -- type of concrete syntactic category |
|
552 @{type_syntax NAME} -- syntax representation of any of the above |
|
553 |
|
554 @{const_name NAME} -- logical constant (INCOMPATIBILITY) |
|
555 @{const_abbrev NAME} -- abbreviated constant |
|
556 @{const_syntax NAME} -- syntax representation of any of the above |
|
557 |
|
558 * Antiquotation @{syntax_const NAME} ensures that NAME refers to a raw |
|
559 syntax constant (cf. 'syntax' command). |
|
560 |
|
561 * Antiquotation @{make_string} inlines a function to print arbitrary |
|
562 values similar to the ML toplevel. The result is compiler dependent |
|
563 and may fall back on "?" in certain situations. |
|
564 |
|
565 * Diagnostic commands 'ML_val' and 'ML_command' may refer to |
|
566 antiquotations @{Isar.state} and @{Isar.goal}. This replaces impure |
|
567 Isar.state() and Isar.goal(), which belong to the old TTY loop and do |
|
568 not work with the asynchronous Isar document model. |
|
569 |
|
570 * Sorts.certify_sort and derived "cert" operations for types and terms |
591 * Sorts.certify_sort and derived "cert" operations for types and terms |
571 no longer minimize sorts. Thus certification at the boundary of the |
592 no longer minimize sorts. Thus certification at the boundary of the |
572 inference kernel becomes invariant under addition of class relations, |
593 inference kernel becomes invariant under addition of class relations, |
573 which is an important monotonicity principle. Sorts are now minimized |
594 which is an important monotonicity principle. Sorts are now minimized |
574 in the syntax layer only, at the boundary between the end-user and the |
595 in the syntax layer only, at the boundary between the end-user and the |