* Provers/induct: support simultaneous goals with mutual rules;
authorwenzelm
Fri, 23 Dec 2005 15:18:13 +0100
changeset 18506 96260fb11449
parent 18505 95e6c9ef7488
child 18507 9b8b33098ced
* Provers/induct: support simultaneous goals with mutual rules;
NEWS
--- a/NEWS	Fri Dec 23 15:16:58 2005 +0100
+++ b/NEWS	Fri Dec 23 15:18:13 2005 +0100
@@ -127,11 +127,24 @@
 of the formal thesis parameter, in order to the get the whole
 existence statement through the induction as expected.
 
-* Provers/induct: mutual goals no longer result in object-level
-conjunction, but in properly split meta-level statements,
-INCOMPATIBILITY.  The corresponding cases are duplicated accordingly,
-with the case names being indexed according to the number of
-conjuncts.  For example:
+* Provers/induct: mutual induction rules are now specified as a list
+of rule sharing the same induction cases.  HOL packages usually
+provide foo_bar.inducts for mutually defined items foo and bar
+(e.g. inductive sets or datatypes).  INCOMPATIBILITY, users need to
+specify mutual induction rules differently, i.e. like this:
+
+  (induct rule: foo_bar.inducts)
+  (induct set: foo bar)
+  (induct type: foo bar)
+
+The ML function ProjectRule.projections turns old-style rules into the
+new format.
+
+* Provers/induct: improved handling of simultaneous goals.  Instead of
+introducing object-level conjunction, the statement is now split into
+several conclusions, while the corresponding symbolic cases are
+duplicated accordingly.  INCOMPATIBILITY, proofs need to be structured
+explicitly, e.g. like this:
 
   lemma
     fixes n :: nat
@@ -152,18 +165,17 @@
     show "Q (Suc n)" sorry
   qed
 
-* Provers/induct: mutual induction rules are now specified as a list
-of rule sharing the same induction cases.  HOL packages usually
-provide foo_bar.inducts for mutually defined items foo and bar
-(e.g. inductive sets or datatypes).  INCOMPATIBILITY, users need to
-specify mutual induction rules differently, i.e. like this:
-
-  (induct rule: foo_bar.inducts)
-  (induct set: foo bar)
-  (induct type: foo bar)
-
-The ML function ProjectRule.projections turns old-style rules into the
-new format.
+If simultaneous goals are to be used with mutual rules, the statement
+needs to be structured carefully as a two-level conjunction, using
+lists of propositions separated by 'and':
+
+lemma
+  shows "a : A ==> P1 a"
+        "a : A ==> P2 a"
+    and "b : B ==> Q1 b"
+        "b : B ==> Q2 b"
+        "b : B ==> Q3 b"
+proof (induct set: A B)
 
 * Provers/induct: support coinduction as well.  See
 src/HOL/Library/Coinductive_List.thy for various examples.