src/HOL/Integ/IntDiv_setup.ML
author wenzelm
Sun, 09 Apr 2006 18:51:13 +0200
changeset 19380 b808efaa5828
parent 17609 5156b731ebc8
child 20044 92cc2f4c7335
permissions -rw-r--r--
tuned syntax/abbreviations;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13517
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
     1
(*  Title:      HOL/Integ/IntDiv_setup.ML
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
     2
    ID:         $Id$
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
     3
    Author:     Tobias Nipkow, Informatik, TU Muenchen
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
     4
    Copyright   2002  TU Muenchen
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
     5
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
     6
Simproc for cancelling div and mod
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
     7
*)
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
     8
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
     9
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
    10
structure CancelDivModData =
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
    11
struct
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
    12
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
    13
val div_name = "Divides.op div";
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
    14
val mod_name = "Divides.op mod";
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
    15
val mk_binop = HOLogic.mk_binop;
14387
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 13517
diff changeset
    16
val mk_sum = Int_Numeral_Simprocs.mk_sum HOLogic.intT;
13517
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
    17
val dest_sum = Int_Numeral_Simprocs.dest_sum;
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
    18
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
    19
(*logic*)
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
    20
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
    21
val div_mod_eqs =
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
    22
  map mk_meta_eq [thm"zdiv_zmod_equality",thm"zdiv_zmod_equality2"]
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
    23
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
    24
val trans = trans
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
    25
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
    26
val prove_eq_sums =
14479
0eca4aabf371 streamlined treatment of quotients for the integers
paulson
parents: 14387
diff changeset
    27
  let val simps = diff_int_def :: Int_Numeral_Simprocs.add_0s @ zadd_ac
17609
5156b731ebc8 Provers/cancel_sums.ML: Simplifier.inherit_bounds;
wenzelm
parents: 14479
diff changeset
    28
  in NatArithUtils.prove_conv all_tac (NatArithUtils.simp_all_tac simps) end;
13517
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
    29
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
    30
end;
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
    31
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
    32
structure CancelDivMod = CancelDivModFun(CancelDivModData);
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
    33
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
    34
val cancel_zdiv_zmod_proc = NatArithUtils.prep_simproc
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
    35
      ("cancel_zdiv_zmod", ["(m::int) + n"], CancelDivMod.proc);
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
    36
42efec18f5b2 Added div+mod cancelling simproc
nipkow
parents:
diff changeset
    37
Addsimprocs[cancel_zdiv_zmod_proc];