11 ML_file "~~/src/Provers/Arith/combine_numerals.ML" |
11 ML_file "~~/src/Provers/Arith/combine_numerals.ML" |
12 ML_file "~~/src/Provers/Arith/cancel_numeral_factor.ML" |
12 ML_file "~~/src/Provers/Arith/cancel_numeral_factor.ML" |
13 ML_file "~~/src/Provers/Arith/extract_common_term.ML" |
13 ML_file "~~/src/Provers/Arith/extract_common_term.ML" |
14 |
14 |
15 lemmas semiring_norm = |
15 lemmas semiring_norm = |
16 Let_def arith_simps nat_arith rel_simps |
16 Let_def arith_simps diff_nat_numeral rel_simps |
17 if_False if_True |
17 if_False if_True |
18 add_0 add_Suc add_numeral_left |
18 add_0 add_Suc add_numeral_left |
19 add_neg_numeral_left mult_numeral_left |
19 add_neg_numeral_left mult_numeral_left |
20 numeral_1_eq_1 [symmetric] Suc_eq_plus1 |
20 numeral_1_eq_1 [symmetric] Suc_eq_plus1 |
21 eq_numeral_iff_iszero not_iszero_Numeral1 |
21 eq_numeral_iff_iszero not_iszero_Numeral1 |
276 |
276 |
277 simproc_setup nat_dvd_cancel_factor |
277 simproc_setup nat_dvd_cancel_factor |
278 ("((l::nat) * m) dvd n" | "(l::nat) dvd (m * n)") = |
278 ("((l::nat) * m) dvd n" | "(l::nat) dvd (m * n)") = |
279 {* fn phi => Nat_Numeral_Simprocs.dvd_cancel_factor *} |
279 {* fn phi => Nat_Numeral_Simprocs.dvd_cancel_factor *} |
280 |
280 |
281 (* FIXME: duplicate rule warnings for: |
|
282 ring_distribs |
|
283 numeral_plus_numeral numeral_times_numeral |
|
284 numeral_eq_iff numeral_less_iff numeral_le_iff |
|
285 numeral_neq_zero zero_neq_numeral zero_less_numeral |
|
286 if_True if_False *) |
|
287 declaration {* |
281 declaration {* |
288 K (Lin_Arith.add_simps ([@{thm Suc_numeral}, @{thm int_numeral}]) |
282 K (Lin_Arith.add_simprocs |
289 #> Lin_Arith.add_simps (@{thms ring_distribs} @ [@{thm Let_numeral}, @{thm Let_neg_numeral}, @{thm Let_0}, @{thm Let_1}, |
|
290 @{thm nat_0}, @{thm nat_1}, |
|
291 @{thm numeral_plus_numeral}, @{thm diff_nat_numeral}, @{thm numeral_times_numeral}, |
|
292 @{thm numeral_eq_iff}, @{thm numeral_less_iff}, @{thm numeral_le_iff}, |
|
293 @{thm le_Suc_numeral}, @{thm le_numeral_Suc}, |
|
294 @{thm less_Suc_numeral}, @{thm less_numeral_Suc}, |
|
295 @{thm Suc_eq_numeral}, @{thm eq_numeral_Suc}, |
|
296 @{thm mult_Suc}, @{thm mult_Suc_right}, |
|
297 @{thm add_Suc}, @{thm add_Suc_right}, |
|
298 @{thm numeral_neq_zero}, @{thm zero_neq_numeral}, @{thm zero_less_numeral}, |
|
299 @{thm of_int_numeral}, @{thm of_nat_numeral}, @{thm nat_numeral}, |
|
300 @{thm if_True}, @{thm if_False}]) |
|
301 #> Lin_Arith.add_simprocs |
|
302 [@{simproc semiring_assoc_fold}, |
283 [@{simproc semiring_assoc_fold}, |
303 @{simproc int_combine_numerals}, |
284 @{simproc int_combine_numerals}, |
304 @{simproc inteq_cancel_numerals}, |
285 @{simproc inteq_cancel_numerals}, |
305 @{simproc intless_cancel_numerals}, |
286 @{simproc intless_cancel_numerals}, |
306 @{simproc intle_cancel_numerals}] |
287 @{simproc intle_cancel_numerals}] |