NEWS
changeset 18506 96260fb11449
parent 18495 1b96c8671162
child 18507 9b8b33098ced
equal deleted inserted replaced
18505:95e6c9ef7488 18506:96260fb11449
   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