src/HOL/Map.thy
changeset 3981 b4f93a8da835
child 5183 89f162de39cf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Map.thy	Fri Oct 24 10:31:31 1997 +0200
@@ -0,0 +1,44 @@
+(*  Title:      HOL/Map.thy
+    ID:         $Id$
+    Author:     Tobias Nipkow, based on a theory by David von Oheimb
+    Copyright   1997 TU Muenchen
+
+The datatype of `maps' (written ~=>); strongly resembles maps in VDM.
+*)
+
+Map = List + Option +
+
+types ('a,'b) "~=>" = 'a => 'b option (infixr 0)
+
+consts
+empty   :: "'a ~=> 'b"
+update  :: "('a ~=> 'b) => 'a => 'b => ('a ~=> 'b)"
+           ("_/[_/|->/_]" [900,0,0] 900)
+override:: "('a ~=> 'b) => ('a ~=> 'b) => ('a ~=> 'b)" (infixl "++" 100)
+dom     :: "('a ~=> 'b) => 'a set"
+ran     :: "('a ~=> 'b) => 'b set"
+map_of  :: "('a * 'b)list => 'a ~=> 'b"
+
+syntax (symbols)
+  "~=>"     :: [type, type] => type
+               (infixr "\\<leadsto>" 0)
+  update    :: "('a ~=> 'b) => 'a => 'b => ('a ~=> 'b)"
+               ("_/[_/\\<mapsto>/_]" [900,0,0] 900)
+  override  :: "('a ~=> 'b) => ('a ~=> 'b) => ('a ~=> 'b)"
+               (infixl "\\<oplus>" 100)
+
+defs
+empty_def "empty == %x. None"
+
+update_def "m[a|->b] == %x. if x=a then Some b else m x"
+
+override_def "m1++m2 == %x. case m2 x of None => m1 x | Some y => Some y"
+
+dom_def "dom(m) == {a. m a ~= None}"
+ran_def "ran(m) == {b. ? a. m a = Some b}"
+
+primrec map_of list
+"map_of [] = empty"
+"map_of (p#ps) = (map_of ps)[fst p |-> snd p]"
+
+end