src/HOL/Integ/int_arith1.ML
changeset 18328 841261f303a1
parent 17956 369e2af8ee45
child 18708 4b3dadb4fe33
equal deleted inserted replaced
18327:1ee4523c831f 18328:841261f303a1
   306 
   306 
   307 (*Apply the given rewrite (if present) just once*)
   307 (*Apply the given rewrite (if present) just once*)
   308 fun trans_tac NONE      = all_tac
   308 fun trans_tac NONE      = all_tac
   309   | trans_tac (SOME th) = ALLGOALS (rtac (th RS trans));
   309   | trans_tac (SOME th) = ALLGOALS (rtac (th RS trans));
   310 
   310 
   311 fun simplify_meta_eq rules ss =
   311 fun simplify_meta_eq rules =
   312     simplify (Simplifier.inherit_context ss HOL_basic_ss addeqcongs[eq_cong2] addsimps rules)
   312   let val ss0 = HOL_basic_ss addeqcongs [eq_cong2] addsimps rules
   313     o mk_meta_eq;
   313   in fn ss => simplify (Simplifier.inherit_context ss ss0) o mk_meta_eq end
   314 
   314 
   315 structure CancelNumeralsCommon =
   315 structure CancelNumeralsCommon =
   316   struct
   316   struct
   317   val mk_sum            = mk_sum
   317   val mk_sum            = mk_sum
   318   val dest_sum          = dest_sum
   318   val dest_sum          = dest_sum
   319   val mk_coeff          = mk_coeff
   319   val mk_coeff          = mk_coeff
   320   val dest_coeff        = dest_coeff 1
   320   val dest_coeff        = dest_coeff 1
   321   val find_first_coeff  = find_first_coeff []
   321   val find_first_coeff  = find_first_coeff []
   322   val trans_tac         = fn _ => trans_tac
   322   val trans_tac         = fn _ => trans_tac
       
   323 
       
   324   val norm_ss1 = num_ss addsimps numeral_syms @ add_0s @ mult_1s @
       
   325     diff_simps @ minus_simps @ add_ac
       
   326   val norm_ss2 = num_ss addsimps non_add_bin_simps @ mult_minus_simps
       
   327   val norm_ss3 = num_ss addsimps minus_from_mult_simps @ add_ac @ mult_ac
   323   fun norm_tac ss =
   328   fun norm_tac ss =
   324     let val num_ss' = Simplifier.inherit_context ss num_ss in
   329     ALLGOALS (simp_tac (Simplifier.inherit_context ss norm_ss1))
   325       ALLGOALS (simp_tac (num_ss' addsimps numeral_syms @ add_0s @ mult_1s @
   330     THEN ALLGOALS (simp_tac (Simplifier.inherit_context ss norm_ss2))
   326                                          diff_simps @ minus_simps @ add_ac))
   331     THEN ALLGOALS (simp_tac (Simplifier.inherit_context ss norm_ss3))
   327       THEN ALLGOALS (simp_tac (num_ss' addsimps non_add_bin_simps @ mult_minus_simps))
   332 
   328       THEN ALLGOALS (simp_tac (num_ss' addsimps minus_from_mult_simps @ add_ac @ mult_ac))
   333   val numeral_simp_ss = HOL_ss addsimps add_0s @ bin_simps
   329     end
   334   fun numeral_simp_tac ss = ALLGOALS (simp_tac (Simplifier.inherit_context ss numeral_simp_ss))
   330   fun numeral_simp_tac ss =
       
   331     ALLGOALS (simp_tac (Simplifier.inherit_context ss HOL_ss addsimps add_0s @ bin_simps))
       
   332   val simplify_meta_eq = simplify_meta_eq (add_0s @ mult_1s)
   335   val simplify_meta_eq = simplify_meta_eq (add_0s @ mult_1s)
   333   end;
   336   end;
   334 
   337 
   335 
   338 
   336 structure EqCancelNumerals = CancelNumeralsFun
   339 structure EqCancelNumerals = CancelNumeralsFun
   396   val mk_coeff          = mk_coeff
   399   val mk_coeff          = mk_coeff
   397   val dest_coeff        = dest_coeff 1
   400   val dest_coeff        = dest_coeff 1
   398   val left_distrib      = combine_common_factor RS trans
   401   val left_distrib      = combine_common_factor RS trans
   399   val prove_conv        = Bin_Simprocs.prove_conv_nohyps
   402   val prove_conv        = Bin_Simprocs.prove_conv_nohyps
   400   val trans_tac         = fn _ => trans_tac
   403   val trans_tac         = fn _ => trans_tac
       
   404 
       
   405   val norm_ss1 = num_ss addsimps numeral_syms @ add_0s @ mult_1s @
       
   406     diff_simps @ minus_simps @ add_ac
       
   407   val norm_ss2 = num_ss addsimps non_add_bin_simps @ mult_minus_simps
       
   408   val norm_ss3 = num_ss addsimps minus_from_mult_simps @ add_ac @ mult_ac
   401   fun norm_tac ss =
   409   fun norm_tac ss =
   402     let val num_ss' = Simplifier.inherit_context ss num_ss in
   410     ALLGOALS (simp_tac (Simplifier.inherit_context ss norm_ss1))
   403       ALLGOALS (simp_tac (num_ss' addsimps numeral_syms @ add_0s @ mult_1s @
   411     THEN ALLGOALS (simp_tac (Simplifier.inherit_context ss norm_ss2))
   404                                           diff_simps @ minus_simps @ add_ac))
   412     THEN ALLGOALS (simp_tac (Simplifier.inherit_context ss norm_ss3))
   405       THEN ALLGOALS (simp_tac (num_ss' addsimps non_add_bin_simps @ mult_minus_simps))
   413 
   406       THEN ALLGOALS (simp_tac (num_ss' addsimps minus_from_mult_simps @ add_ac @ mult_ac))
   414   val numeral_simp_ss = HOL_ss addsimps add_0s @ bin_simps
   407     end
   415   fun numeral_simp_tac ss = ALLGOALS (simp_tac (Simplifier.inherit_context ss numeral_simp_ss))
   408   fun numeral_simp_tac ss =
       
   409     ALLGOALS (simp_tac (Simplifier.inherit_context ss HOL_ss addsimps add_0s @ bin_simps))
       
   410   val simplify_meta_eq = simplify_meta_eq (add_0s @ mult_1s)
   416   val simplify_meta_eq = simplify_meta_eq (add_0s @ mult_1s)
   411   end;
   417   end;
   412 
   418 
   413 structure CombineNumerals = CombineNumeralsFun(CombineNumeralsData);
   419 structure CombineNumerals = CombineNumeralsFun(CombineNumeralsData);
   414 
   420