125 |
125 |
126 Here the 'fixing: thesis' specification essentially modifies the scope |
126 Here the 'fixing: thesis' specification essentially modifies the scope |
127 of the formal thesis parameter, in order to the get the whole |
127 of the formal thesis parameter, in order to the get the whole |
128 existence statement through the induction as expected. |
128 existence statement through the induction as expected. |
129 |
129 |
130 * Provers/induct: mutual goals no longer result in object-level |
130 * Provers/induct: mutual induction rules are now specified as a list |
131 conjunction, but in properly split meta-level statements, |
131 of rule sharing the same induction cases. HOL packages usually |
132 INCOMPATIBILITY. The corresponding cases are duplicated accordingly, |
132 provide foo_bar.inducts for mutually defined items foo and bar |
133 with the case names being indexed according to the number of |
133 (e.g. inductive sets or datatypes). INCOMPATIBILITY, users need to |
134 conjuncts. For example: |
134 specify mutual induction rules differently, i.e. like this: |
|
135 |
|
136 (induct rule: foo_bar.inducts) |
|
137 (induct set: foo bar) |
|
138 (induct type: foo bar) |
|
139 |
|
140 The ML function ProjectRule.projections turns old-style rules into the |
|
141 new format. |
|
142 |
|
143 * Provers/induct: improved handling of simultaneous goals. Instead of |
|
144 introducing object-level conjunction, the statement is now split into |
|
145 several conclusions, while the corresponding symbolic cases are |
|
146 duplicated accordingly. INCOMPATIBILITY, proofs need to be structured |
|
147 explicitly, e.g. like this: |
135 |
148 |
136 lemma |
149 lemma |
137 fixes n :: nat |
150 fixes n :: nat |
138 shows "P n" and "Q n" |
151 shows "P n" and "Q n" |
139 proof (induct n) |
152 proof (induct n) |
150 case (Suc2 n) |
163 case (Suc2 n) |
151 note `P n` and `Q n` |
164 note `P n` and `Q n` |
152 show "Q (Suc n)" sorry |
165 show "Q (Suc n)" sorry |
153 qed |
166 qed |
154 |
167 |
155 * Provers/induct: mutual induction rules are now specified as a list |
168 If simultaneous goals are to be used with mutual rules, the statement |
156 of rule sharing the same induction cases. HOL packages usually |
169 needs to be structured carefully as a two-level conjunction, using |
157 provide foo_bar.inducts for mutually defined items foo and bar |
170 lists of propositions separated by 'and': |
158 (e.g. inductive sets or datatypes). INCOMPATIBILITY, users need to |
171 |
159 specify mutual induction rules differently, i.e. like this: |
172 lemma |
160 |
173 shows "a : A ==> P1 a" |
161 (induct rule: foo_bar.inducts) |
174 "a : A ==> P2 a" |
162 (induct set: foo bar) |
175 and "b : B ==> Q1 b" |
163 (induct type: foo bar) |
176 "b : B ==> Q2 b" |
164 |
177 "b : B ==> Q3 b" |
165 The ML function ProjectRule.projections turns old-style rules into the |
178 proof (induct set: A B) |
166 new format. |
|
167 |
179 |
168 * Provers/induct: support coinduction as well. See |
180 * Provers/induct: support coinduction as well. See |
169 src/HOL/Library/Coinductive_List.thy for various examples. |
181 src/HOL/Library/Coinductive_List.thy for various examples. |
170 |
182 |
171 * Input syntax now supports dummy variable binding "%_. b", where the |
183 * Input syntax now supports dummy variable binding "%_. b", where the |