(* Title: Jinja/Common/Type.thy
ID: $Id: Type.html 1910 2004-05-19 04:46:04Z kleing $
Author: David von Oheimb, Tobias Nipkow
Copyright 1999 Technische Universitaet Muenchen
*)
header {* \isaheader{Jinja types} *}
theory Type = Aux:
types
cname = string -- "class names"
mname = string -- "method name"
vname = string -- "names for local/field variables"
constdefs
Object :: cname
"Object ≡ ''Object''"
this :: vname
"this ≡ ''this''"
-- "types"
datatype ty
= Void -- "type of statements"
| Boolean
| Integer
| NT -- "null type"
| Class cname -- "class type"
constdefs
is_refT :: "ty => bool"
"is_refT T ≡ T = NT ∨ (∃C. T = Class C)"
lemma [iff]: "is_refT NT"
(*<*)by(simp add:is_refT_def)(*>*)
lemma [iff]: "is_refT(Class C)"
(*<*)by(simp add:is_refT_def)(*>*)
lemma refTE:
"[|is_refT T; T = NT ==> P; !!C. T = Class C ==> P |] ==> P"
(*<*)by (auto simp add: is_refT_def)(*>*)
lemma not_refTE:
"[| ¬is_refT T; T = Void ∨ T = Boolean ∨ T = Integer ==> P |] ==> P"
(*<*)by (cases T, auto simp add: is_refT_def)(*>*)
end
lemma
is_refT NT
lemma
is_refT (Class C)
lemma refTE:
[| is_refT T; T = NT ==> P; !!C. T = Class C ==> P |] ==> P
lemma not_refTE:
[| ¬ is_refT T; T = Void | T = Boolean | T = Integer ==> P |] ==> P