330 K CombineNumerals.proc); |
330 K CombineNumerals.proc); |
331 |
331 |
332 val field_combine_numerals = |
332 val field_combine_numerals = |
333 Arith_Data.prep_simproc @{theory} |
333 Arith_Data.prep_simproc @{theory} |
334 ("field_combine_numerals", |
334 ("field_combine_numerals", |
335 ["(i::'a::{number_ring,field,division_ring_inverse_zero}) + j", |
335 ["(i::'a::{field_inverse_zero, number_ring}) + j", |
336 "(i::'a::{number_ring,field,division_ring_inverse_zero}) - j"], |
336 "(i::'a::{field_inverse_zero, number_ring}) - j"], |
337 K FieldCombineNumerals.proc); |
337 K FieldCombineNumerals.proc); |
338 |
338 |
339 (** Constant folding for multiplication in semirings **) |
339 (** Constant folding for multiplication in semirings **) |
340 |
340 |
341 (*We do not need folding for addition: combine_numerals does the same thing*) |
341 (*We do not need folding for addition: combine_numerals does the same thing*) |
440 ("int_div_cancel_numeral_factors", |
440 ("int_div_cancel_numeral_factors", |
441 ["((l::'a::{semiring_div,number_ring}) * m) div n", |
441 ["((l::'a::{semiring_div,number_ring}) * m) div n", |
442 "(l::'a::{semiring_div,number_ring}) div (m * n)"], |
442 "(l::'a::{semiring_div,number_ring}) div (m * n)"], |
443 K DivCancelNumeralFactor.proc), |
443 K DivCancelNumeralFactor.proc), |
444 ("divide_cancel_numeral_factor", |
444 ("divide_cancel_numeral_factor", |
445 ["((l::'a::{division_ring_inverse_zero,field,number_ring}) * m) / n", |
445 ["((l::'a::{field_inverse_zero,number_ring}) * m) / n", |
446 "(l::'a::{division_ring_inverse_zero,field,number_ring}) / (m * n)", |
446 "(l::'a::{field_inverse_zero,number_ring}) / (m * n)", |
447 "((number_of v)::'a::{division_ring_inverse_zero,field,number_ring}) / (number_of w)"], |
447 "((number_of v)::'a::{field_inverse_zero,number_ring}) / (number_of w)"], |
448 K DivideCancelNumeralFactor.proc)]; |
448 K DivideCancelNumeralFactor.proc)]; |
449 |
449 |
450 val field_cancel_numeral_factors = |
450 val field_cancel_numeral_factors = |
451 map (Arith_Data.prep_simproc @{theory}) |
451 map (Arith_Data.prep_simproc @{theory}) |
452 [("field_eq_cancel_numeral_factor", |
452 [("field_eq_cancel_numeral_factor", |
453 ["(l::'a::{field,number_ring}) * m = n", |
453 ["(l::'a::{field,number_ring}) * m = n", |
454 "(l::'a::{field,number_ring}) = m * n"], |
454 "(l::'a::{field,number_ring}) = m * n"], |
455 K EqCancelNumeralFactor.proc), |
455 K EqCancelNumeralFactor.proc), |
456 ("field_cancel_numeral_factor", |
456 ("field_cancel_numeral_factor", |
457 ["((l::'a::{division_ring_inverse_zero,field,number_ring}) * m) / n", |
457 ["((l::'a::{field_inverse_zero,number_ring}) * m) / n", |
458 "(l::'a::{division_ring_inverse_zero,field,number_ring}) / (m * n)", |
458 "(l::'a::{field_inverse_zero,number_ring}) / (m * n)", |
459 "((number_of v)::'a::{division_ring_inverse_zero,field,number_ring}) / (number_of w)"], |
459 "((number_of v)::'a::{field_inverse_zero,number_ring}) / (number_of w)"], |
460 K DivideCancelNumeralFactor.proc)] |
460 K DivideCancelNumeralFactor.proc)] |
461 |
461 |
462 |
462 |
463 (** Declarations for ExtractCommonTerm **) |
463 (** Declarations for ExtractCommonTerm **) |
464 |
464 |
596 K ModCancelFactor.proc), |
596 K ModCancelFactor.proc), |
597 ("dvd_cancel_factor", |
597 ("dvd_cancel_factor", |
598 ["((l::'a::idom) * m) dvd n", "(l::'a::idom) dvd (m * n)"], |
598 ["((l::'a::idom) * m) dvd n", "(l::'a::idom) dvd (m * n)"], |
599 K DvdCancelFactor.proc), |
599 K DvdCancelFactor.proc), |
600 ("divide_cancel_factor", |
600 ("divide_cancel_factor", |
601 ["((l::'a::{division_ring_inverse_zero,field}) * m) / n", |
601 ["((l::'a::field_inverse_zero) * m) / n", |
602 "(l::'a::{division_ring_inverse_zero,field}) / (m * n)"], |
602 "(l::'a::field_inverse_zero) / (m * n)"], |
603 K DivideCancelFactor.proc)]; |
603 K DivideCancelFactor.proc)]; |
604 |
604 |
605 end; |
605 end; |
606 |
606 |
607 Addsimprocs Numeral_Simprocs.cancel_numerals; |
607 Addsimprocs Numeral_Simprocs.cancel_numerals; |