equal
deleted
inserted
replaced
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; |