IOA/example/Multiset.thy
author nipkow
Wed, 09 Nov 1994 19:51:09 +0100
changeset 168 44ff2275d44f
parent 156 fd1be45b64bf
permissions -rw-r--r--
Added headers and made various small mods.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
168
44ff2275d44f Added headers and made various small mods.
nipkow
parents: 156
diff changeset
     1
(*  Title:      HOL/IOA/example/Multiset.thy
44ff2275d44f Added headers and made various small mods.
nipkow
parents: 156
diff changeset
     2
    ID:         $Id$
44ff2275d44f Added headers and made various small mods.
nipkow
parents: 156
diff changeset
     3
    Author:     Tobias Nipkow & Konrad Slind
44ff2275d44f Added headers and made various small mods.
nipkow
parents: 156
diff changeset
     4
    Copyright   1994  TU Muenchen
44ff2275d44f Added headers and made various small mods.
nipkow
parents: 156
diff changeset
     5
44ff2275d44f Added headers and made various small mods.
nipkow
parents: 156
diff changeset
     6
Axiomatic multisets.
44ff2275d44f Added headers and made various small mods.
nipkow
parents: 156
diff changeset
     7
Should be done as a subtype and moved to a global place.
44ff2275d44f Added headers and made various small mods.
nipkow
parents: 156
diff changeset
     8
*)
44ff2275d44f Added headers and made various small mods.
nipkow
parents: 156
diff changeset
     9
156
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    10
Multiset = Arith + "Lemmas" +
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    11
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    12
types
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    13
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    14
  'a multiset
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    15
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    16
arities
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    17
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    18
  multiset :: (term) term
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    19
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    20
consts
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    21
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    22
  "{|}"  :: "'a multiset"                        ("{|}")
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    23
  addm   :: "['a multiset, 'a] => 'a multiset"
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    24
  delm   :: "['a multiset, 'a] => 'a multiset"
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    25
  countm :: "['a multiset, 'a => bool] => nat"
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    26
  count  :: "['a multiset, 'a] => nat"
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    27
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    28
rules
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    29
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    30
delm_empty_def
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    31
  "delm({|},x) = {|}" 
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    32
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    33
delm_nonempty_def
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    34
  "delm(addm(M,x),y) == if(x=y,M,addm(delm(M,y),x))"
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    35
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    36
countm_empty_def
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    37
   "countm({|},P) == 0"
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    38
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    39
countm_nonempty_def
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    40
   "countm(addm(M,x),P) == countm(M,P) + if(P(x), Suc(0), 0)"
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    41
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    42
count_def
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    43
   "count(M,x) == countm(M, %y.y = x)"
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    44
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    45
induction
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    46
   "[| P({|}); !!M x. P(M) ==> P(addm(M,x)) |] ==> P(M)"
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    47
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    48
end