src/HOL/Numeral_Simprocs.thy
changeset 54249 ce00f2fef556
parent 48891 c0eafbd55de3
child 54489 03ff4d1e6784
equal deleted inserted replaced
54248:c7af3d651658 54249:ce00f2fef556
    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}]