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 |