Various little changes like cmethd -> method and cfield -> field.
1 (* Title: HOL/MicroJava/J/TypeRel.thy
3 Author: David von Oheimb
4 Copyright 1999 Technische Universitaet Muenchen
6 The relations between Java types
12 subcls1 :: "'c prog \\<Rightarrow> (cname \\<times> cname) set" (* subclass *)
14 cast :: "'c prog \\<Rightarrow> (ty \\<times> ty) set" (* casting *)
17 subcls1 :: "'c prog \\<Rightarrow> [cname, cname] \\<Rightarrow> bool" ("_\\<turnstile>_\\<prec>C1_" [71,71,71] 70)
18 subcls :: "'c prog \\<Rightarrow> [cname, cname] \\<Rightarrow> bool" ("_\\<turnstile>_\\<prec>C _" [71,71,71] 70)
19 widen :: "'c prog \\<Rightarrow> [ty, ty] \\<Rightarrow> bool" ("_\\<turnstile>_\\<preceq>_" [71,71,71] 70)
20 cast :: "'c prog \\<Rightarrow> [ty, ty] \\<Rightarrow> bool" ("_\\<turnstile>_\\<Rightarrow>? _"[71,71,71] 70)
23 "G\\<turnstile>C \\<prec>C1 D" == "(C,D) \\<in> subcls1 G"
24 "G\\<turnstile>C \\<prec>C D" == "(C,D) \\<in> (subcls1 G)^+"
25 "G\\<turnstile>S \\<preceq> T" == "(S,T) \\<in> widen G"
26 "G\\<turnstile>S \\<Rightarrow>? T" == "(S,T) \\<in> cast G"
30 (* direct subclass, cf. 8.1.3 *)
31 subcls1_def "subcls1 G \\<equiv> {(C,D). \\<exists>c. class G C = Some c \\<and> fst c = Some D}"
35 method :: "'c prog \\<times> cname \\<Rightarrow> ( sig \\<leadsto> cname \\<times> ty \\<times> 'c)"
36 field :: "'c prog \\<times> cname \\<Rightarrow> ( vname \\<leadsto> cname \\<times> ty)"
37 fields :: "'c prog \\<times> cname \\<Rightarrow> ((vname \\<times> cname) \\<times> ty) list"
39 constdefs (* auxiliary relations for recursive definitions below *)
41 subcls1_rel :: "(('c prog \\<times> cname) \\<times> ('c prog \\<times> cname)) set"
42 "subcls1_rel \\<equiv> {((G,C),(G',C')). G = G' \\<and> wf ((subcls1 G)^-1) \\<and> G\\<turnstile>C'\\<prec>C1C}"
44 (* methods of a class, with inheritance, overriding and hiding, cf. 8.4.6 *)
45 recdef method "subcls1_rel"
46 "method (G,C) = (if wf((subcls1 G)^-1) then (case class G C of None \\<Rightarrow> empty
47 | Some (sc,fs,ms) \\<Rightarrow> (case sc of None \\<Rightarrow> empty | Some D \\<Rightarrow>
48 if is_class G D then method (G,D)
49 else arbitrary) \\<oplus>
50 map_of (map (\\<lambda>(s, m ).
54 (* list of fields of a class, including inherited and hidden ones *)
55 recdef fields "subcls1_rel"
56 "fields (G,C) = (if wf((subcls1 G)^-1) then (case class G C of None \\<Rightarrow> arbitrary
57 | Some (sc,fs,ms) \\<Rightarrow> map (\\<lambda>(fn,ft). ((fn,C),ft)) fs@
58 (case sc of None \\<Rightarrow> [] | Some D \\<Rightarrow>
59 if is_class G D then fields (G,D)
64 field_def "field \\<equiv> map_of o (map (\\<lambda>((fn,fd),ft). (fn,(fd,ft)))) o fields"
66 inductive "widen G" intrs (*widening, viz. method invocation conversion, cf. 5.3
67 i.e. sort of syntactic subtyping *)
68 refl "G\\<turnstile> T \\<preceq> T" (* identity conv., cf. 5.1.1 *)
69 subcls "G\\<turnstile>C\\<prec>C D \\<Longrightarrow> G\\<turnstile>Class C \\<preceq> Class D"
70 null "G\\<turnstile> NT \\<preceq> RefT R"
72 inductive "cast G" intrs (* casting / narr.ref. conversion, cf. 5.5 / 5.1.5 *)
73 widen "G\\<turnstile>S\\<preceq>T \\<Longrightarrow> G\\<turnstile> S \\<Rightarrow>? T"
74 subcls "G\\<turnstile>C\\<prec>C D \\<Longrightarrow> G\\<turnstile>Class D \\<Rightarrow>? Class C"