IOA/example/Multiset.thy
author clasohm
Tue, 24 Oct 1995 14:59:17 +0100
changeset 251 f04b33ce250f
parent 168 44ff2275d44f
permissions -rw-r--r--
added calls of init_html and make_chart

(*  Title:      HOL/IOA/example/Multiset.thy
    ID:         $Id$
    Author:     Tobias Nipkow & Konrad Slind
    Copyright   1994  TU Muenchen

Axiomatic multisets.
Should be done as a subtype and moved to a global place.
*)

Multiset = Arith + "Lemmas" +

types

  'a multiset

arities

  multiset :: (term) term

consts

  "{|}"  :: "'a multiset"                        ("{|}")
  addm   :: "['a multiset, 'a] => 'a multiset"
  delm   :: "['a multiset, 'a] => 'a multiset"
  countm :: "['a multiset, 'a => bool] => nat"
  count  :: "['a multiset, 'a] => nat"

rules

delm_empty_def
  "delm({|},x) = {|}" 

delm_nonempty_def
  "delm(addm(M,x),y) == if(x=y,M,addm(delm(M,y),x))"

countm_empty_def
   "countm({|},P) == 0"

countm_nonempty_def
   "countm(addm(M,x),P) == countm(M,P) + if(P(x), Suc(0), 0)"

count_def
   "count(M,x) == countm(M, %y.y = x)"

induction
   "[| P({|}); !!M x. P(M) ==> P(addm(M,x)) |] ==> P(M)"

end