src/HOL/Library/multiset_simprocs.ML
author wenzelm
Mon, 05 Sep 2016 23:11:00 +0200
changeset 63806 c54a53ef1873
parent 63793 e68a0b651eb5
child 65029 00731700e54f
permissions -rw-r--r--
clarified modules;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
63793
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
     1
(* Author: Mathias Fleury, MPII
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
     2
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
     3
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
     4
Simprocs for multisets, based on Larry Paulson's simprocs for
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
     5
natural numbers and numerals.
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
     6
*)
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
     7
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
     8
signature MULTISET_SIMPROCS =
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
     9
sig
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    10
  val eq_cancel_msets: Proof.context -> cterm -> thm option
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    11
  val subset_cancel_msets: Proof.context -> cterm -> thm option
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    12
  val subseteq_cancel_msets: Proof.context -> cterm -> thm option
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    13
  val diff_cancel_msets: Proof.context -> cterm -> thm option
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    14
end;
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    15
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    16
structure Multiset_Simprocs : MULTISET_SIMPROCS =
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    17
struct
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    18
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    19
structure EqCancelMultiset = CancelNumeralsFun
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    20
 (open Multiset_Cancel_Common
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    21
  val mk_bal   = HOLogic.mk_eq
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    22
  val dest_bal = HOLogic.dest_bin @{const_name HOL.eq} dummyT
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    23
  val bal_add1 = @{thm mset_eq_add_iff1} RS trans
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    24
  val bal_add2 = @{thm mset_eq_add_iff2} RS trans
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    25
);
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    26
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    27
structure SubsetCancelMultiset = CancelNumeralsFun
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    28
 (open Multiset_Cancel_Common
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    29
  val mk_bal   = HOLogic.mk_binrel @{const_name subset_mset}
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    30
  val dest_bal = HOLogic.dest_bin @{const_name subset_mset} dummyT
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    31
  val bal_add1 = @{thm mset_subset_add_iff1} RS trans
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    32
  val bal_add2 = @{thm mset_subset_add_iff2} RS trans
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    33
);
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    34
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    35
structure SubseteqCancelMultiset = CancelNumeralsFun
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    36
 (open Multiset_Cancel_Common
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    37
  val mk_bal   = HOLogic.mk_binrel @{const_name subseteq_mset}
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    38
  val dest_bal = HOLogic.dest_bin @{const_name subseteq_mset} dummyT
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    39
  val bal_add1 = @{thm mset_subseteq_add_iff1} RS trans
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    40
  val bal_add2 = @{thm mset_subseteq_add_iff2} RS trans
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    41
);
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    42
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    43
structure DiffCancelMultiset = CancelNumeralsFun
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    44
 (open Multiset_Cancel_Common
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    45
  val mk_bal   = HOLogic.mk_binop @{const_name Groups.minus}
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    46
  val dest_bal = HOLogic.dest_bin @{const_name Groups.minus} dummyT
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    47
  val bal_add1 = @{thm mset_diff_add_eq1} RS trans
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    48
  val bal_add2 = @{thm mset_diff_add_eq2} RS trans
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    49
);
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    50
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    51
val eq_cancel_msets = EqCancelMultiset.proc;
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    52
val subset_cancel_msets = SubsetCancelMultiset.proc;
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    53
val subseteq_cancel_msets = SubseteqCancelMultiset.proc;
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    54
val diff_cancel_msets = DiffCancelMultiset.proc;
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    55
e68a0b651eb5 add_mset constructor in multisets
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    56
end