176 |
176 |
177 (*Simplify Numeral0+n, n+Numeral0, Numeral1*n, n*Numeral1, 1*x, x*1, x/1 *) |
177 (*Simplify Numeral0+n, n+Numeral0, Numeral1*n, n*Numeral1, 1*x, x*1, x/1 *) |
178 val add_0s = @{thms add_0s}; |
178 val add_0s = @{thms add_0s}; |
179 val mult_1s = @{thms mult_1s mult_1_left mult_1_right divide_1}; |
179 val mult_1s = @{thms mult_1s mult_1_left mult_1_right divide_1}; |
180 |
180 |
|
181 (* For post-simplification of the rhs of simproc-generated rules *) |
|
182 val post_simps = |
|
183 [@{thm numeral_0_eq_0}, @{thm numeral_1_eq_1}, |
|
184 @{thm add_0_left}, @{thm add_0_right}, |
|
185 @{thm mult_zero_left}, @{thm mult_zero_right}, |
|
186 @{thm mult_1_left}, @{thm mult_1_right}, |
|
187 @{thm mult_minus1}, @{thm mult_minus1_right}] |
|
188 |
|
189 val field_post_simps = |
|
190 post_simps @ [@{thm divide_zero_left}, @{thm divide_1}] |
|
191 |
181 (*Simplify inverse Numeral1, a/Numeral1*) |
192 (*Simplify inverse Numeral1, a/Numeral1*) |
182 val inverse_1s = [@{thm inverse_numeral_1}]; |
193 val inverse_1s = [@{thm inverse_numeral_1}]; |
183 val divide_1s = [@{thm divide_numeral_1}]; |
194 val divide_1s = [@{thm divide_numeral_1}]; |
184 |
195 |
185 (*To perform binary arithmetic. The "left" rewriting handles patterns |
196 (*To perform binary arithmetic. The "left" rewriting handles patterns |
233 THEN ALLGOALS (simp_tac (Simplifier.inherit_context ss norm_ss2)) |
244 THEN ALLGOALS (simp_tac (Simplifier.inherit_context ss norm_ss2)) |
234 THEN ALLGOALS (simp_tac (Simplifier.inherit_context ss norm_ss3)) |
245 THEN ALLGOALS (simp_tac (Simplifier.inherit_context ss norm_ss3)) |
235 |
246 |
236 val numeral_simp_ss = HOL_ss addsimps add_0s @ simps |
247 val numeral_simp_ss = HOL_ss addsimps add_0s @ simps |
237 fun numeral_simp_tac ss = ALLGOALS (simp_tac (Simplifier.inherit_context ss numeral_simp_ss)) |
248 fun numeral_simp_tac ss = ALLGOALS (simp_tac (Simplifier.inherit_context ss numeral_simp_ss)) |
238 val simplify_meta_eq = Arith_Data.simplify_meta_eq (add_0s @ mult_1s) |
249 val simplify_meta_eq = Arith_Data.simplify_meta_eq post_simps |
239 val prove_conv = Arith_Data.prove_conv |
250 val prove_conv = Arith_Data.prove_conv |
240 end; |
251 end; |
241 |
252 |
242 structure EqCancelNumerals = CancelNumeralsFun |
253 structure EqCancelNumerals = CancelNumeralsFun |
243 (open CancelNumeralsCommon |
254 (open CancelNumeralsCommon |
285 THEN ALLGOALS (simp_tac (Simplifier.inherit_context ss norm_ss2)) |
296 THEN ALLGOALS (simp_tac (Simplifier.inherit_context ss norm_ss2)) |
286 THEN ALLGOALS (simp_tac (Simplifier.inherit_context ss norm_ss3)) |
297 THEN ALLGOALS (simp_tac (Simplifier.inherit_context ss norm_ss3)) |
287 |
298 |
288 val numeral_simp_ss = HOL_ss addsimps add_0s @ simps |
299 val numeral_simp_ss = HOL_ss addsimps add_0s @ simps |
289 fun numeral_simp_tac ss = ALLGOALS (simp_tac (Simplifier.inherit_context ss numeral_simp_ss)) |
300 fun numeral_simp_tac ss = ALLGOALS (simp_tac (Simplifier.inherit_context ss numeral_simp_ss)) |
290 val simplify_meta_eq = Arith_Data.simplify_meta_eq (add_0s @ mult_1s) |
301 val simplify_meta_eq = Arith_Data.simplify_meta_eq post_simps |
291 end; |
302 end; |
292 |
303 |
293 structure CombineNumerals = CombineNumeralsFun(CombineNumeralsData); |
304 structure CombineNumerals = CombineNumeralsFun(CombineNumeralsData); |
294 |
305 |
295 (*Version for fields, where coefficients can be fractions*) |
306 (*Version for fields, where coefficients can be fractions*) |
312 THEN ALLGOALS (simp_tac (Simplifier.inherit_context ss norm_ss2)) |
323 THEN ALLGOALS (simp_tac (Simplifier.inherit_context ss norm_ss2)) |
313 THEN ALLGOALS (simp_tac (Simplifier.inherit_context ss norm_ss3)) |
324 THEN ALLGOALS (simp_tac (Simplifier.inherit_context ss norm_ss3)) |
314 |
325 |
315 val numeral_simp_ss = HOL_ss addsimps add_0s @ simps @ [@{thm add_frac_eq}] |
326 val numeral_simp_ss = HOL_ss addsimps add_0s @ simps @ [@{thm add_frac_eq}] |
316 fun numeral_simp_tac ss = ALLGOALS (simp_tac (Simplifier.inherit_context ss numeral_simp_ss)) |
327 fun numeral_simp_tac ss = ALLGOALS (simp_tac (Simplifier.inherit_context ss numeral_simp_ss)) |
317 val simplify_meta_eq = Arith_Data.simplify_meta_eq (add_0s @ mult_1s @ divide_1s) |
328 val simplify_meta_eq = Arith_Data.simplify_meta_eq field_post_simps |
318 end; |
329 end; |
319 |
330 |
320 structure FieldCombineNumerals = CombineNumeralsFun(FieldCombineNumeralsData); |
331 structure FieldCombineNumerals = CombineNumeralsFun(FieldCombineNumeralsData); |
321 |
332 |
322 fun combine_numerals ss ct = CombineNumerals.proc ss (term_of ct) |
333 fun combine_numerals ss ct = CombineNumerals.proc ss (term_of ct) |
354 |
365 |
355 val numeral_simp_ss = HOL_ss addsimps |
366 val numeral_simp_ss = HOL_ss addsimps |
356 [@{thm eq_number_of_eq}, @{thm less_number_of}, @{thm le_number_of}] @ simps |
367 [@{thm eq_number_of_eq}, @{thm less_number_of}, @{thm le_number_of}] @ simps |
357 fun numeral_simp_tac ss = ALLGOALS (simp_tac (Simplifier.inherit_context ss numeral_simp_ss)) |
368 fun numeral_simp_tac ss = ALLGOALS (simp_tac (Simplifier.inherit_context ss numeral_simp_ss)) |
358 val simplify_meta_eq = Arith_Data.simplify_meta_eq |
369 val simplify_meta_eq = Arith_Data.simplify_meta_eq |
359 [@{thm Nat.add_0}, @{thm Nat.add_0_right}, @{thm mult_zero_left}, |
370 ([@{thm Nat.add_0}, @{thm Nat.add_0_right}] @ post_simps) |
360 @{thm mult_zero_right}, @{thm mult_Bit1}, @{thm mult_1_right}]; |
|
361 val prove_conv = Arith_Data.prove_conv |
371 val prove_conv = Arith_Data.prove_conv |
362 end |
372 end |
363 |
373 |
364 (*Version for semiring_div*) |
374 (*Version for semiring_div*) |
365 structure DivCancelNumeralFactor = CancelNumeralFactorFun |
375 structure DivCancelNumeralFactor = CancelNumeralFactorFun |