62 add_nat_number_of, nat_number_of_add_left, |
62 add_nat_number_of, nat_number_of_add_left, |
63 diff_nat_number_of, le_number_of_eq_not_less, |
63 diff_nat_number_of, le_number_of_eq_not_less, |
64 mult_nat_number_of, nat_number_of_mult_left, |
64 mult_nat_number_of, nat_number_of_mult_left, |
65 less_nat_number_of, |
65 less_nat_number_of, |
66 Let_number_of, nat_number_of] @ |
66 Let_number_of, nat_number_of] @ |
67 bin_arith_simps @ bin_rel_simps; |
67 arith_simps @ rel_simps; |
68 |
68 |
69 fun prep_simproc (name, pats, proc) = |
69 fun prep_simproc (name, pats, proc) = |
70 Simplifier.simproc (Theory.sign_of (the_context ())) name pats proc; |
70 Simplifier.simproc (Theory.sign_of (the_context ())) name pats proc; |
71 |
71 |
72 |
72 |
180 end; |
180 end; |
181 |
181 |
182 |
182 |
183 structure EqCancelNumerals = CancelNumeralsFun |
183 structure EqCancelNumerals = CancelNumeralsFun |
184 (open CancelNumeralsCommon |
184 (open CancelNumeralsCommon |
185 val prove_conv = Bin_Simprocs.prove_conv |
185 val prove_conv = Int_Numeral_Base_Simprocs.prove_conv |
186 val mk_bal = HOLogic.mk_eq |
186 val mk_bal = HOLogic.mk_eq |
187 val dest_bal = HOLogic.dest_bin "op =" HOLogic.natT |
187 val dest_bal = HOLogic.dest_bin "op =" HOLogic.natT |
188 val bal_add1 = nat_eq_add_iff1 RS trans |
188 val bal_add1 = nat_eq_add_iff1 RS trans |
189 val bal_add2 = nat_eq_add_iff2 RS trans |
189 val bal_add2 = nat_eq_add_iff2 RS trans |
190 ); |
190 ); |
191 |
191 |
192 structure LessCancelNumerals = CancelNumeralsFun |
192 structure LessCancelNumerals = CancelNumeralsFun |
193 (open CancelNumeralsCommon |
193 (open CancelNumeralsCommon |
194 val prove_conv = Bin_Simprocs.prove_conv |
194 val prove_conv = Int_Numeral_Base_Simprocs.prove_conv |
195 val mk_bal = HOLogic.mk_binrel "Orderings.less" |
195 val mk_bal = HOLogic.mk_binrel "Orderings.less" |
196 val dest_bal = HOLogic.dest_bin "Orderings.less" HOLogic.natT |
196 val dest_bal = HOLogic.dest_bin "Orderings.less" HOLogic.natT |
197 val bal_add1 = nat_less_add_iff1 RS trans |
197 val bal_add1 = nat_less_add_iff1 RS trans |
198 val bal_add2 = nat_less_add_iff2 RS trans |
198 val bal_add2 = nat_less_add_iff2 RS trans |
199 ); |
199 ); |
200 |
200 |
201 structure LeCancelNumerals = CancelNumeralsFun |
201 structure LeCancelNumerals = CancelNumeralsFun |
202 (open CancelNumeralsCommon |
202 (open CancelNumeralsCommon |
203 val prove_conv = Bin_Simprocs.prove_conv |
203 val prove_conv = Int_Numeral_Base_Simprocs.prove_conv |
204 val mk_bal = HOLogic.mk_binrel "Orderings.less_eq" |
204 val mk_bal = HOLogic.mk_binrel "Orderings.less_eq" |
205 val dest_bal = HOLogic.dest_bin "Orderings.less_eq" HOLogic.natT |
205 val dest_bal = HOLogic.dest_bin "Orderings.less_eq" HOLogic.natT |
206 val bal_add1 = nat_le_add_iff1 RS trans |
206 val bal_add1 = nat_le_add_iff1 RS trans |
207 val bal_add2 = nat_le_add_iff2 RS trans |
207 val bal_add2 = nat_le_add_iff2 RS trans |
208 ); |
208 ); |
209 |
209 |
210 structure DiffCancelNumerals = CancelNumeralsFun |
210 structure DiffCancelNumerals = CancelNumeralsFun |
211 (open CancelNumeralsCommon |
211 (open CancelNumeralsCommon |
212 val prove_conv = Bin_Simprocs.prove_conv |
212 val prove_conv = Int_Numeral_Base_Simprocs.prove_conv |
213 val mk_bal = HOLogic.mk_binop "HOL.minus" |
213 val mk_bal = HOLogic.mk_binop "HOL.minus" |
214 val dest_bal = HOLogic.dest_bin "HOL.minus" HOLogic.natT |
214 val dest_bal = HOLogic.dest_bin "HOL.minus" HOLogic.natT |
215 val bal_add1 = nat_diff_add_eq1 RS trans |
215 val bal_add1 = nat_diff_add_eq1 RS trans |
216 val bal_add2 = nat_diff_add_eq2 RS trans |
216 val bal_add2 = nat_diff_add_eq2 RS trans |
217 ); |
217 ); |
249 val mk_sum = (fn T:typ => long_mk_sum) (*to work for 2*x + 3*x *) |
249 val mk_sum = (fn T:typ => long_mk_sum) (*to work for 2*x + 3*x *) |
250 val dest_sum = dest_Sucs_sum false |
250 val dest_sum = dest_Sucs_sum false |
251 val mk_coeff = mk_coeff |
251 val mk_coeff = mk_coeff |
252 val dest_coeff = dest_coeff |
252 val dest_coeff = dest_coeff |
253 val left_distrib = left_add_mult_distrib RS trans |
253 val left_distrib = left_add_mult_distrib RS trans |
254 val prove_conv = Bin_Simprocs.prove_conv_nohyps |
254 val prove_conv = Int_Numeral_Base_Simprocs.prove_conv_nohyps |
255 val trans_tac = fn _ => trans_tac |
255 val trans_tac = fn _ => trans_tac |
256 |
256 |
257 val norm_ss1 = num_ss addsimps numeral_syms @ add_0s @ mult_1s @ [Suc_eq_add_numeral_1] @ add_ac |
257 val norm_ss1 = num_ss addsimps numeral_syms @ add_0s @ mult_1s @ [Suc_eq_add_numeral_1] @ add_ac |
258 val norm_ss2 = num_ss addsimps bin_simps @ add_ac @ mult_ac |
258 val norm_ss2 = num_ss addsimps bin_simps @ add_ac @ mult_ac |
259 fun norm_tac ss = |
259 fun norm_tac ss = |
291 val simplify_meta_eq = simplify_meta_eq |
291 val simplify_meta_eq = simplify_meta_eq |
292 end |
292 end |
293 |
293 |
294 structure DivCancelNumeralFactor = CancelNumeralFactorFun |
294 structure DivCancelNumeralFactor = CancelNumeralFactorFun |
295 (open CancelNumeralFactorCommon |
295 (open CancelNumeralFactorCommon |
296 val prove_conv = Bin_Simprocs.prove_conv |
296 val prove_conv = Int_Numeral_Base_Simprocs.prove_conv |
297 val mk_bal = HOLogic.mk_binop "Divides.op div" |
297 val mk_bal = HOLogic.mk_binop "Divides.op div" |
298 val dest_bal = HOLogic.dest_bin "Divides.op div" HOLogic.natT |
298 val dest_bal = HOLogic.dest_bin "Divides.op div" HOLogic.natT |
299 val cancel = nat_mult_div_cancel1 RS trans |
299 val cancel = nat_mult_div_cancel1 RS trans |
300 val neg_exchanges = false |
300 val neg_exchanges = false |
301 ) |
301 ) |
302 |
302 |
303 structure EqCancelNumeralFactor = CancelNumeralFactorFun |
303 structure EqCancelNumeralFactor = CancelNumeralFactorFun |
304 (open CancelNumeralFactorCommon |
304 (open CancelNumeralFactorCommon |
305 val prove_conv = Bin_Simprocs.prove_conv |
305 val prove_conv = Int_Numeral_Base_Simprocs.prove_conv |
306 val mk_bal = HOLogic.mk_eq |
306 val mk_bal = HOLogic.mk_eq |
307 val dest_bal = HOLogic.dest_bin "op =" HOLogic.natT |
307 val dest_bal = HOLogic.dest_bin "op =" HOLogic.natT |
308 val cancel = nat_mult_eq_cancel1 RS trans |
308 val cancel = nat_mult_eq_cancel1 RS trans |
309 val neg_exchanges = false |
309 val neg_exchanges = false |
310 ) |
310 ) |
311 |
311 |
312 structure LessCancelNumeralFactor = CancelNumeralFactorFun |
312 structure LessCancelNumeralFactor = CancelNumeralFactorFun |
313 (open CancelNumeralFactorCommon |
313 (open CancelNumeralFactorCommon |
314 val prove_conv = Bin_Simprocs.prove_conv |
314 val prove_conv = Int_Numeral_Base_Simprocs.prove_conv |
315 val mk_bal = HOLogic.mk_binrel "Orderings.less" |
315 val mk_bal = HOLogic.mk_binrel "Orderings.less" |
316 val dest_bal = HOLogic.dest_bin "Orderings.less" HOLogic.natT |
316 val dest_bal = HOLogic.dest_bin "Orderings.less" HOLogic.natT |
317 val cancel = nat_mult_less_cancel1 RS trans |
317 val cancel = nat_mult_less_cancel1 RS trans |
318 val neg_exchanges = true |
318 val neg_exchanges = true |
319 ) |
319 ) |
320 |
320 |
321 structure LeCancelNumeralFactor = CancelNumeralFactorFun |
321 structure LeCancelNumeralFactor = CancelNumeralFactorFun |
322 (open CancelNumeralFactorCommon |
322 (open CancelNumeralFactorCommon |
323 val prove_conv = Bin_Simprocs.prove_conv |
323 val prove_conv = Int_Numeral_Base_Simprocs.prove_conv |
324 val mk_bal = HOLogic.mk_binrel "Orderings.less_eq" |
324 val mk_bal = HOLogic.mk_binrel "Orderings.less_eq" |
325 val dest_bal = HOLogic.dest_bin "Orderings.less_eq" HOLogic.natT |
325 val dest_bal = HOLogic.dest_bin "Orderings.less_eq" HOLogic.natT |
326 val cancel = nat_mult_le_cancel1 RS trans |
326 val cancel = nat_mult_le_cancel1 RS trans |
327 val neg_exchanges = true |
327 val neg_exchanges = true |
328 ) |
328 ) |
377 fun norm_tac ss = ALLGOALS (simp_tac (Simplifier.inherit_context ss norm_ss)) |
377 fun norm_tac ss = ALLGOALS (simp_tac (Simplifier.inherit_context ss norm_ss)) |
378 end; |
378 end; |
379 |
379 |
380 structure EqCancelFactor = ExtractCommonTermFun |
380 structure EqCancelFactor = ExtractCommonTermFun |
381 (open CancelFactorCommon |
381 (open CancelFactorCommon |
382 val prove_conv = Bin_Simprocs.prove_conv |
382 val prove_conv = Int_Numeral_Base_Simprocs.prove_conv |
383 val mk_bal = HOLogic.mk_eq |
383 val mk_bal = HOLogic.mk_eq |
384 val dest_bal = HOLogic.dest_bin "op =" HOLogic.natT |
384 val dest_bal = HOLogic.dest_bin "op =" HOLogic.natT |
385 val simplify_meta_eq = cancel_simplify_meta_eq nat_mult_eq_cancel_disj |
385 val simplify_meta_eq = cancel_simplify_meta_eq nat_mult_eq_cancel_disj |
386 ); |
386 ); |
387 |
387 |
388 structure LessCancelFactor = ExtractCommonTermFun |
388 structure LessCancelFactor = ExtractCommonTermFun |
389 (open CancelFactorCommon |
389 (open CancelFactorCommon |
390 val prove_conv = Bin_Simprocs.prove_conv |
390 val prove_conv = Int_Numeral_Base_Simprocs.prove_conv |
391 val mk_bal = HOLogic.mk_binrel "Orderings.less" |
391 val mk_bal = HOLogic.mk_binrel "Orderings.less" |
392 val dest_bal = HOLogic.dest_bin "Orderings.less" HOLogic.natT |
392 val dest_bal = HOLogic.dest_bin "Orderings.less" HOLogic.natT |
393 val simplify_meta_eq = cancel_simplify_meta_eq nat_mult_less_cancel_disj |
393 val simplify_meta_eq = cancel_simplify_meta_eq nat_mult_less_cancel_disj |
394 ); |
394 ); |
395 |
395 |
396 structure LeCancelFactor = ExtractCommonTermFun |
396 structure LeCancelFactor = ExtractCommonTermFun |
397 (open CancelFactorCommon |
397 (open CancelFactorCommon |
398 val prove_conv = Bin_Simprocs.prove_conv |
398 val prove_conv = Int_Numeral_Base_Simprocs.prove_conv |
399 val mk_bal = HOLogic.mk_binrel "Orderings.less_eq" |
399 val mk_bal = HOLogic.mk_binrel "Orderings.less_eq" |
400 val dest_bal = HOLogic.dest_bin "Orderings.less_eq" HOLogic.natT |
400 val dest_bal = HOLogic.dest_bin "Orderings.less_eq" HOLogic.natT |
401 val simplify_meta_eq = cancel_simplify_meta_eq nat_mult_le_cancel_disj |
401 val simplify_meta_eq = cancel_simplify_meta_eq nat_mult_le_cancel_disj |
402 ); |
402 ); |
403 |
403 |
404 structure DivideCancelFactor = ExtractCommonTermFun |
404 structure DivideCancelFactor = ExtractCommonTermFun |
405 (open CancelFactorCommon |
405 (open CancelFactorCommon |
406 val prove_conv = Bin_Simprocs.prove_conv |
406 val prove_conv = Int_Numeral_Base_Simprocs.prove_conv |
407 val mk_bal = HOLogic.mk_binop "Divides.op div" |
407 val mk_bal = HOLogic.mk_binop "Divides.op div" |
408 val dest_bal = HOLogic.dest_bin "Divides.op div" HOLogic.natT |
408 val dest_bal = HOLogic.dest_bin "Divides.op div" HOLogic.natT |
409 val simplify_meta_eq = cancel_simplify_meta_eq nat_mult_div_cancel_disj |
409 val simplify_meta_eq = cancel_simplify_meta_eq nat_mult_div_cancel_disj |
410 ); |
410 ); |
411 |
411 |