13517
|
1 |
(* Title: HOL/Integ/IntDiv_setup.ML
|
|
2 |
ID: $Id$
|
|
3 |
Author: Tobias Nipkow, Informatik, TU Muenchen
|
|
4 |
Copyright 2002 TU Muenchen
|
|
5 |
|
|
6 |
Simproc for cancelling div and mod
|
|
7 |
*)
|
|
8 |
|
|
9 |
|
|
10 |
structure CancelDivModData =
|
|
11 |
struct
|
|
12 |
|
|
13 |
val div_name = "Divides.op div";
|
|
14 |
val mod_name = "Divides.op mod";
|
|
15 |
val mk_binop = HOLogic.mk_binop;
|
|
16 |
val mk_sum = Int_Numeral_Simprocs.mk_sum;
|
|
17 |
val dest_sum = Int_Numeral_Simprocs.dest_sum;
|
|
18 |
|
|
19 |
(*logic*)
|
|
20 |
|
|
21 |
val div_mod_eqs =
|
|
22 |
map mk_meta_eq [thm"zdiv_zmod_equality",thm"zdiv_zmod_equality2"]
|
|
23 |
|
|
24 |
val trans = trans
|
|
25 |
|
|
26 |
val prove_eq_sums =
|
|
27 |
let val simps = zdiff_def :: Int_Numeral_Simprocs.add_0s @ zadd_ac
|
|
28 |
in NatArithUtils.prove_conv all_tac (NatArithUtils.simp_all simps) end
|
|
29 |
|
|
30 |
end;
|
|
31 |
|
|
32 |
structure CancelDivMod = CancelDivModFun(CancelDivModData);
|
|
33 |
|
|
34 |
val cancel_zdiv_zmod_proc = NatArithUtils.prep_simproc
|
|
35 |
("cancel_zdiv_zmod", ["(m::int) + n"], CancelDivMod.proc);
|
|
36 |
|
|
37 |
Addsimprocs[cancel_zdiv_zmod_proc];
|