45   | 
    45   | 
    46 * Forward declaration of outer syntax keywords within the theory  | 
    46 * Forward declaration of outer syntax keywords within the theory  | 
    47 header -- minor INCOMPATIBILITY for user-defined commands.  Allow new  | 
    47 header -- minor INCOMPATIBILITY for user-defined commands.  Allow new  | 
    48 commands to be used in the same theory where defined.  | 
    48 commands to be used in the same theory where defined.  | 
    49   | 
    49   | 
    50 * ISABELLE_JDK_HOME settings variable points to JDK with javac and jar  | 
         | 
    51 (not just JRE).  | 
         | 
    52   | 
         | 
    53   | 
    50   | 
    54 *** Pure ***  | 
    51 *** Pure ***  | 
         | 
    52   | 
         | 
    53 * Auxiliary contexts indicate block structure for specifications with  | 
         | 
    54 additional parameters and assumptions.  Such unnamed contexts may be  | 
         | 
    55 nested within other targets, like 'theory', 'locale', 'class',  | 
         | 
    56 'instantiation' etc.  Results from the local context are generalized  | 
         | 
    57 accordingly and applied to the enclosing target context.  Example:  | 
         | 
    58   | 
         | 
    59   context  | 
         | 
    60     fixes x y z :: 'a  | 
         | 
    61     assumes xy: "x = y" and yz: "y = z"  | 
         | 
    62   begin  | 
         | 
    63   | 
         | 
    64   lemma my_trans: "x = z" using xy yz by simp  | 
         | 
    65   | 
         | 
    66   end  | 
         | 
    67   | 
         | 
    68   thm my_trans  | 
         | 
    69   | 
         | 
    70 The most basic application is to factor-out context elements of  | 
         | 
    71 several fixes/assumes/shows theorem statements, e.g. see  | 
         | 
    72 ~~/src/HOL/Isar_Examples/Group_Context.thy  | 
         | 
    73   | 
         | 
    74 Any other local theory specification element works within the "context  | 
         | 
    75 ... begin ... end" block as well.  | 
         | 
    76   | 
         | 
    77 * Bundled declarations associate attributed fact expressions with a  | 
         | 
    78 given name in the context.  These may be later included in other  | 
         | 
    79 contexts.  This allows to manage context extensions casually, without  | 
         | 
    80 the logical dependencies of locales and locale interpretation.  | 
         | 
    81   | 
         | 
    82 See commands 'bundle', 'include', 'including' etc. in the isar-ref  | 
         | 
    83 manual.  | 
         | 
    84   | 
         | 
    85 * Rule composition via attribute "OF" (or ML functions OF/MRS) is more  | 
         | 
    86 tolerant against multiple unifiers, as long as the final result is  | 
         | 
    87 unique.  (As before, rules are composed in canonical right-to-left  | 
         | 
    88 order to accommodate newly introduced premises.)  | 
    55   | 
    89   | 
    56 * Command 'definition' no longer exports the foundational "raw_def"  | 
    90 * Command 'definition' no longer exports the foundational "raw_def"  | 
    57 into the user context.  Minor INCOMPATIBILITY, may use the regular  | 
    91 into the user context.  Minor INCOMPATIBILITY, may use the regular  | 
    58 "def" result with attribute "abs_def" to imitate the old version.  | 
    92 "def" result with attribute "abs_def" to imitate the old version.  | 
    59   | 
    93   | 
    61 "f == %x y. t", which ensures that "simp" or "unfold" steps always  | 
    95 "f == %x y. t", which ensures that "simp" or "unfold" steps always  | 
    62 expand it.  This also works for object-logic equality.  (Formerly  | 
    96 expand it.  This also works for object-logic equality.  (Formerly  | 
    63 undocumented feature.)  | 
    97 undocumented feature.)  | 
    64   | 
    98   | 
    65 * Discontinued old "prems" fact, which used to refer to the accidental  | 
    99 * Discontinued old "prems" fact, which used to refer to the accidental  | 
    66 collection of foundational premises in the context (marked as legacy  | 
   100 collection of foundational premises in the context (already marked as  | 
    67 since Isabelle2011).  | 
   101 legacy since Isabelle2011).  | 
    68   | 
   102   | 
    69 * Obsolete command 'types' has been discontinued.  Use 'type_synonym'  | 
   103 * Obsolete command 'types' has been discontinued.  Use 'type_synonym'  | 
    70 instead.  INCOMPATIBILITY.  | 
   104 instead.  INCOMPATIBILITY.  | 
    71   | 
   105   | 
    72 * Ancient code generator for SML and its commands 'code_module',  | 
   106 * Old code generator for SML and its commands 'code_module',  | 
    73 'code_library', 'consts_code', 'types_code' have been discontinued.  | 
   107 'code_library', 'consts_code', 'types_code' have been discontinued.  | 
    74 Use commands of the generic code generator instead.  INCOMPATIBILITY.  | 
   108 Use commands of the generic code generator instead.  INCOMPATIBILITY.  | 
    75   | 
   109   | 
    76 * Redundant attribute 'code_inline' has been discontinued. Use  | 
   110 * Redundant attribute "code_inline" has been discontinued. Use  | 
    77 'code_unfold' instead.  INCOMPATIBILITY.  | 
   111 "code_unfold" instead.  INCOMPATIBILITY.  | 
    78   | 
   112   | 
    79 * Dropped attribute 'code_unfold_post' in favor of the its dual  | 
   113 * Dropped attribute "code_unfold_post" in favor of the its dual  | 
    80 'code_abbrev', which yields a common pattern in definitions like  | 
   114 "code_abbrev", which yields a common pattern in definitions like  | 
    81   | 
   115   | 
    82   definition [code_abbrev]: "f = t"  | 
   116   definition [code_abbrev]: "f = t"  | 
    83   | 
   117   | 
    84 INCOMPATIBILITY.  | 
   118 INCOMPATIBILITY.  | 
    85   | 
   119   | 
    88 distinct sorts used to be assigned accidentally.  For example:  | 
   122 distinct sorts used to be assigned accidentally.  For example:  | 
    89   | 
   123   | 
    90   lemma "P (x::'a::foo)" and "Q (y::'a::bar)"  -- "now illegal"  | 
   124   lemma "P (x::'a::foo)" and "Q (y::'a::bar)"  -- "now illegal"  | 
    91   | 
   125   | 
    92   lemma "P (x::'a)" and "Q (y::'a::bar)"  | 
   126   lemma "P (x::'a)" and "Q (y::'a::bar)"  | 
    93     -- "now uniform 'a::bar instead of default sort for first occurence (!)"  | 
   127     -- "now uniform 'a::bar instead of default sort for first occurrence (!)"  | 
    94   | 
   128   | 
    95   | 
   129   | 
    96 *** HOL ***  | 
   130 *** HOL ***  | 
    97   | 
   131   | 
    98 * New tutorial "Programming and Proving in Isabelle/HOL".  | 
   132   | 
         | 
   133 * New tutorial "Programming and Proving in Isabelle/HOL" ("prog-prove"). | 
    99 It completely supercedes "A Tutorial Introduction to Structured Isar Proofs",  | 
   134 It completely supercedes "A Tutorial Introduction to Structured Isar Proofs",  | 
   100 which has been removed. It supercedes "Isabelle/HOL, A Proof Assistant  | 
   135 which has been removed. It supercedes "Isabelle/HOL, A Proof Assistant  | 
   101 for Higher-Order Logic" as the recommended beginners tutorial  | 
   136 for Higher-Order Logic" as the recommended beginners tutorial  | 
   102 but does not cover all of the material of that old tutorial.  | 
   137 but does not cover all of the material of that old tutorial.  | 
         | 
   138   | 
         | 
   139 * Discontinued old Tutorial on Isar ("isar-overview"); | 
   103   | 
   140   | 
   104 * The representation of numerals has changed. We now have a datatype  | 
   141 * The representation of numerals has changed. We now have a datatype  | 
   105 "num" representing strictly positive binary numerals, along with  | 
   142 "num" representing strictly positive binary numerals, along with  | 
   106 functions "numeral :: num => 'a" and "neg_numeral :: num => 'a" to  | 
   143 functions "numeral :: num => 'a" and "neg_numeral :: num => 'a" to  | 
   107 represent positive and negated numeric literals, respectively. (See  | 
   144 represent positive and negated numeric literals, respectively. (See  | 
   129 Isabelle2008).  Definitions mem_def and Collect_def have disappeared.  | 
   166 Isabelle2008).  Definitions mem_def and Collect_def have disappeared.  | 
   130 Non-trivial INCOMPATIBILITY.  For developments keeping predicates and  | 
   167 Non-trivial INCOMPATIBILITY.  For developments keeping predicates and  | 
   131 sets separate, it is often sufficient to rephrase sets S accidentally  | 
   168 sets separate, it is often sufficient to rephrase sets S accidentally  | 
   132 used as predicates by "%x. x : S" and predicates P accidentally used  | 
   169 used as predicates by "%x. x : S" and predicates P accidentally used  | 
   133 as sets by "{x. P x}".  Corresponding proofs in a first step should be | 
   170 as sets by "{x. P x}".  Corresponding proofs in a first step should be | 
   134 pruned from any tinkering with former theorems mem_def and  | 
   171 pruned from any tinkering with former theorems mem_def and Collect_def  | 
   135 Collect_def as far as possible.  | 
   172 as far as possible.  | 
   136 For developments which deliberately mixed predicates and  | 
   173   | 
   137 sets, a planning step is necessary to determine what should become a  | 
   174 For developments which deliberately mixed predicates and sets, a  | 
   138 predicate and what a set.  It can be helpful to carry out that step in  | 
   175 planning step is necessary to determine what should become a predicate  | 
         | 
   176 and what a set.  It can be helpful to carry out that step in  | 
   139 Isabelle2011-1 before jumping right into the current release.  | 
   177 Isabelle2011-1 before jumping right into the current release.  | 
         | 
   178   | 
         | 
   179 * The representation of numerals has changed.  Datatype "num"  | 
         | 
   180 represents strictly positive binary numerals, along with functions  | 
         | 
   181 "numeral :: num => 'a" and "neg_numeral :: num => 'a" to represent  | 
         | 
   182 positive and negated numeric literals, respectively. (See definitions  | 
         | 
   183 in ~~/src/HOL/Num.thy.) Potential INCOMPATIBILITY, some user theories  | 
         | 
   184 may require adaptations as follows:  | 
         | 
   185   | 
         | 
   186   - Theorems with number_ring or number_semiring constraints: These  | 
         | 
   187     classes are gone; use comm_ring_1 or comm_semiring_1 instead.  | 
         | 
   188   | 
         | 
   189   - Theories defining numeric types: Remove number, number_semiring,  | 
         | 
   190     and number_ring instances. Defer all theorems about numerals until  | 
         | 
   191     after classes one and semigroup_add have been instantiated.  | 
         | 
   192   | 
         | 
   193   - Numeral-only simp rules: Replace each rule having a "number_of v"  | 
         | 
   194     pattern with two copies, one for numeral and one for neg_numeral.  | 
         | 
   195   | 
         | 
   196   - Theorems about subclasses of semiring_1 or ring_1: These classes  | 
         | 
   197     automatically support numerals now, so more simp rules and  | 
         | 
   198     simprocs may now apply within the proof.  | 
         | 
   199   | 
         | 
   200   - Definitions and theorems using old constructors Pls/Min/Bit0/Bit1:  | 
         | 
   201     Redefine using other integer operations.  | 
   140   | 
   202   | 
   141 * Code generation by default implements sets as container type rather  | 
   203 * Code generation by default implements sets as container type rather  | 
   142 than predicates.  INCOMPATIBILITY.  | 
   204 than predicates.  INCOMPATIBILITY.  | 
   143   | 
   205   | 
   144 * New proof import from HOL Light: Faster, simpler, and more scalable.  | 
   206 * New proof import from HOL Light: Faster, simpler, and more scalable.  | 
   145 Requires a proof bundle, which is available as an external component.  | 
   207 Requires a proof bundle, which is available as an external component.  | 
   146 Removed old (and mostly dead) Importer for HOL4 and HOL Light.  | 
   208 Discontinued old (and mostly dead) Importer for HOL4 and HOL Light.  | 
   147 INCOMPATIBILITY.  | 
   209 INCOMPATIBILITY.  | 
   148   | 
   210   | 
   149 * New type synonym 'a rel = ('a * 'a) set | 
   211 * New type synonym 'a rel = ('a * 'a) set | 
   150   | 
   212   | 
   151 * Theory Divides: Discontinued redundant theorems about div and mod.  | 
   213 * Theory Divides: Discontinued redundant theorems about div and mod.  | 
   175   | 
   237   | 
   176 * Removed redundant theorems nat_mult_2 and nat_mult_2_right; use  | 
   238 * Removed redundant theorems nat_mult_2 and nat_mult_2_right; use  | 
   177 generic mult_2 and mult_2_right instead. INCOMPATIBILITY.  | 
   239 generic mult_2 and mult_2_right instead. INCOMPATIBILITY.  | 
   178   | 
   240   | 
   179 * More default pred/set conversions on a couple of relation operations  | 
   241 * More default pred/set conversions on a couple of relation operations  | 
   180 and predicates.  Added powers of predicate relations.  | 
   242 and predicates.  Added powers of predicate relations.  Consolidation  | 
   181 Consolidation of some relation theorems:  | 
   243 of some relation theorems:  | 
   182   | 
   244   | 
   183   converse_def ~> converse_unfold  | 
   245   converse_def ~> converse_unfold  | 
   184   rel_comp_def ~> rel_comp_unfold  | 
   246   rel_comp_def ~> rel_comp_unfold  | 
   185   symp_def ~> (dropped, use symp_def and sym_def instead)  | 
   247   symp_def ~> (dropped, use symp_def and sym_def instead)  | 
   186   transp_def ~> transp_trans  | 
   248   transp_def ~> transp_trans  | 
   187   Domain_def ~> Domain_unfold  | 
   249   Domain_def ~> Domain_unfold  | 
   188   Range_def ~> Domain_converse [symmetric]  | 
   250   Range_def ~> Domain_converse [symmetric]  | 
   189   | 
   251   | 
   190 Generalized theorems INF_INT_eq, INF_INT_eq2, SUP_UN_eq, SUP_UN_eq2.  | 
   252 Generalized theorems INF_INT_eq, INF_INT_eq2, SUP_UN_eq, SUP_UN_eq2.  | 
   191   | 
   253   | 
   192 See theory "Relation" for examples for making use of pred/set conversions  | 
   254 See theory "Relation" for examples for making use of pred/set  | 
   193 by means of attributes "to_set" and "to_pred".  | 
   255 conversions by means of attributes "to_set" and "to_pred".  | 
   194   | 
   256   | 
   195 INCOMPATIBILITY.  | 
   257 INCOMPATIBILITY.  | 
   196   | 
   258   | 
   197 * Consolidated various theorem names relating to Finite_Set.fold  | 
   259 * Consolidated various theorem names relating to Finite_Set.fold  | 
   198 combinator:  | 
   260 combinator:  | 
   210   | 
   272   | 
   211   INFI_set_fold ~> INF_set_fold  | 
   273   INFI_set_fold ~> INF_set_fold  | 
   212   SUPR_set_fold ~> SUP_set_fold  | 
   274   SUPR_set_fold ~> SUP_set_fold  | 
   213   INF_code ~> INF_set_foldr  | 
   275   INF_code ~> INF_set_foldr  | 
   214   SUP_code ~> SUP_set_foldr  | 
   276   SUP_code ~> SUP_set_foldr  | 
   215   foldr.simps ~> foldr_Nil foldr_Cons (in point-free formulation)  | 
   277   foldr.simps ~> foldr.simps (in point-free formulation)  | 
   216   foldl.simps ~> foldl_Nil foldl_Cons  | 
   278   foldr_fold_rev ~> foldr_conv_fold  | 
   217   foldr_fold_rev ~> foldr_def  | 
   279   foldl_fold ~> foldl_conv_fold  | 
   218   foldl_fold ~> foldl_def  | 
   280   foldr_foldr ~> foldr_conv_foldl  | 
         | 
   281   foldl_foldr ~> foldl_conv_foldr  | 
   219   | 
   282   | 
   220 INCOMPATIBILITY.  | 
   283 INCOMPATIBILITY.  | 
   221   | 
   284   | 
   222 * Dropped rarely useful theorems concerning fold combinators:  | 
   285 * Dropped rarely useful theorems concerning fold combinators:  | 
   223 foldl_apply, foldl_fun_comm, foldl_rev, fold_weak_invariant,  | 
   286 foldl_apply, foldl_fun_comm, foldl_rev, fold_weak_invariant,  | 
   224 rev_foldl_cons, fold_set_remdups, fold_set, fold_set1,  | 
   287 rev_foldl_cons, fold_set_remdups, fold_set, fold_set1,  | 
   225 concat_conv_foldl, foldl_weak_invariant, foldl_invariant,  | 
   288 concat_conv_foldl, foldl_weak_invariant, foldl_invariant,  | 
   226 foldr_invariant, foldl_absorb0, foldl_foldr1_lemma, foldl_foldr1,  | 
   289 foldr_invariant, foldl_absorb0, foldl_foldr1_lemma, foldl_foldr1,  | 
   227 listsum_conv_fold, listsum_foldl, sort_foldl_insort.  INCOMPATIBILITY.  | 
   290 listsum_conv_fold, listsum_foldl, sort_foldl_insort, foldl_assoc,  | 
   228 Prefer "List.fold" with canonical argument order, or boil down  | 
   291 foldr_conv_foldl, start_le_sum, elem_le_sum, sum_eq_0_conv.  | 
   229 "List.foldr" and "List.foldl" to "List.fold" by unfolding "foldr_def"  | 
   292 INCOMPATIBILITY.  For the common phrases "%xs. List.foldr plus xs 0"  | 
   230 and "foldl_def".  For the common phrases "%xs. List.foldr plus xs 0"  | 
   293 and "List.foldl plus 0", prefer "List.listsum".  Otherwise it can be  | 
   231 and "List.foldl plus 0", prefer "List.listsum".  | 
   294 useful to boil down "List.foldr" and "List.foldl" to "List.fold" by  | 
         | 
   295 unfolding "foldr_conv_fold" and "foldl_conv_fold".  | 
         | 
   296   | 
         | 
   297 * Dropped lemmas minus_set_foldr, union_set_foldr, union_coset_foldr,  | 
         | 
   298 inter_coset_foldr, Inf_fin_set_foldr, Sup_fin_set_foldr,  | 
         | 
   299 Min_fin_set_foldr, Max_fin_set_foldr, Inf_set_foldr, Sup_set_foldr,  | 
         | 
   300 INF_set_foldr, SUP_set_foldr.  INCOMPATIBILITY.  Prefer corresponding  | 
         | 
   301 lemmas over fold rather than foldr, or make use of lemmas  | 
         | 
   302 fold_conv_foldr and fold_rev.  | 
   232   | 
   303   | 
   233 * Congruence rules Option.map_cong and Option.bind_cong for recursion  | 
   304 * Congruence rules Option.map_cong and Option.bind_cong for recursion  | 
   234 through option types.  | 
   305 through option types.  | 
   235   | 
   306   | 
   236 * Concrete syntax for case expressions includes constraints for source  | 
   307 * Concrete syntax for case expressions includes constraints for source  | 
   253   fold1_set ~> fold1_set_fold  | 
   324   fold1_set ~> fold1_set_fold  | 
   254   | 
   325   | 
   255 INCOMPATIBILITY.  | 
   326 INCOMPATIBILITY.  | 
   256   | 
   327   | 
   257 * Renamed facts about the power operation on relations, i.e., relpow  | 
   328 * Renamed facts about the power operation on relations, i.e., relpow  | 
   258   to match the constant's name:  | 
   329 to match the constant's name:  | 
   259     | 
   330   | 
   260   rel_pow_1 ~> relpow_1  | 
   331   rel_pow_1 ~> relpow_1  | 
   261   rel_pow_0_I ~> relpow_0_I  | 
   332   rel_pow_0_I ~> relpow_0_I  | 
   262   rel_pow_Suc_I ~> relpow_Suc_I  | 
   333   rel_pow_Suc_I ~> relpow_Suc_I  | 
   263   rel_pow_Suc_I2 ~> relpow_Suc_I2  | 
   334   rel_pow_Suc_I2 ~> relpow_Suc_I2  | 
   264   rel_pow_0_E ~> relpow_0_E  | 
   335   rel_pow_0_E ~> relpow_0_E  | 
   265   rel_pow_Suc_E ~> relpow_Suc_E  | 
   336   rel_pow_Suc_E ~> relpow_Suc_E  | 
   266   rel_pow_E ~> relpow_E  | 
   337   rel_pow_E ~> relpow_E  | 
   267   rel_pow_Suc_D2 ~> relpow_Suc_D2  | 
   338   rel_pow_Suc_D2 ~> relpow_Suc_D2  | 
   268   rel_pow_Suc_E2 ~> relpow_Suc_E2   | 
   339   rel_pow_Suc_E2 ~> relpow_Suc_E2  | 
   269   rel_pow_Suc_D2' ~> relpow_Suc_D2'  | 
   340   rel_pow_Suc_D2' ~> relpow_Suc_D2'  | 
   270   rel_pow_E2 ~> relpow_E2  | 
   341   rel_pow_E2 ~> relpow_E2  | 
   271   rel_pow_add ~> relpow_add  | 
   342   rel_pow_add ~> relpow_add  | 
   272   rel_pow_commute ~> relpow  | 
   343   rel_pow_commute ~> relpow  | 
   273   rel_pow_empty ~> relpow_empty:  | 
   344   rel_pow_empty ~> relpow_empty:  | 
   279   rel_pow_finite_bounded1 ~> relpow_finite_bounded1  | 
   350   rel_pow_finite_bounded1 ~> relpow_finite_bounded1  | 
   280   rel_pow_finite_bounded ~> relpow_finite_bounded  | 
   351   rel_pow_finite_bounded ~> relpow_finite_bounded  | 
   281   rtrancl_finite_eq_rel_pow ~> rtrancl_finite_eq_relpow  | 
   352   rtrancl_finite_eq_rel_pow ~> rtrancl_finite_eq_relpow  | 
   282   trancl_finite_eq_rel_pow ~> trancl_finite_eq_relpow  | 
   353   trancl_finite_eq_rel_pow ~> trancl_finite_eq_relpow  | 
   283   single_valued_rel_pow ~> single_valued_relpow  | 
   354   single_valued_rel_pow ~> single_valued_relpow  | 
   284    | 
   355   | 
   285 INCOMPATIBILITY.  | 
   356 INCOMPATIBILITY.  | 
   286   | 
   357   | 
   287 * New theory HOL/Library/DAList provides an abstract type for association  | 
   358 * Theory Relation: Consolidated constant name for relation composition  | 
   288   lists with distinct keys.  | 
   359 and corresponding theorem names:  | 
         | 
   360   | 
         | 
   361   - Renamed constant rel_comp to relcomp  | 
         | 
   362   | 
         | 
   363   - Dropped abbreviation pred_comp. Use relcompp instead.  | 
         | 
   364   | 
         | 
   365   - Renamed theorems:  | 
         | 
   366   | 
         | 
   367     rel_compI ~> relcompI  | 
         | 
   368     rel_compEpair ~> relcompEpair  | 
         | 
   369     rel_compE ~> relcompE  | 
         | 
   370     pred_comp_rel_comp_eq ~> relcompp_relcomp_eq  | 
         | 
   371     rel_comp_empty1 ~> relcomp_empty1  | 
         | 
   372     rel_comp_mono ~> relcomp_mono  | 
         | 
   373     rel_comp_subset_Sigma ~> relcomp_subset_Sigma  | 
         | 
   374     rel_comp_distrib ~> relcomp_distrib  | 
         | 
   375     rel_comp_distrib2 ~> relcomp_distrib2  | 
         | 
   376     rel_comp_UNION_distrib ~> relcomp_UNION_distrib  | 
         | 
   377     rel_comp_UNION_distrib2 ~> relcomp_UNION_distrib2  | 
         | 
   378     single_valued_rel_comp ~> single_valued_relcomp  | 
         | 
   379     rel_comp_unfold ~> relcomp_unfold  | 
         | 
   380     converse_rel_comp ~> converse_relcomp  | 
         | 
   381     pred_compI ~> relcomppI  | 
         | 
   382     pred_compE ~> relcomppE  | 
         | 
   383     pred_comp_bot1 ~> relcompp_bot1  | 
         | 
   384     pred_comp_bot2 ~> relcompp_bot2  | 
         | 
   385     transp_pred_comp_less_eq ~> transp_relcompp_less_eq  | 
         | 
   386     pred_comp_mono ~> relcompp_mono  | 
         | 
   387     pred_comp_distrib ~> relcompp_distrib  | 
         | 
   388     pred_comp_distrib2 ~> relcompp_distrib2  | 
         | 
   389     converse_pred_comp ~> converse_relcompp  | 
         | 
   390   | 
         | 
   391     finite_rel_comp ~> finite_relcomp  | 
         | 
   392   | 
         | 
   393     set_rel_comp ~> set_relcomp  | 
         | 
   394   | 
         | 
   395 INCOMPATIBILITY.  | 
         | 
   396   | 
         | 
   397 * New theory HOL/Library/DAList provides an abstract type for  | 
         | 
   398 association lists with distinct keys.  | 
   289   | 
   399   | 
   290 * 'datatype' specifications allow explicit sort constraints.  | 
   400 * 'datatype' specifications allow explicit sort constraints.  | 
   291   | 
   401   | 
   292 * Theory HOL/Library/Diagonalize has been removed. INCOMPATIBILITY,  | 
   402 * Theory HOL/Library/Diagonalize has been removed. INCOMPATIBILITY,  | 
   293 use theory HOL/Library/Nat_Bijection instead.  | 
   403 use theory HOL/Library/Nat_Bijection instead.  | 
         | 
   404   | 
         | 
   405 * Theory HOL/Library/RBT_Impl: Backing implementation of red-black  | 
         | 
   406 trees is now inside a type class context.  Names of affected  | 
         | 
   407 operations and lemmas have been prefixed by rbt_.  INCOMPATIBILITY for  | 
         | 
   408 theories working directly with raw red-black trees, adapt the names as  | 
         | 
   409 follows:  | 
         | 
   410   | 
         | 
   411   Operations:  | 
         | 
   412   bulkload -> rbt_bulkload  | 
         | 
   413   del_from_left -> rbt_del_from_left  | 
         | 
   414   del_from_right -> rbt_del_from_right  | 
         | 
   415   del -> rbt_del  | 
         | 
   416   delete -> rbt_delete  | 
         | 
   417   ins -> rbt_ins  | 
         | 
   418   insert -> rbt_insert  | 
         | 
   419   insertw -> rbt_insert_with  | 
         | 
   420   insert_with_key -> rbt_insert_with_key  | 
         | 
   421   map_entry -> rbt_map_entry  | 
         | 
   422   lookup -> rbt_lookup  | 
         | 
   423   sorted -> rbt_sorted  | 
         | 
   424   tree_greater -> rbt_greater  | 
         | 
   425   tree_less -> rbt_less  | 
         | 
   426   tree_less_symbol -> rbt_less_symbol  | 
         | 
   427   union -> rbt_union  | 
         | 
   428   union_with -> rbt_union_with  | 
         | 
   429   union_with_key -> rbt_union_with_key  | 
         | 
   430   | 
         | 
   431   Lemmas:  | 
         | 
   432   balance_left_sorted -> balance_left_rbt_sorted  | 
         | 
   433   balance_left_tree_greater -> balance_left_rbt_greater  | 
         | 
   434   balance_left_tree_less -> balance_left_rbt_less  | 
         | 
   435   balance_right_sorted -> balance_right_rbt_sorted  | 
         | 
   436   balance_right_tree_greater -> balance_right_rbt_greater  | 
         | 
   437   balance_right_tree_less -> balance_right_rbt_less  | 
         | 
   438   balance_sorted -> balance_rbt_sorted  | 
         | 
   439   balance_tree_greater -> balance_rbt_greater  | 
         | 
   440   balance_tree_less -> balance_rbt_less  | 
         | 
   441   bulkload_is_rbt -> rbt_bulkload_is_rbt  | 
         | 
   442   combine_sorted -> combine_rbt_sorted  | 
         | 
   443   combine_tree_greater -> combine_rbt_greater  | 
         | 
   444   combine_tree_less -> combine_rbt_less  | 
         | 
   445   delete_in_tree -> rbt_delete_in_tree  | 
         | 
   446   delete_is_rbt -> rbt_delete_is_rbt  | 
         | 
   447   del_from_left_tree_greater -> rbt_del_from_left_rbt_greater  | 
         | 
   448   del_from_left_tree_less -> rbt_del_from_left_rbt_less  | 
         | 
   449   del_from_right_tree_greater -> rbt_del_from_right_rbt_greater  | 
         | 
   450   del_from_right_tree_less -> rbt_del_from_right_rbt_less  | 
         | 
   451   del_in_tree -> rbt_del_in_tree  | 
         | 
   452   del_inv1_inv2 -> rbt_del_inv1_inv2  | 
         | 
   453   del_sorted -> rbt_del_rbt_sorted  | 
         | 
   454   del_tree_greater -> rbt_del_rbt_greater  | 
         | 
   455   del_tree_less -> rbt_del_rbt_less  | 
         | 
   456   dom_lookup_Branch -> dom_rbt_lookup_Branch  | 
         | 
   457   entries_lookup -> entries_rbt_lookup  | 
         | 
   458   finite_dom_lookup -> finite_dom_rbt_lookup  | 
         | 
   459   insert_sorted -> rbt_insert_rbt_sorted  | 
         | 
   460   insertw_is_rbt -> rbt_insertw_is_rbt  | 
         | 
   461   insertwk_is_rbt -> rbt_insertwk_is_rbt  | 
         | 
   462   insertwk_sorted -> rbt_insertwk_rbt_sorted  | 
         | 
   463   insertw_sorted -> rbt_insertw_rbt_sorted  | 
         | 
   464   ins_sorted -> ins_rbt_sorted  | 
         | 
   465   ins_tree_greater -> ins_rbt_greater  | 
         | 
   466   ins_tree_less -> ins_rbt_less  | 
         | 
   467   is_rbt_sorted -> is_rbt_rbt_sorted  | 
         | 
   468   lookup_balance -> rbt_lookup_balance  | 
         | 
   469   lookup_bulkload -> rbt_lookup_rbt_bulkload  | 
         | 
   470   lookup_delete -> rbt_lookup_rbt_delete  | 
         | 
   471   lookup_Empty -> rbt_lookup_Empty  | 
         | 
   472   lookup_from_in_tree -> rbt_lookup_from_in_tree  | 
         | 
   473   lookup_in_tree -> rbt_lookup_in_tree  | 
         | 
   474   lookup_ins -> rbt_lookup_ins  | 
         | 
   475   lookup_insert -> rbt_lookup_rbt_insert  | 
         | 
   476   lookup_insertw -> rbt_lookup_rbt_insertw  | 
         | 
   477   lookup_insertwk -> rbt_lookup_rbt_insertwk  | 
         | 
   478   lookup_keys -> rbt_lookup_keys  | 
         | 
   479   lookup_map -> rbt_lookup_map  | 
         | 
   480   lookup_map_entry -> rbt_lookup_rbt_map_entry  | 
         | 
   481   lookup_tree_greater -> rbt_lookup_rbt_greater  | 
         | 
   482   lookup_tree_less -> rbt_lookup_rbt_less  | 
         | 
   483   lookup_union -> rbt_lookup_rbt_union  | 
         | 
   484   map_entry_color_of -> rbt_map_entry_color_of  | 
         | 
   485   map_entry_inv1 -> rbt_map_entry_inv1  | 
         | 
   486   map_entry_inv2 -> rbt_map_entry_inv2  | 
         | 
   487   map_entry_is_rbt -> rbt_map_entry_is_rbt  | 
         | 
   488   map_entry_sorted -> rbt_map_entry_rbt_sorted  | 
         | 
   489   map_entry_tree_greater -> rbt_map_entry_rbt_greater  | 
         | 
   490   map_entry_tree_less -> rbt_map_entry_rbt_less  | 
         | 
   491   map_tree_greater -> map_rbt_greater  | 
         | 
   492   map_tree_less -> map_rbt_less  | 
         | 
   493   map_sorted -> map_rbt_sorted  | 
         | 
   494   paint_sorted -> paint_rbt_sorted  | 
         | 
   495   paint_lookup -> paint_rbt_lookup  | 
         | 
   496   paint_tree_greater -> paint_rbt_greater  | 
         | 
   497   paint_tree_less -> paint_rbt_less  | 
         | 
   498   sorted_entries -> rbt_sorted_entries  | 
         | 
   499   tree_greater_eq_trans -> rbt_greater_eq_trans  | 
         | 
   500   tree_greater_nit -> rbt_greater_nit  | 
         | 
   501   tree_greater_prop -> rbt_greater_prop  | 
         | 
   502   tree_greater_simps -> rbt_greater_simps  | 
         | 
   503   tree_greater_trans -> rbt_greater_trans  | 
         | 
   504   tree_less_eq_trans -> rbt_less_eq_trans  | 
         | 
   505   tree_less_nit -> rbt_less_nit  | 
         | 
   506   tree_less_prop -> rbt_less_prop  | 
         | 
   507   tree_less_simps -> rbt_less_simps  | 
         | 
   508   tree_less_trans -> rbt_less_trans  | 
         | 
   509   tree_ord_props -> rbt_ord_props  | 
         | 
   510   union_Branch -> rbt_union_Branch  | 
         | 
   511   union_is_rbt -> rbt_union_is_rbt  | 
         | 
   512   unionw_is_rbt -> rbt_unionw_is_rbt  | 
         | 
   513   unionwk_is_rbt -> rbt_unionwk_is_rbt  | 
         | 
   514   unionwk_sorted -> rbt_unionwk_rbt_sorted  | 
   294   | 
   515   | 
   295 * Session HOL-Word: Discontinued many redundant theorems specific to  | 
   516 * Session HOL-Word: Discontinued many redundant theorems specific to  | 
   296 type 'a word. INCOMPATIBILITY, use the corresponding generic theorems  | 
   517 type 'a word. INCOMPATIBILITY, use the corresponding generic theorems  | 
   297 instead.  | 
   518 instead.  | 
   298   | 
   519   | 
   396   list.exhaust [case_product nat.exhaust]  | 
   617   list.exhaust [case_product nat.exhaust]  | 
   397   | 
   618   | 
   398 produces a rule which can be used to perform case distinction on both  | 
   619 produces a rule which can be used to perform case distinction on both  | 
   399 a list and a nat.  | 
   620 a list and a nat.  | 
   400   | 
   621   | 
   401 * Improved code generation of multisets.  | 
   622 * Theory Library/Multiset: Improved code generation of multisets.  | 
   402   | 
   623   | 
   403 * New diagnostic command find_unused_assms to find potentially superfluous  | 
   624 * New diagnostic command 'find_unused_assms' to find potentially  | 
   404   assumptions in theorems using Quickcheck.  | 
   625 superfluous assumptions in theorems using Quickcheck.  | 
   405   | 
   626   | 
   406 * Quickcheck:  | 
   627 * Quickcheck:  | 
         | 
   628   | 
   407   - Quickcheck returns variable assignments as counterexamples, which  | 
   629   - Quickcheck returns variable assignments as counterexamples, which  | 
   408     allows to reveal the underspecification of functions under test.  | 
   630     allows to reveal the underspecification of functions under test.  | 
   409     For example, refuting "hd xs = x", it presents the variable  | 
   631     For example, refuting "hd xs = x", it presents the variable  | 
   410     assignment xs = [] and x = a1 as a counterexample, assuming that  | 
   632     assignment xs = [] and x = a1 as a counterexample, assuming that  | 
   411     any property is false whenever "hd []" occurs in it.  | 
   633     any property is false whenever "hd []" occurs in it.  | 
         | 
   634   | 
   412     These counterexample are marked as potentially spurious, as  | 
   635     These counterexample are marked as potentially spurious, as  | 
   413     Quickcheck also returns "xs = []" as a counterexample to the  | 
   636     Quickcheck also returns "xs = []" as a counterexample to the  | 
   414     obvious theorem "hd xs = hd xs".  | 
   637     obvious theorem "hd xs = hd xs".  | 
         | 
   638   | 
   415     After finding a potentially spurious counterexample, Quickcheck  | 
   639     After finding a potentially spurious counterexample, Quickcheck  | 
   416     continues searching for genuine ones.  | 
   640     continues searching for genuine ones.  | 
         | 
   641   | 
   417     By default, Quickcheck shows potentially spurious and genuine  | 
   642     By default, Quickcheck shows potentially spurious and genuine  | 
   418     counterexamples. The option "genuine_only" sets quickcheck to  | 
   643     counterexamples. The option "genuine_only" sets quickcheck to only  | 
   419     only show genuine counterexamples.  | 
   644     show genuine counterexamples.  | 
   420   | 
   645   | 
   421   - The command 'quickcheck_generator' creates random and exhaustive  | 
   646   - The command 'quickcheck_generator' creates random and exhaustive  | 
   422     value generators for a given type and operations.  | 
   647     value generators for a given type and operations.  | 
         | 
   648   | 
   423     It generates values by using the operations as if they were  | 
   649     It generates values by using the operations as if they were  | 
   424     constructors of that type.   | 
   650     constructors of that type.  | 
   425   | 
   651   | 
   426   - Support for multisets.  | 
   652   - Support for multisets.  | 
   427   | 
   653   | 
   428   - Added "use_subtype" options.  | 
   654   - Added "use_subtype" options.  | 
   429    | 
   655   | 
         | 
   656   - Added "quickcheck_locale" configuration to specify how to process  | 
         | 
   657     conjectures in a locale context.  | 
         | 
   658   | 
   430 * Nitpick:  | 
   659 * Nitpick:  | 
         | 
   660   | 
   431   - Fixed infinite loop caused by the 'peephole_optim' option and  | 
   661   - Fixed infinite loop caused by the 'peephole_optim' option and  | 
   432     affecting 'rat' and 'real'.  | 
   662     affecting 'rat' and 'real'.  | 
   433   | 
   663   | 
   434 * Sledgehammer:  | 
   664 * Sledgehammer:  | 
   435   - Added "lam_trans", "uncurry_aliases", and "minimize" options.  | 
   665   - Added "lam_trans", "uncurry_aliases", and "minimize" options.  |