src/HOL/IOA/NTP/Multiset.thy
author lcp
Tue, 25 Apr 1995 11:14:03 +0200
changeset 1072 0140ff702b23
parent 1051 4fcd0638e61d
child 1328 9a449a91425d
permissions -rw-r--r--
updated version
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1051
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
     1
(*  Title:      HOL/IOA/NTP/Multiset.thy
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
     2
    ID:         $Id$
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
     3
    Author:     Tobias Nipkow & Konrad Slind
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
     4
    Copyright   1994  TU Muenchen
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
     5
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
     6
Axiomatic multisets.
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
     7
Should be done as a subtype and moved to a global place.
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
     8
*)
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
     9
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    10
Multiset = Arith + "Lemmas" +
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    11
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    12
types
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    13
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    14
  'a multiset
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    15
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    16
arities
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    17
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    18
  multiset :: (term) term
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    19
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    20
consts
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    21
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    22
  "{|}"  :: "'a multiset"                        ("{|}")
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    23
  addm   :: "['a multiset, 'a] => 'a multiset"
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    24
  delm   :: "['a multiset, 'a] => 'a multiset"
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    25
  countm :: "['a multiset, 'a => bool] => nat"
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    26
  count  :: "['a multiset, 'a] => nat"
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    27
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    28
rules
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    29
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    30
delm_empty_def
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    31
  "delm {|} x = {|}" 
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    32
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    33
delm_nonempty_def
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    34
  "delm (addm M x) y == (if x=y then M else addm (delm M y) x)"
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    35
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    36
countm_empty_def
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    37
   "countm {|} P == 0"
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    38
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    39
countm_nonempty_def
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    40
   "countm (addm M x) P == countm M P + (if P x then Suc 0 else 0)"
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    41
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    42
count_def
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    43
   "count M x == countm M (%y.y = x)"
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    44
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    45
induction
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    46
   "[| P({|}); !!M x. P(M) ==> P(addm M x) |] ==> P(M)"
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    47
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    48
end