304 |
304 |
305 * Old datatype package: |
305 * Old datatype package: |
306 * The generated theorems "xxx.cases" and "xxx.recs" have been renamed |
306 * The generated theorems "xxx.cases" and "xxx.recs" have been renamed |
307 "xxx.case" and "xxx.rec" (e.g., "sum.cases" -> "sum.case"). |
307 "xxx.case" and "xxx.rec" (e.g., "sum.cases" -> "sum.case"). |
308 INCOMPATIBILITY. |
308 INCOMPATIBILITY. |
309 * The generated constants "xxx_case" and "xxx_rec" have been renamed |
309 * The generated constants "xxx_case", "xxx_rec", and "xxx_size" have been |
310 "case_xxx" and "rec_xxx" (e.g., "prod_case" ~> "case_prod"). |
310 renamed "case_xxx", "rec_xxx", and "size_xxx" (e.g., "prod_case" ~> |
|
311 "case_prod"). |
311 INCOMPATIBILITY. |
312 INCOMPATIBILITY. |
312 |
313 |
313 * The types "'a list" and "'a option", their set and map functions, their |
314 * The types "'a list" and "'a option", their set and map functions, their |
314 relators, and their selectors are now produced using the new BNF-based |
315 relators, and their selectors are now produced using the new BNF-based |
315 datatype package. |
316 datatype package. |
316 Renamed constants: |
317 Renamed constants: |
317 Option.set ~> set_option |
318 Option.set ~> set_option |
318 Option.map ~> map_option |
319 Option.map ~> map_option |
319 option_rel ~> rel_option |
320 option_rel ~> rel_option |
320 list_size ~> size_list |
|
321 option_size ~> size_option |
|
322 Renamed theorems: |
321 Renamed theorems: |
323 set_def ~> set_rec[abs_def] |
322 set_def ~> set_rec[abs_def] |
324 map_def ~> map_rec[abs_def] |
323 map_def ~> map_rec[abs_def] |
325 Option.map_def ~> map_option_case[abs_def] (with "case_option" instead of "rec_option") |
324 Option.map_def ~> map_option_case[abs_def] (with "case_option" instead of "rec_option") |
326 option.recs ~> option.rec |
325 option.recs ~> option.rec |
6148 proofs: Measure functions can be declared by proving a rule of the |
6147 proofs: Measure functions can be declared by proving a rule of the |
6149 form "is_measure f" and giving it the [measure_function] attribute. |
6148 form "is_measure f" and giving it the [measure_function] attribute. |
6150 The "is_measure" predicate is logically meaningless (always true), and |
6149 The "is_measure" predicate is logically meaningless (always true), and |
6151 just guides the heuristic. To find suitable measure functions, the |
6150 just guides the heuristic. To find suitable measure functions, the |
6152 termination prover sets up the goal "is_measure ?f" of the appropriate |
6151 termination prover sets up the goal "is_measure ?f" of the appropriate |
6153 type and generates all solutions by prolog-style backwards proof using |
6152 type and generates all solutions by Prolog-style backward proof using |
6154 the declared rules. |
6153 the declared rules. |
6155 |
6154 |
6156 This setup also deals with rules like |
6155 This setup also deals with rules like |
6157 |
6156 |
6158 "is_measure f ==> is_measure (list_size f)" |
6157 "is_measure f ==> is_measure (list_size f)" |