IOA/example/Multiset.thy
author clasohm
Wed, 02 Nov 1994 11:50:09 +0100
changeset 156 fd1be45b64bf
child 168 44ff2275d44f
permissions -rw-r--r--
added IOA to isabelle/HOL
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
156
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
     1
Multiset = Arith + "Lemmas" +
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
     2
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
     3
types
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
     4
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
     5
  'a multiset
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
     6
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
     7
arities
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
     8
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
     9
  multiset :: (term) term
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    10
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    11
consts
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    12
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    13
  "{|}"  :: "'a multiset"                        ("{|}")
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    14
  addm   :: "['a multiset, 'a] => 'a multiset"
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    15
  delm   :: "['a multiset, 'a] => 'a multiset"
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    16
  countm :: "['a multiset, 'a => bool] => nat"
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    17
  count  :: "['a multiset, 'a] => nat"
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    18
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    19
rules
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    20
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    21
delm_empty_def
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    22
  "delm({|},x) = {|}" 
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    23
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    24
delm_nonempty_def
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    25
  "delm(addm(M,x),y) == if(x=y,M,addm(delm(M,y),x))"
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    26
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    27
countm_empty_def
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    28
   "countm({|},P) == 0"
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    29
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    30
countm_nonempty_def
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    31
   "countm(addm(M,x),P) == countm(M,P) + if(P(x), Suc(0), 0)"
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    32
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    33
count_def
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    34
   "count(M,x) == countm(M, %y.y = x)"
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    35
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    36
induction
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    37
   "[| P({|}); !!M x. P(M) ==> P(addm(M,x)) |] ==> P(M)"
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    38
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    39
end