File ‹multiset_simprocs.ML›
signature MULTISET_SIMPROCS =
sig
  val subset_cancel_msets: Simplifier.proc
  val subseteq_cancel_msets: Simplifier.proc
end;
structure Multiset_Simprocs : MULTISET_SIMPROCS =
struct
structure Subset_Cancel_Multiset = Cancel_Fun
 (open Cancel_Data
  val mk_bal   = HOLogic.mk_binrel \<^const_name>‹subset_mset›
  val dest_bal = HOLogic.dest_bin \<^const_name>‹subset_mset› dummyT
  val bal_add1 = @{thm mset_subset_add_iff1[unfolded repeat_mset_iterate_add]} RS trans
  val bal_add2 = @{thm mset_subset_add_iff2[unfolded repeat_mset_iterate_add]} RS trans
);
structure Subseteq_Cancel_Multiset = Cancel_Fun
 (open Cancel_Data
  val mk_bal   = HOLogic.mk_binrel \<^const_name>‹subseteq_mset›
  val dest_bal = HOLogic.dest_bin \<^const_name>‹subseteq_mset› dummyT
  val bal_add1 = @{thm mset_subseteq_add_iff1[unfolded repeat_mset_iterate_add]} RS trans
  val bal_add2 = @{thm mset_subseteq_add_iff2[unfolded repeat_mset_iterate_add]} RS trans
);
val subset_cancel_msets = Subset_Cancel_Multiset.proc;
val subseteq_cancel_msets = Subseteq_Cancel_Multiset.proc;
end