src/ZF/int_arith.ML
changeset 32155 e2bf2f73b0c8
parent 32149 ef59550a55d3
child 32957 675c0c7e6a37
equal deleted inserted replaced
32154:9721e8e4d48c 32155:e2bf2f73b0c8
   120 
   120 
   121 (*combine unary minus with numeric literals, however nested within a product*)
   121 (*combine unary minus with numeric literals, however nested within a product*)
   122 val int_mult_minus_simps =
   122 val int_mult_minus_simps =
   123     [@{thm zmult_assoc}, @{thm zmult_zminus} RS sym, int_minus_mult_eq_1_to_2];
   123     [@{thm zmult_assoc}, @{thm zmult_zminus} RS sym, int_minus_mult_eq_1_to_2];
   124 
   124 
   125 fun prep_simproc (name, pats, proc) =
   125 fun prep_simproc thy (name, pats, proc) =
   126   Simplifier.simproc (the_context ()) name pats proc;
   126   Simplifier.simproc thy name pats proc;
   127 
   127 
   128 structure CancelNumeralsCommon =
   128 structure CancelNumeralsCommon =
   129   struct
   129   struct
   130   val mk_sum            = (fn T:typ => mk_sum)
   130   val mk_sum            = (fn T:typ => mk_sum)
   131   val dest_sum          = dest_sum
   131   val dest_sum          = dest_sum
   176   val bal_add1 = @{thm le_add_iff1} RS iff_trans
   176   val bal_add1 = @{thm le_add_iff1} RS iff_trans
   177   val bal_add2 = @{thm le_add_iff2} RS iff_trans
   177   val bal_add2 = @{thm le_add_iff2} RS iff_trans
   178 );
   178 );
   179 
   179 
   180 val cancel_numerals =
   180 val cancel_numerals =
   181   map prep_simproc
   181   map (prep_simproc @{theory})
   182    [("inteq_cancel_numerals",
   182    [("inteq_cancel_numerals",
   183      ["l $+ m = n", "l = m $+ n",
   183      ["l $+ m = n", "l = m $+ n",
   184       "l $- m = n", "l = m $- n",
   184       "l $- m = n", "l = m $- n",
   185       "l $* m = n", "l = m $* n"],
   185       "l $* m = n", "l = m $* n"],
   186      K EqCancelNumerals.proc),
   186      K EqCancelNumerals.proc),
   227   end;
   227   end;
   228 
   228 
   229 structure CombineNumerals = CombineNumeralsFun(CombineNumeralsData);
   229 structure CombineNumerals = CombineNumeralsFun(CombineNumeralsData);
   230 
   230 
   231 val combine_numerals =
   231 val combine_numerals =
   232   prep_simproc ("int_combine_numerals", ["i $+ j", "i $- j"], K CombineNumerals.proc);
   232   prep_simproc @{theory}
       
   233     ("int_combine_numerals", ["i $+ j", "i $- j"], K CombineNumerals.proc);
   233 
   234 
   234 
   235 
   235 
   236 
   236 (** Constant folding for integer multiplication **)
   237 (** Constant folding for integer multiplication **)
   237 
   238 
   270 
   271 
   271 
   272 
   272 structure CombineNumeralsProd = CombineNumeralsFun(CombineNumeralsProdData);
   273 structure CombineNumeralsProd = CombineNumeralsFun(CombineNumeralsProdData);
   273 
   274 
   274 val combine_numerals_prod =
   275 val combine_numerals_prod =
   275   prep_simproc ("int_combine_numerals_prod", ["i $* j"], K CombineNumeralsProd.proc);
   276   prep_simproc @{theory}
       
   277     ("int_combine_numerals_prod", ["i $* j"], K CombineNumeralsProd.proc);
   276 
   278 
   277 end;
   279 end;
   278 
   280 
   279 
   281 
   280 Addsimprocs Int_Numeral_Simprocs.cancel_numerals;
   282 Addsimprocs Int_Numeral_Simprocs.cancel_numerals;