Up to index of Isabelle/Bali5
theory Value = Type(* Title: isabelle/Bali/Value.thy
ID: $Id: Value.thy,v 1.3 2000/07/14 14:48:59 oheimb Exp $
Author: David von Oheimb
Copyright 1997 Technische Universitaet Muenchen
Java values
*)
Value = Type +
types loc (* locations, i.e. abstract references on objects *)
arities loc :: term
datatype val_ (** name not 'val' because of nasty clash with ML token 'val' **)
= Unit (* dummy result value of void methods *)
| Bool bool (* Boolean value *)
| Intg int (* integer value *)
| Null (* null reference *)
| Addr loc (* addresses, i.e. locations of objects *)
types val = val_
translations "val" <= (type) "val_"
"val" <= (type) "Term.val_"
"loc" <= (type) "Term.loc"
constdefs
the_Bool :: "val \<Rightarrow> bool" "the_Bool v \<equiv> \<epsilon>b. v = Bool b"
the_Intg :: "val \<Rightarrow> int" "the_Intg v \<equiv> \<epsilon>i. v = Intg i"
the_Addr :: "val \<Rightarrow> loc" "the_Addr v \<equiv> \<epsilon>a. v = Addr a"
types dyn_ty = "loc \<Rightarrow> ty option"
consts
typeof :: "dyn_ty \<Rightarrow> val \<Rightarrow> ty option"
defpval :: "prim_ty \<Rightarrow> val" (* default value for primitive types *)
default_val :: " ty \<Rightarrow> val" (* default value for all types *)
primrec "typeof dt Unit = Some (PrimT Void)"
"typeof dt (Bool b) = Some (PrimT Boolean)"
"typeof dt (Intg i) = Some (PrimT Integer)"
"typeof dt Null = Some NT"
"typeof dt (Addr a) = dt a"
primrec "defpval Void = Unit"
"defpval Boolean = Bool False"
"defpval Integer = Intg #0"
primrec "default_val (PrimT pt) = defpval pt"
"default_val (RefT r ) = Null"
end
theorem the_Addr_Addr:
the_Addr (Addr a) = a
theorem the_Intg_Intg:
the_Intg (Intg i) = i