7 *** General *** |
7 *** General *** |
8 |
8 |
9 * Theory headers: the new header syntax for Isar theories is |
9 * Theory headers: the new header syntax for Isar theories is |
10 |
10 |
11 theory <name> |
11 theory <name> |
12 imports <theory1> ... <theoryn> |
12 imports <theory1> ... <theoryN> |
|
13 uses <file1> ... <fileM> |
13 begin |
14 begin |
14 |
15 |
15 optionally also with a "files" section. The syntax |
16 where the 'uses' part is optional. The previous syntax |
16 |
17 |
17 theory <name> = <theory1> + ... + <theoryn>: |
18 theory <name> = <theory1> + ... + <theoryN>: |
18 |
19 |
19 will still be supported for some time but will eventually disappear. |
20 will disappear in the next release. Note that there is no change in |
20 The syntax of old-style theories has not changed. |
21 ancient non-Isar theories. |
21 |
22 |
22 * Theory loader: parent theories can now also be referred to via |
23 * Theory loader: parent theories can now also be referred to via |
23 relative and absolute paths. |
24 relative and absolute paths. |
|
25 |
|
26 * Improved version of thms_containing searches for a list of criteria |
|
27 instead of a list of constants. Known criteria are: intro, elim, dest, |
|
28 name:string, simp:term, and any term. Criteria can be preceded by '-' |
|
29 to select theorems that do not match. Intro, elim, dest select |
|
30 theorems that match the current goal, name:s selects theorems whose |
|
31 fully qualified name contain s, and simp:term selects all |
|
32 simplification rules whose lhs match term. Any other term is |
|
33 interpreted as pattern and selects all theorems matching the |
|
34 pattern. Available in ProofGeneral under 'ProofGeneral -> Find |
|
35 Theorems' or C-c C-f. Example: |
|
36 |
|
37 C-c C-f (100) "(_::nat) + _ + _" intro -name:"HOL." |
|
38 |
|
39 prints the last 100 theorems matching the pattern "(_::nat) + _ + _", |
|
40 matching the current goal as introduction rule and not having "HOL." |
|
41 in their name (i.e. not being defined in theory HOL). |
|
42 |
|
43 |
|
44 *** Document preparation *** |
|
45 |
|
46 * Commands 'display_drafts' and 'print_drafts' perform simple output |
|
47 of raw sources. Only those symbols that do not require additional |
|
48 LaTeX packages (depending on comments in isabellesym.sty) are |
|
49 displayed properly, everything else is left verbatim. isatool display |
|
50 and isatool print are used as front ends (these are subject to the |
|
51 DVI/PDF_VIEWER and PRINT_COMMAND settings, respectively). |
|
52 |
|
53 * There is now a flag to control hiding of proofs and some other |
|
54 commands (such as 'ML' or 'parse/print_translation') in document |
|
55 output. Hiding is enabled by default, and can be disabled by the |
|
56 option '-H false' of isatool usedir or by resetting the reference |
|
57 variable IsarOutput.hide_commands in ML. Additional commands to be |
|
58 hidden may be declared using IsarOutput.add_hidden_commands. |
|
59 |
|
60 * Several new antiquotation: |
|
61 |
|
62 @{term_type term} prints a term with its type annotated; |
|
63 |
|
64 @{typeof term} prints the type of a term; |
|
65 |
|
66 @{const const} is the same as @{term const}, but checks that the |
|
67 argument is a known logical constant; |
|
68 |
|
69 @{term_style style term} and @{thm_style style thm} print a term or |
|
70 theorem applying a "style" to it |
|
71 |
|
72 Predefined styles are 'lhs' and 'rhs' printing the lhs/rhs of |
|
73 definitions, equations, inequations etc., 'concl' printing only the |
|
74 conclusion of a meta-logical statement theorem, and 'prem1' .. 'prem9' |
|
75 to print the specified premise. TermStyle.add_style provides an ML |
|
76 interface for introducing further styles. See also the "LaTeX Sugar" |
|
77 document practical applications. |
|
78 |
|
79 |
|
80 *** Pure *** |
|
81 |
|
82 * Considerably improved version of 'constdefs' command. Now performs |
|
83 automatic type-inference of declared constants; additional support for |
|
84 local structure declarations (cf. locales and HOL records), see also |
|
85 isar-ref manual. Potential INCOMPATIBILITY: need to observe strictly |
|
86 sequential dependencies of definitions within a single 'constdefs' |
|
87 section; moreover, the declared name needs to be an identifier. If |
|
88 all fails, consider to fall back on 'consts' and 'defs' separately. |
|
89 |
|
90 * Improved indexed syntax and implicit structures. First of all, |
|
91 indexed syntax provides a notational device for subscripted |
|
92 application, using the new syntax \<^bsub>term\<^esub> for arbitrary |
|
93 expressions. Secondly, in a local context with structure |
|
94 declarations, number indexes \<^sub>n or the empty index (default |
|
95 number 1) refer to a certain fixed variable implicitly; option |
|
96 show_structs controls printing of implicit structures. Typical |
|
97 applications of these concepts involve record types and locales. |
|
98 |
|
99 * New command 'no_syntax' removes grammar declarations (and |
|
100 translations) resulting from the given syntax specification, which is |
|
101 interpreted in the same manner as for the 'syntax' command. |
|
102 |
|
103 * 'Advanced' translation functions (parse_translation etc.) may depend |
|
104 on the signature of the theory context being presently used for |
|
105 parsing/printing, see also isar-ref manual. |
|
106 |
|
107 * Improved internal renaming of symbolic identifiers -- attach primes |
|
108 instead of base 26 numbers. |
|
109 |
|
110 * New flag show_question_marks controls printing of leading question |
|
111 marks in schematic variable names. |
|
112 |
|
113 * In schematic variable names, *any* symbol following \<^isub> or |
|
114 \<^isup> is now treated as part of the base name. For example, the |
|
115 following works without printing of awkward ".0" indexes: |
|
116 |
|
117 lemma "x\<^isub>1 = x\<^isub>2 ==> x\<^isub>2 = x\<^isub>1" |
|
118 by simp |
|
119 |
|
120 * Inner syntax includes (*(*nested*) comments*). |
|
121 |
|
122 * Pretty pinter now supports unbreakable blocks, specified in mixfix |
|
123 annotations as "(00...)". |
|
124 |
|
125 * Clear separation of logical types and nonterminals, where the latter |
|
126 may only occur in 'syntax' specifications or type abbreviations. |
|
127 Before that distinction was only partially implemented via type class |
|
128 "logic" vs. "{}". Potential INCOMPATIBILITY in rare cases of improper |
|
129 use of 'types'/'consts' instead of 'nonterminals'/'syntax'. Some very |
|
130 exotic syntax specifications may require further adaption |
|
131 (e.g. Cube/Base.thy). |
|
132 |
|
133 * Removed obsolete type class "logic", use the top sort {} instead. |
|
134 Note that non-logical types should be declared as 'nonterminals' |
|
135 rather than 'types'. INCOMPATIBILITY for new object-logic |
|
136 specifications. |
|
137 |
|
138 * Simplifier: can now control the depth to which conditional rewriting |
|
139 is traced via the PG menu Isabelle -> Settings -> Trace Simp Depth |
|
140 Limit. |
|
141 |
|
142 * Simplifier: simplification procedures may now take the current |
|
143 simpset into account (cf. Simplifier.simproc(_i) / mk_simproc |
|
144 interface), which is very useful for calling the Simplifier |
|
145 recursively. Minor INCOMPATIBILITY: the 'prems' argument of simprocs |
|
146 is gone -- use prems_of_ss on the simpset instead. Moreover, the |
|
147 low-level mk_simproc no longer applies Logic.varify internally, to |
|
148 allow for use in a context of fixed variables. |
|
149 |
|
150 * thin_tac now works even if the assumption being deleted contains !! |
|
151 or ==>. More generally, erule now works even if the major premise of |
|
152 the elimination rule contains !! or ==>. |
|
153 |
|
154 * Reorganized bootstrapping of the Pure theories; CPure is now derived |
|
155 from Pure, which contains all common declarations already. Both |
|
156 theories are defined via plain Isabelle/Isar .thy files. |
|
157 INCOMPATIBILITY: elements of CPure (such as the CPure.intro / |
|
158 CPure.elim / CPure.dest attributes) now appear in the Pure name space; |
|
159 use isatool fixcpure to adapt your theory and ML sources. |
|
160 |
|
161 * New syntax 'name(i-j, i-, i, ...)' for referring to specific |
|
162 selections of theorems in named facts via index ranges. |
|
163 |
|
164 |
|
165 *** Locales *** |
|
166 |
|
167 * New commands for the interpretation of locale expressions in |
|
168 theories ('interpretation') and proof contexts ('interpret'). These |
|
169 take an instantiation of the locale parameters and compute proof |
|
170 obligations from the instantiated specification. After the |
|
171 obligations have been discharged, the instantiated theorems of the |
|
172 locale are added to the theory or proof context. Interpretation is |
|
173 smart in that already active interpretations do not occur in proof |
|
174 obligations, neither are instantiated theorems stored in duplicate. |
|
175 Use print_interps to inspect active interpretations of a particular |
|
176 locale. For details, see the Isar Reference manual. |
|
177 |
|
178 INCOMPATIBILITY: former 'instantiate' has been withdrawn, use |
|
179 'interpret' instead. |
|
180 |
|
181 * Proper static binding of attribute syntax -- i.e. types / terms / |
|
182 facts mentioned as arguments are always those of the locale definition |
|
183 context, independently of the context of later invocations. Moreover, |
|
184 locale operations (renaming and type / term instantiation) are applied |
|
185 to attribute arguments as expected. |
|
186 |
|
187 INCOMPATIBILITY of the ML interface: always pass Attrib.src instead of |
|
188 actual attributes; rare situations may require Attrib.attribute to |
|
189 embed those attributes into Attrib.src that lack concrete syntax. |
|
190 Attribute implementations need to cooperate properly with the static |
|
191 binding mechanism. Basic parsers Args.XXX_typ/term/prop and |
|
192 Attrib.XXX_thm etc. already do the right thing without further |
|
193 intervention. Only unusual applications -- such as "where" or "of" |
|
194 (cf. src/Pure/Isar/attrib.ML), which process arguments depending both |
|
195 on the context and the facts involved -- may have to assign parsed |
|
196 values to argument tokens explicitly. |
|
197 |
|
198 * New context element "constrains" adds type constraints to parameters -- |
|
199 there is no logical significance. |
|
200 |
|
201 * Context expressions: renaming parameters permits syntax |
|
202 redeclaration as well. |
|
203 |
|
204 * Locale definition: 'includes' now disallowed. |
|
205 |
|
206 * Changed parameter management in theorem generation for long goal |
|
207 statements with 'includes'. INCOMPATIBILITY: produces a different |
|
208 theorem statement in rare situations. |
|
209 |
|
210 * Attributes 'induct' and 'cases': type or set names may now be |
|
211 locally fixed variables as well. |
|
212 |
|
213 * Antiquotations now provide the option 'locale=NAME' to specify an |
|
214 alternative context used for evaluating and printing the subsequent |
|
215 argument, as in @{thm [locale=LC] fold_commute}, for example. |
|
216 |
|
217 |
|
218 *** Provers *** |
|
219 |
|
220 * Provers/hypsubst.ML: improved version of the subst method, for |
|
221 single-step rewriting: it now works in bound variable contexts. New is |
|
222 'subst (asm)', for rewriting an assumption. INCOMPATIBILITY: may |
|
223 rewrite a different subterm than the original subst method, which is |
|
224 still available as 'simplesubst'. |
24 |
225 |
25 * Provers/quasi.ML: new transitivity reasoners for transitivity only |
226 * Provers/quasi.ML: new transitivity reasoners for transitivity only |
26 and quasi orders. |
227 and quasi orders. |
27 |
228 |
28 * Provers/trancl.ML: new transitivity reasoner for transitive and |
229 * Provers/trancl.ML: new transitivity reasoner for transitive and |
29 reflexive-transitive closure of relations. |
230 reflexive-transitive closure of relations. |
30 |
231 |
31 * Provers/blast.ML: new reference depth_limit to make blast's depth |
232 * Provers/blast.ML: new reference depth_limit to make blast's depth |
32 limit (previously hard-coded with a value of 20) user-definable. |
233 limit (previously hard-coded with a value of 20) user-definable. |
33 |
|
34 * Provers: new version of the subst method, for single-step rewriting: it now |
|
35 works in bound variable contexts. New is subst (asm), for rewriting an |
|
36 assumption. Thanks to Lucas Dixon! INCOMPATIBILITY: may rewrite a different |
|
37 subterm than the original subst method, which is still available under the |
|
38 name simplesubst. |
|
39 |
|
40 * Pure: thin_tac now works even if the assumption being deleted contains !! or ==>. |
|
41 More generally, erule now works even if the major premise of the elimination rule |
|
42 contains !! or ==>. |
|
43 |
|
44 * Pure: considerably improved version of 'constdefs' command. Now |
|
45 performs automatic type-inference of declared constants; additional |
|
46 support for local structure declarations (cf. locales and HOL |
|
47 records), see also isar-ref manual. Potential INCOMPATIBILITY: need |
|
48 to observe strictly sequential dependencies of definitions within a |
|
49 single 'constdefs' section; moreover, the declared name needs to be |
|
50 an identifier. If all fails, consider to fall back on 'consts' and |
|
51 'defs' separately. |
|
52 |
|
53 * Pure: improved indexed syntax and implicit structures. First of |
|
54 all, indexed syntax provides a notational device for subscripted |
|
55 application, using the new syntax \<^bsub>term\<^esub> for arbitrary |
|
56 expressions. Secondly, in a local context with structure |
|
57 declarations, number indexes \<^sub>n or the empty index (default |
|
58 number 1) refer to a certain fixed variable implicitly; option |
|
59 show_structs controls printing of implicit structures. Typical |
|
60 applications of these concepts involve record types and locales. |
|
61 |
|
62 * Pure: clear separation of logical types and nonterminals, where the |
|
63 latter may only occur in 'syntax' specifications or type |
|
64 abbreviations. Before that distinction was only partially |
|
65 implemented via type class "logic" vs. "{}". Potential |
|
66 INCOMPATIBILITY in rare cases of improper use of 'types'/'consts' |
|
67 instead of 'nonterminals'/'syntax'. Some very exotic syntax |
|
68 specifications may require further adaption (e.g. Cube/Base.thy). |
|
69 |
|
70 * Pure: removed obsolete type class "logic", use the top sort {} |
|
71 instead. Note that non-logical types should be declared as |
|
72 'nonterminals' rather than 'types'. INCOMPATIBILITY for new |
|
73 object-logic specifications. |
|
74 |
|
75 * Pure: command 'no_syntax' removes grammar declarations (and |
|
76 translations) resulting from the given syntax specification, which |
|
77 is interpreted in the same manner as for the 'syntax' command. |
|
78 |
|
79 * Pure: print_tac now outputs the goal through the trace channel. |
|
80 |
|
81 * Pure: reference NameSpace.unique_names included. If true the |
|
82 (shortest) namespace-prefix is printed to disambiguate conflicts (as |
|
83 yet). If false the first entry wins (as during parsing). Default |
|
84 value is true. |
|
85 |
|
86 * Pure: tuned internal renaming of symbolic identifiers -- attach |
|
87 primes instead of base 26 numbers. |
|
88 |
|
89 * Pure: new flag show_question_marks controls printing of leading |
|
90 question marks in schematic variable names. |
|
91 |
|
92 * Pure: new version of thms_containing that searches for a list of |
|
93 criteria instead of a list of constants. Known criteria are: intro, |
|
94 elim, dest, name:string, simp:term, and any term. Criteria can be |
|
95 preceded by '-' to select theorems that do not match. Intro, elim, |
|
96 dest select theorems that match the current goal, name:s selects |
|
97 theorems whose fully qualified name contain s, and simp:term selects |
|
98 all simplification rules whose lhs match term. Any other term is |
|
99 interpreted as pattern and selects all theorems matching the |
|
100 pattern. Available in ProofGeneral under 'ProofGeneral -> Find |
|
101 Theorems' or C-c C-f. |
|
102 |
|
103 Example: C-c C-f (100) "(_::nat) + _ + _" intro -name:"HOL." |
|
104 |
|
105 prints the last 100 theorems matching the pattern "(_::nat) + _ + _", |
|
106 matching the current goal as introduction rule and not having "HOL." |
|
107 in their name (i.e. not being defined in theory HOL). |
|
108 |
|
109 * Pure/Syntax: In schematic variable names, *any* symbol following |
|
110 \<^isub> or \<^isup> is now treated as part of the base name. For |
|
111 example, the following works without printing of ugly ".0" indexes: |
|
112 |
|
113 lemma "x\<^isub>1 = x\<^isub>2 ==> x\<^isub>2 = x\<^isub>1" |
|
114 by simp |
|
115 |
|
116 * Pure/Syntax: inner syntax includes (*(*nested*) comments*). |
|
117 |
|
118 * Pure/Syntax: pretty pinter now supports unbreakable blocks, |
|
119 specified in mixfix annotations as "(00...)". |
|
120 |
|
121 * Pure/Syntax: 'advanced' translation functions (parse_translation |
|
122 etc.) may depend on the signature of the theory context being |
|
123 presently used for parsing/printing, see also isar-ref manual. |
|
124 |
|
125 * Pure/Simplifier: you can control the depth to which conditional rewriting |
|
126 is traced via the PG menu Isabelle -> Settings -> Trace Simp Depth Limit. |
|
127 |
|
128 * Pure/Simplifier: simplification procedures may now take the current |
|
129 simpset into account (cf. Simplifier.simproc(_i) / mk_simproc |
|
130 interface), which is very useful for calling the Simplifier |
|
131 recursively. Minor INCOMPATIBILITY: the 'prems' argument of |
|
132 simprocs is gone -- use prems_of_ss on the simpset instead. |
|
133 Moreover, the low-level mk_simproc no longer applies Logic.varify |
|
134 internally, to allow for use in a context of fixed variables. |
|
135 |
|
136 * Isar debugging: new reference Toplevel.debug; default false. Set to |
|
137 make printing of exceptions THM, TERM, TYPE and THEORY more verbose. |
|
138 |
|
139 * Locales: modifications regarding "includes" |
|
140 - "includes" disallowed in declaration of named locales (command "locale"). |
|
141 - Fixed parameter management in theorem generation for goals with "includes". |
|
142 INCOMPATIBILITY: rarely, the generated theorem statement is different. |
|
143 |
|
144 * Locales: new context element "constrains" for adding type constraints |
|
145 to parameters. |
|
146 |
|
147 * Locales: context expressions permit optional syntax redeclaration when |
|
148 renaming parameters. |
|
149 |
|
150 * Locales: new commands for the interpretation of locale expressions |
|
151 in theories (interpretation) and proof contexts (interpret). These take an |
|
152 instantiation of the locale parameters and compute proof obligations from |
|
153 the instantiated specification. After the obligations have been discharged, |
|
154 the instantiated theorems of the locale are added to the theory or proof |
|
155 context. Interpretation is smart in that already active interpretations |
|
156 do not occur in proof obligations, neither are instantiated theorems stored |
|
157 in duplicate. |
|
158 Use print_interps to inspect active interpretations of a particular locale. |
|
159 For details, see the Isar Reference manual. |
|
160 |
|
161 * Locales: INCOMPATIBILITY: experimental command "instantiate" has |
|
162 been withdrawn. Use "interpret" instead. |
|
163 |
|
164 * Locales: proper static binding of attribute syntax -- i.e. types / |
|
165 terms / facts mentioned as arguments are always those of the locale |
|
166 definition context, independently of the context of later |
|
167 invocations. Moreover, locale operations (renaming and type / term |
|
168 instantiation) are applied to attribute arguments as expected. |
|
169 |
|
170 INCOMPATIBILITY of the ML interface: always pass Attrib.src instead |
|
171 of actual attributes; rare situations may require Attrib.attribute |
|
172 to embed those attributes into Attrib.src that lack concrete syntax. |
|
173 |
|
174 Attribute implementations need to cooperate properly with the static |
|
175 binding mechanism. Basic parsers Args.XXX_typ/term/prop and |
|
176 Attrib.XXX_thm etc. already do the right thing without further |
|
177 intervention. Only unusual applications -- such as "where" or "of" |
|
178 (cf. src/Pure/Isar/attrib.ML), which process arguments depending |
|
179 both on the context and the facts involved -- may have to assign |
|
180 parsed values to argument tokens explicitly. |
|
181 |
|
182 * Attributes 'induct' and 'cases': type or set names may now be |
|
183 locally fixed variables as well. |
|
184 |
|
185 * Isar: new syntax 'name(i-j, i-, i, ...)' for referring to specific |
|
186 selections of theorems in named facts via indices. |
|
187 |
|
188 * Pure: reorganized bootstrapping of the Pure theories; CPure is now |
|
189 derived from Pure, which contains all common declarations already. |
|
190 Both theories are defined via plain Isabelle/Isar .thy files. |
|
191 INCOMPATIBILITY: elements of CPure (such as the CPure.intro / |
|
192 CPure.elim / CPure.dest attributes) now appear in the Pure name |
|
193 space; use isatool fixcpure to adapt your theory and ML sources. |
|
194 |
234 |
195 * Provers/simplifier.ML has been moved to Pure, where Simplifier.setup |
235 * Provers/simplifier.ML has been moved to Pure, where Simplifier.setup |
196 is peformed already. Object-logics merely need to finish their |
236 is peformed already. Object-logics merely need to finish their |
197 initial simpset configuration as before. |
237 initial simpset configuration as before. INCOMPATIBILITY. |
198 |
|
199 |
|
200 *** Document preparation *** |
|
201 |
|
202 * Several new antiquotation: |
|
203 |
|
204 @{term_type term} prints a term with its type annotated; |
|
205 |
|
206 @{typeof term} prints the type of a term; |
|
207 |
|
208 @{const const} is the same as @{term const}, but checks |
|
209 that the argument is a known logical constant; |
|
210 |
|
211 @{term_style style term} and @{thm_style style thm} print a term or |
|
212 theorem applying a "style" to it |
|
213 |
|
214 Predefined styles are "lhs" and "rhs" printing the lhs/rhs of |
|
215 definitions, equations, inequations etc. and "conclusion" printing |
|
216 only the conclusion of a meta-logical statement theorem. Styles may |
|
217 be defined via TermStyle.add_style in ML. See the "LaTeX Sugar" |
|
218 document for more information. |
|
219 |
|
220 * Antiquotations now provide the option 'locale=NAME' to specify an |
|
221 alternative context used for evaluating and printing the subsequent |
|
222 argument, as in @{thm [locale=LC] fold_commute}, for example. |
|
223 |
|
224 * Commands 'display_drafts' and 'print_drafts' perform simple output |
|
225 of raw sources. Only those symbols that do not require additional |
|
226 LaTeX packages (depending on comments in isabellesym.sty) are |
|
227 displayed properly, everything else is left verbatim. We use |
|
228 isatool display and isatool print as front ends; these are subject |
|
229 to the DVI/PDF_VIEWER and PRINT_COMMAND settings, respectively. |
|
230 |
|
231 * Proof scripts as well as some other commands such as ML or |
|
232 parse/print_translation can now be hidden in the document. Hiding |
|
233 is enabled by default, and can be disabled either via the option '-H |
|
234 false' of isatool usedir or by resetting the reference variable |
|
235 IsarOutput.hide_commands. Additional commands to be hidden may be |
|
236 declared using IsarOutput.add_hidden_commands. |
|
237 |
238 |
238 |
239 |
239 *** HOL *** |
240 *** HOL *** |
240 |
241 |
241 * Datatype induction via method `induct' now preserves the name of the |
242 * Symbolic syntax of Hilbert Choice Operator is now as follows: |
242 induction variable. For example, when proving P(xs::'a list) by induction |
|
243 on xs, the induction step is now P(xs) ==> P(a#xs) rather than |
|
244 P(list) ==> P(a#list) as previously. |
|
245 |
|
246 * HOL/record: reimplementation of records. Improved scalability for |
|
247 records with many fields, avoiding performance problems for type |
|
248 inference. Records are no longer composed of nested field types, but |
|
249 of nested extension types. Therefore the record type only grows |
|
250 linear in the number of extensions and not in the number of fields. |
|
251 The top-level (users) view on records is preserved. Potential |
|
252 INCOMPATIBILITY only in strange cases, where the theory depends on |
|
253 the old record representation. The type generated for a record is |
|
254 called <record_name>_ext_type. |
|
255 |
|
256 * HOL/record: Reference record_quick_and_dirty_sensitive can be |
|
257 enabled to skip the proofs triggered by a record definition or a |
|
258 simproc (if quick_and_dirty is enabled). Definitions of large |
|
259 records can take quite long. |
|
260 |
|
261 * HOL/record: "record_upd_simproc" for simplification of multiple |
|
262 record updates enabled by default. Moreover, trivial updates are |
|
263 also removed: r(|x := x r|) = r. INCOMPATIBILITY: old proofs break |
|
264 occasionally, since simplification is more powerful by default. |
|
265 |
|
266 * HOL: symbolic syntax of Hilbert Choice Operator is now as follows: |
|
267 |
243 |
268 syntax (epsilon) |
244 syntax (epsilon) |
269 "_Eps" :: "[pttrn, bool] => 'a" ("(3\<some>_./ _)" [0, 10] 10) |
245 "_Eps" :: "[pttrn, bool] => 'a" ("(3\<some>_./ _)" [0, 10] 10) |
270 |
246 |
271 The symbol \<some> is displayed as the alternative epsilon of LaTeX |
247 The symbol \<some> is displayed as the alternative epsilon of LaTeX |
272 and x-symbol; use option '-m epsilon' to get it actually printed. |
248 and x-symbol; use option '-m epsilon' to get it actually printed. |
273 Moreover, the mathematically important symbolic identifier |
249 Moreover, the mathematically important symbolic identifier \<epsilon> |
274 \<epsilon> becomes available as variable, constant etc. |
250 becomes available as variable, constant etc. INCOMPATIBILITY, |
275 |
251 |
276 * HOL: "x > y" abbreviates "y < x" and "x >= y" abbreviates "y <= x". |
252 * "x > y" abbreviates "y < x" and "x >= y" abbreviates "y <= x". |
277 Similarly for all quantifiers: "ALL x > y" etc. The x-symbol for >= |
253 Similarly for all quantifiers: "ALL x > y" etc. The x-symbol for >= |
278 is \<ge>. |
254 is \<ge>. |
279 |
255 |
280 * HOL/Set: "{x:A. P}" abbreviates "{x. x:A & P}" (and similarly for |
256 * "{x:A. P}" abbreviates "{x. x:A & P}", and similarly for "\<in>" |
281 "\<in>" instead of ":"). |
257 instead of ":". |
282 |
258 |
283 * HOL/SetInterval: The syntax for open intervals has changed: |
259 * theory SetInterval: changed the syntax for open intervals: |
284 |
260 |
285 Old New |
261 Old New |
286 {..n(} -> {..<n} |
262 {..n(} {..<n} |
287 {)n..} -> {n<..} |
263 {)n..} {n<..} |
288 {m..n(} -> {m..<n} |
264 {m..n(} {m..<n} |
289 {)m..n} -> {m<..n} |
265 {)m..n} {m<..n} |
290 {)m..n(} -> {m<..<n} |
266 {)m..n(} {m<..<n} |
291 |
267 |
292 The old syntax is still supported but will disappear in the future. |
268 The old syntax is still supported but will disappear in the next |
293 For conversion use the following emacs search and replace patterns: |
269 release. For conversion use the following Emacs search and replace |
|
270 patterns (these are not perfect but work quite well): |
294 |
271 |
295 {)\([^\.]*\)\.\. -> {\1<\.\.} |
272 {)\([^\.]*\)\.\. -> {\1<\.\.} |
296 \.\.\([^(}]*\)(} -> \.\.<\1} |
273 \.\.\([^(}]*\)(} -> \.\.<\1} |
297 |
274 |
298 They are not perfect but work quite well. |
275 * theory Finite_Set: changed the syntax for 'setsum', summation over |
299 |
276 finite sets: "setsum (%x. e) A", which used to be "\<Sum>x:A. e", is |
300 * HOL: The syntax for 'setsum', summation over finite sets, has changed: |
277 now either "SUM x:A. e" or "\<Sum>x \<in> A. e". |
301 |
278 |
302 The syntax for 'setsum (%x. e) A' used to be '\<Sum>x:A. e' |
279 Some new syntax forms are available: |
303 and is now either 'SUM x:A. e' or '\<Sum>x\<in>A. e'. |
280 |
304 |
281 "\<Sum>x | P. e" for "setsum (%x. e) {x. P}" |
305 There is new syntax for summation over finite sets: |
282 "\<Sum>x = a..b. e" for "setsum (%x. e) {a..b}" |
306 |
283 "\<Sum>x = a..<b. e" for "setsum (%x. e) {a..<b}" |
307 '\<Sum>x | P. e' is the same as 'setsum (%x. e) {x. P}' |
284 "\<Sum>x < k. e" for "setsum (%x. e) {..<k}" |
308 '\<Sum>x=a..b. e' is the same as 'setsum (%x. e) {a..b}' |
285 |
309 '\<Sum>x=a..<b. e' is the same as 'setsum (%x. e) {a..<b}' |
286 The latter form "\<Sum>x < k. e" used to be based on a separate |
310 '\<Sum>x<k. e' is the same as 'setsum (%x. e) {..<k}' |
287 function "Summation", which has been discontinued. |
311 |
288 |
312 Function 'Summation' over nat is gone, its syntax '\<Sum>i<k. e' |
289 * theory Finite_Set: in structured induction proofs, the insert case |
313 now translates into 'setsum' as above. |
290 is now 'case (insert x F)' instead of the old counterintuitive 'case |
314 |
291 (insert F x)'. |
315 * HOL: Finite set induction: In Isar proofs, the insert case is now |
292 |
316 "case (insert x F)" instead of the old counterintuitive "case (insert F x)". |
293 * The 'refute' command has been extended to support a much larger |
317 |
294 fragment of HOL, including axiomatic type classes, constdefs and |
318 * HOL/Simplifier: |
295 typedefs, inductive datatypes and recursion. |
319 |
296 |
320 - Is now set up to reason about transitivity chains involving "trancl" |
297 * Datatype induction via method 'induct' now preserves the name of the |
321 (r^+) and "rtrancl" (r^*) by setting up tactics provided by |
298 induction variable. For example, when proving P(xs::'a list) by |
322 Provers/trancl.ML as additional solvers. INCOMPATIBILITY: old proofs break |
299 induction on xs, the induction step is now P(xs) ==> P(a#xs) rather |
323 occasionally as simplification may now solve more goals than previously. |
300 than P(list) ==> P(a#list) as previously. Potential INCOMPATIBILITY |
324 |
301 in unstructured proof scripts. |
325 - Converts x <= y into x = y if assumption y <= x is present. Works for |
302 |
326 all partial orders (class "order"), in particular numbers and sets. For |
303 * Reworked implementation of records. Improved scalability for |
327 linear orders (e.g. numbers) it treats ~ x < y just like y <= x. |
304 records with many fields, avoiding performance problems for type |
328 |
305 inference. Records are no longer composed of nested field types, but |
329 - Simproc for "let x = a in f x" |
306 of nested extension types. Therefore the record type only grows linear |
330 If a is a free or bound variable or a constant then the let is unfolded. |
307 in the number of extensions and not in the number of fields. The |
331 Otherwise first a is simplified to a', and then f a' is simplified to |
308 top-level (users) view on records is preserved. Potential |
332 g. If possible we abstract a' from g arriving at "let x = a' in g' x", |
309 INCOMPATIBILITY only in strange cases, where the theory depends on the |
333 otherwise we unfold the let and arrive at g. The simproc can be |
310 old record representation. The type generated for a record is called |
334 enabled/disabled by the reference use_let_simproc. Potential |
311 <record_name>_ext_type. |
335 INCOMPATIBILITY since simplification is more powerful by default. |
312 |
336 |
313 Flag record_quick_and_dirty_sensitive can be enabled to skip the |
337 * HOL: The 'refute' command has been extended to support a much larger |
314 proofs triggered by a record definition or a simproc (if |
338 fragment of HOL, including axiomatic type classes, constdefs and typedefs, |
315 quick_and_dirty is enabled). Definitions of large records can take |
339 inductive datatypes and recursion. |
316 quite long. |
|
317 |
|
318 New simproc record_upd_simproc for simplification of multiple record |
|
319 updates enabled by default. Moreover, trivial updates are also |
|
320 removed: r(|x := x r|) = r. INCOMPATIBILITY: old proofs break |
|
321 occasionally, since simplification is more powerful by default. |
|
322 |
|
323 * Simplifier: automatically reasons about transitivity chains |
|
324 involving "trancl" (r^+) and "rtrancl" (r^*) by setting up tactics |
|
325 provided by Provers/trancl.ML as additional solvers. INCOMPATIBILITY: |
|
326 old proofs break occasionally as simplification may now solve more |
|
327 goals than previously. |
|
328 |
|
329 * Simplifier: converts x <= y into x = y if assumption y <= x is |
|
330 present. Works for all partial orders (class "order"), in particular |
|
331 numbers and sets. For linear orders (e.g. numbers) it treats ~ x < y |
|
332 just like y <= x. |
|
333 |
|
334 * Simplifier: new simproc for "let x = a in f x". If a is a free or |
|
335 bound variable or a constant then the let is unfolded. Otherwise |
|
336 first a is simplified to b, and then f b is simplified to g. If |
|
337 possible we abstract b from g arriving at "let x = b in h x", |
|
338 otherwise we unfold the let and arrive at g. The simproc can be |
|
339 enabled/disabled by the reference use_let_simproc. Potential |
|
340 INCOMPATIBILITY since simplification is more powerful by default. |
340 |
341 |
341 |
342 |
342 *** HOLCF *** |
343 *** HOLCF *** |
343 |
344 |
344 * HOLCF: discontinued special version of 'constdefs' (which used to |
345 * HOLCF: discontinued special version of 'constdefs' (which used to |
345 support continuous functions) in favor of the general Pure one with |
346 support continuous functions) in favor of the general Pure one with |
346 full type-inference. |
347 full type-inference. |
347 |
348 |
348 |
349 |
349 *** ZF *** |
350 *** ZF *** |
350 |
351 |
351 * ZF/ex/{Group,Ring}: examples in abstract algebra, including the |
352 * ZF/ex: theories Group and Ring provide examples in abstract algebra, |
352 First Isomorphism Theorem (on quotienting by the kernel of a |
353 including the First Isomorphism Theorem (on quotienting by the kernel |
353 homomorphism). |
354 of a homomorphism). |
354 |
355 |
355 * ZF/Simplifier: install second copy of type solver that actually |
356 * ZF/Simplifier: install second copy of type solver that actually |
356 makes use of TC rules declared to Isar proof contexts (or locales); |
357 makes use of TC rules declared to Isar proof contexts (or locales); |
357 the old version is still required for ML proof scripts. |
358 the old version is still required for ML proof scripts. |
358 |
|
359 |
|
360 *** System *** |
|
361 |
|
362 * Allow symlinks to all proper Isabelle executables (Isabelle, |
|
363 isabelle, isatool etc.). |
|
364 |
|
365 * isabelle-process: Poly/ML no longer needs Perl to run an interactive |
|
366 session. |
|
367 |
|
368 * ISABELLE_DOC_FORMAT setting specifies preferred document format (for |
|
369 isatool doc, isatool mkdir, display_drafts etc.). |
|
370 |
|
371 * isatool usedir: option -f allows specification of the ML file to be |
|
372 used by Isabelle; default is ROOT.ML. |
|
373 |
|
374 * HOL: isatool dimacs2hol converts files in DIMACS CNF format |
|
375 (containing Boolean satisfiability problems) into Isabelle/HOL |
|
376 theories. |
|
377 |
359 |
378 |
360 |
379 *** ML *** |
361 *** ML *** |
380 |
362 |
381 * Pure/library.ML no longer defines its own option datatype, but uses |
363 * Pure/library.ML no longer defines its own option datatype, but uses |
382 that of the SML basis, which has constructors NONE and SOME instead |
364 that of the SML basis, which has constructors NONE and SOME instead of |
383 of None and Some, as well as exception Option.Option instead of |
365 None and Some, as well as exception Option.Option instead of OPTION. |
384 OPTION. The functions the, if_none, is_some, is_none have been |
366 The functions the, if_none, is_some, is_none have been adapted |
385 adapted accordingly, while Option.map replaces apsome. |
367 accordingly, while Option.map replaces apsome. |
386 |
368 |
387 * The exception LIST has been given up in favour of the standard |
369 * The exception LIST has been given up in favour of the standard |
388 exceptions Empty and Subscript, as well as Library.UnequalLengths. |
370 exceptions Empty and Subscript, as well as Library.UnequalLengths. |
389 Function like Library.hd and Library.tl are superceded by the |
371 Function like Library.hd and Library.tl are superceded by the standard |
390 standard hd and tl functions etc. |
372 hd and tl functions etc. |
391 |
373 |
392 A number of basic functions are now no longer exported to the ML |
374 A number of basic functions are now no longer exported to the ML |
393 toplevel, as they are variants of standard functions. The following |
375 toplevel, as they are variants of standard functions. The following |
394 suggests how one can translate existing code: |
376 suggests how one can translate existing code: |
395 |
377 |
396 rev_append xs ys = List.revAppend (xs, ys) |
378 rev_append xs ys = List.revAppend (xs, ys) |
397 nth_elem (i, xs) = List.nth (xs, i) |
379 nth_elem (i, xs) = List.nth (xs, i) |
398 last_elem xs = List.last xs |
380 last_elem xs = List.last xs |
399 flat xss = List.concat xss |
381 flat xss = List.concat xss |
400 seq fs = app fs |
382 seq fs = List.app fs |
401 partition P xs = List.partition P xs |
383 partition P xs = List.partition P xs |
402 filter P xs = List.filter P xs |
384 filter P xs = List.filter P xs |
403 mapfilter f xs = List.mapPartial f xs |
385 mapfilter f xs = List.mapPartial f xs |
404 |
386 |
405 * Pure: output via the Isabelle channels of writeln/warning/error |
387 * Pure: output via the Isabelle channels of writeln/warning/error |
406 etc. is now passed through Output.output, with a hook for arbitrary |
388 etc. is now passed through Output.output, with a hook for arbitrary |
407 transformations depending on the print_mode (cf. Output.add_mode -- |
389 transformations depending on the print_mode (cf. Output.add_mode -- |
408 the first active mode that provides a output function wins). |
390 the first active mode that provides a output function wins). Already |
409 Already formatted output may be embedded into further text via |
391 formatted output may be embedded into further text via Output.raw; the |
410 Output.raw; the result of Pretty.string_of/str_of and derived |
392 result of Pretty.string_of/str_of and derived functions |
411 functions (string_of_term/cterm/thm etc.) is already marked raw to |
393 (string_of_term/cterm/thm etc.) is already marked raw to accommodate |
412 accommodate easy composition of diagnostic messages etc. |
394 easy composition of diagnostic messages etc. Programmers rarely need |
413 Programmers rarely need to care about Output.output or Output.raw at |
395 to care about Output.output or Output.raw at all, with some notable |
414 all, with some notable exceptions: Output.output is required when |
396 exceptions: Output.output is required when bypassing the standard |
415 bypassing the standard channels (writeln etc.), or in token |
397 channels (writeln etc.), or in token translations to produce properly |
416 translations to produce properly formatted results; Output.raw is |
398 formatted results; Output.raw is required when capturing already |
417 required when capturing already output material that will eventually |
399 output material that will eventually be presented to the user a second |
418 be presented to the user a second time. For the default print mode, |
400 time. For the default print mode, both Output.output and Output.raw |
419 both Output.output and Output.raw have no effect. |
401 have no effect. |
|
402 |
|
403 * Pure: print_tac now outputs the goal through the trace channel. |
|
404 |
|
405 * Isar debugging: new reference Toplevel.debug; default false. Set to |
|
406 make printing of exceptions THM, TERM, TYPE and THEORY more verbose. |
420 |
407 |
421 * Pure: name spaces have been refined, with significant changes of the |
408 * Pure: name spaces have been refined, with significant changes of the |
422 internal interfaces -- INCOMPATIBILITY. Renamed cond_extern(_table) |
409 internal interfaces -- INCOMPATIBILITY. Renamed cond_extern(_table) |
423 to extern(_table). The plain name entry path is superceded by a |
410 to extern(_table). The plain name entry path is superceded by a |
424 general 'naming' context, which also includes the 'policy' to |
411 general 'naming' context, which also includes the 'policy' to produce |
425 produce a fully qualified name and external accesses of a fully |
412 a fully qualified name and external accesses of a fully qualified |
426 qualified name; NameSpace.extend is superceded by context dependent |
413 name; NameSpace.extend is superceded by context dependent |
427 Sign.declare_name. Several theory and proof context operations |
414 Sign.declare_name. Several theory and proof context operations modify |
428 modify the naming context. Especially note Theory.restore_naming |
415 the naming context. Especially note Theory.restore_naming and |
429 and ProofContext.restore_naming to get back to a sane state; note |
416 ProofContext.restore_naming to get back to a sane state; note that |
430 that Theory.add_path is no longer sufficient to recover from |
417 Theory.add_path is no longer sufficient to recover from |
431 Theory.absolute_path in particular. |
418 Theory.absolute_path in particular. |
|
419 |
|
420 * Pure: new flags short_names (default false) and unique_names |
|
421 (default true) for controlling output of qualified names. If |
|
422 short_names is set, names are printed unqualified. If unique_names is |
|
423 reset, the name prefix is reduced to the minimum required to achieve |
|
424 the original result when interning again, even if there is an overlap |
|
425 with earlier declarations. |
432 |
426 |
433 * Pure: cases produced by proof methods specify options, where NONE |
427 * Pure: cases produced by proof methods specify options, where NONE |
434 means to remove case bindings -- INCOMPATIBILITY in |
428 means to remove case bindings -- INCOMPATIBILITY in |
435 (RAW_)METHOD_CASES. |
429 (RAW_)METHOD_CASES. |
436 |
430 |
437 * Provers: Simplifier and Classical Reasoner now support proof context |
431 * Provers: Simplifier and Classical Reasoner now support proof context |
438 dependent plug-ins (simprocs, solvers, wrappers etc.). These extra |
432 dependent plug-ins (simprocs, solvers, wrappers etc.). These extra |
439 components are stored in the theory and patched into the |
433 components are stored in the theory and patched into the |
440 simpset/claset when used in an Isar proof context. Context |
434 simpset/claset when used in an Isar proof context. Context dependent |
441 dependent components are maintained by the following theory |
435 components are maintained by the following theory operations: |
442 operations: |
436 |
443 |
437 Simplifier.add_context_simprocs |
444 Simplifier.add_context_simprocs |
438 Simplifier.del_context_simprocs |
445 Simplifier.del_context_simprocs |
439 Simplifier.set_context_subgoaler |
446 Simplifier.set_context_subgoaler |
440 Simplifier.reset_context_subgoaler |
447 Simplifier.reset_context_subgoaler |
441 Simplifier.add_context_looper |
448 Simplifier.add_context_looper |
442 Simplifier.del_context_looper |
449 Simplifier.del_context_looper |
443 Simplifier.add_context_unsafe_solver |
450 Simplifier.add_context_unsafe_solver |
444 Simplifier.add_context_safe_solver |
451 Simplifier.add_context_safe_solver |
445 |
452 |
446 Classical.add_context_safe_wrapper |
453 Classical.add_context_safe_wrapper |
447 Classical.del_context_safe_wrapper |
454 Classical.del_context_safe_wrapper |
448 Classical.add_context_unsafe_wrapper |
455 Classical.add_context_unsafe_wrapper |
449 Classical.del_context_unsafe_wrapper |
456 Classical.del_context_unsafe_wrapper |
450 |
457 |
451 IMPORTANT NOTE: proof tools (methods etc.) need to use |
458 IMPORTANT NOTE: proof tools (methods etc.) need to use |
452 local_simpset_of and local_claset_of to instead of the primitive |
459 local_simpset_of and local_claset_of to instead of the primitive |
453 Simplifier.get_local_simpset and Classical.get_local_claset, |
460 Simplifier.get_local_simpset and Classical.get_local_claset, |
454 respectively, in order to see the context dependent fields! |
461 respectively, in order to see the context dependent fields! |
455 |
|
456 |
|
457 *** System *** |
|
458 |
|
459 * Allow symlinks to all proper Isabelle executables (Isabelle, |
|
460 isabelle, isatool etc.). |
|
461 |
|
462 * ISABELLE_DOC_FORMAT setting specifies preferred document format (for |
|
463 isatool doc, isatool mkdir, display_drafts etc.). |
|
464 |
|
465 * isatool usedir: option -f allows specification of the ML file to be |
|
466 used by Isabelle; default is ROOT.ML. |
|
467 |
|
468 * HOL: isatool dimacs2hol converts files in DIMACS CNF format |
|
469 (containing Boolean satisfiability problems) into Isabelle/HOL |
|
470 theories. |
462 |
471 |
463 |
472 |
464 |
473 |
465 New in Isabelle2004 (April 2004) |
474 New in Isabelle2004 (April 2004) |
466 -------------------------------- |
475 -------------------------------- |