68 (** unfortunately cannot simply instantiate tnam **) |
68 (** unfortunately cannot simply instantiate tnam **) |
69 datatype tnam' = HasFoo' | Base' | Ext' | Main' |
69 datatype tnam' = HasFoo' | Base' | Ext' | Main' |
70 datatype vnam' = arr' | vee' | z' | e' |
70 datatype vnam' = arr' | vee' | z' | e' |
71 datatype label' = lab1' |
71 datatype label' = lab1' |
72 |
72 |
73 consts |
73 axiomatization |
74 |
74 tnam' :: "tnam' \<Rightarrow> tnam" and |
75 tnam' :: "tnam' \<Rightarrow> tnam" |
75 vnam' :: "vnam' \<Rightarrow> vname" and |
76 vnam' :: "vnam' \<Rightarrow> vname" |
|
77 label':: "label' \<Rightarrow> label" |
76 label':: "label' \<Rightarrow> label" |
78 axioms (** tnam', vnam' and label are intended to be isomorphic |
77 where |
|
78 (** tnam', vnam' and label are intended to be isomorphic |
79 to tnam, vname and label **) |
79 to tnam, vname and label **) |
80 |
80 |
81 inj_tnam' [simp]: "(tnam' x = tnam' y) = (x = y)" |
81 inj_tnam' [simp]: "\<And>x y. (tnam' x = tnam' y) = (x = y)" and |
82 inj_vnam' [simp]: "(vnam' x = vnam' y) = (x = y)" |
82 inj_vnam' [simp]: "\<And>x y. (vnam' x = vnam' y) = (x = y)" and |
83 inj_label' [simp]: "(label' x = label' y) = (x = y)" |
83 inj_label' [simp]: "\<And>x y. (label' x = label' y) = (x = y)" and |
84 |
84 |
85 |
85 surj_tnam': "\<And>n. \<exists>m. n = tnam' m" and |
86 surj_tnam': "\<exists>m. n = tnam' m" |
86 surj_vnam': "\<And>n. \<exists>m. n = vnam' m" and |
87 surj_vnam': "\<exists>m. n = vnam' m" |
87 surj_label':" \<And>n. \<exists>m. n = label' m" |
88 surj_label':" \<exists>m. n = label' m" |
|
89 |
88 |
90 abbreviation |
89 abbreviation |
91 HasFoo :: qtname where |
90 HasFoo :: qtname where |
92 "HasFoo == \<lparr>pid=java_lang,tid=TName (tnam' HasFoo')\<rparr>" |
91 "HasFoo == \<lparr>pid=java_lang,tid=TName (tnam' HasFoo')\<rparr>" |
93 |
92 |
147 defs |
146 defs |
148 |
147 |
149 Object_mdecls_def: "Object_mdecls \<equiv> []" |
148 Object_mdecls_def: "Object_mdecls \<equiv> []" |
150 SXcpt_mdecls_def: "SXcpt_mdecls \<equiv> []" |
149 SXcpt_mdecls_def: "SXcpt_mdecls \<equiv> []" |
151 |
150 |
152 consts |
151 axiomatization |
|
152 foo :: mname |
|
153 |
|
154 definition |
|
155 foo_sig :: sig |
|
156 where "foo_sig = \<lparr>name=foo,parTs=[Class Base]\<rparr>" |
153 |
157 |
154 foo :: mname |
158 definition |
155 |
159 foo_mhead :: mhead |
156 definition foo_sig :: sig |
160 where "foo_mhead = \<lparr>access=Public,static=False,pars=[z],resT=Class Base\<rparr>" |
157 where "foo_sig \<equiv> \<lparr>name=foo,parTs=[Class Base]\<rparr>" |
161 |
158 |
162 definition |
159 definition foo_mhead :: mhead |
163 Base_foo :: mdecl |
160 where "foo_mhead \<equiv> \<lparr>access=Public,static=False,pars=[z],resT=Class Base\<rparr>" |
164 where "Base_foo = (foo_sig, \<lparr>access=Public,static=False,pars=[z],resT=Class Base, |
161 |
|
162 definition Base_foo :: mdecl |
|
163 where "Base_foo \<equiv> (foo_sig, \<lparr>access=Public,static=False,pars=[z],resT=Class Base, |
|
164 mbody=\<lparr>lcls=[],stmt=Return (!!z)\<rparr>\<rparr>)" |
165 mbody=\<lparr>lcls=[],stmt=Return (!!z)\<rparr>\<rparr>)" |
165 |
166 |
166 definition Ext_foo :: mdecl |
167 definition Ext_foo :: mdecl |
167 where "Ext_foo \<equiv> (foo_sig, |
168 where "Ext_foo = (foo_sig, |
168 \<lparr>access=Public,static=False,pars=[z],resT=Class Ext, |
169 \<lparr>access=Public,static=False,pars=[z],resT=Class Ext, |
169 mbody=\<lparr>lcls=[] |
170 mbody=\<lparr>lcls=[] |
170 ,stmt=Expr({Ext,Ext,False}Cast (Class Ext) (!!z)..vee := |
171 ,stmt=Expr({Ext,Ext,False}Cast (Class Ext) (!!z)..vee := |
171 Lit (Intg 1)) ;; |
172 Lit (Intg 1)) ;; |
172 Return (Lit Null)\<rparr> |
173 Return (Lit Null)\<rparr> |
173 \<rparr>)" |
174 \<rparr>)" |
174 |
175 |
175 definition arr_viewed_from :: "qtname \<Rightarrow> qtname \<Rightarrow> var" where |
176 definition |
176 "arr_viewed_from accC C \<equiv> {accC,Base,True}StatRef (ClassT C)..arr" |
177 arr_viewed_from :: "qtname \<Rightarrow> qtname \<Rightarrow> var" |
177 |
178 where "arr_viewed_from accC C = {accC,Base,True}StatRef (ClassT C)..arr" |
178 definition BaseCl :: "class" where |
179 |
179 "BaseCl \<equiv> \<lparr>access=Public, |
180 definition |
|
181 BaseCl :: "class" where |
|
182 "BaseCl = \<lparr>access=Public, |
180 cfields=[(arr, \<lparr>access=Public,static=True ,type=PrimT Boolean.[]\<rparr>), |
183 cfields=[(arr, \<lparr>access=Public,static=True ,type=PrimT Boolean.[]\<rparr>), |
181 (vee, \<lparr>access=Public,static=False,type=Iface HasFoo \<rparr>)], |
184 (vee, \<lparr>access=Public,static=False,type=Iface HasFoo \<rparr>)], |
182 methods=[Base_foo], |
185 methods=[Base_foo], |
183 init=Expr(arr_viewed_from Base Base |
186 init=Expr(arr_viewed_from Base Base |
184 :=New (PrimT Boolean)[Lit (Intg 2)]), |
187 :=New (PrimT Boolean)[Lit (Intg 2)]), |
185 super=Object, |
188 super=Object, |
186 superIfs=[HasFoo]\<rparr>" |
189 superIfs=[HasFoo]\<rparr>" |
187 |
190 |
188 definition ExtCl :: "class" where |
191 definition |
189 "ExtCl \<equiv> \<lparr>access=Public, |
192 ExtCl :: "class" where |
|
193 "ExtCl = \<lparr>access=Public, |
190 cfields=[(vee, \<lparr>access=Public,static=False,type= PrimT Integer\<rparr>)], |
194 cfields=[(vee, \<lparr>access=Public,static=False,type= PrimT Integer\<rparr>)], |
191 methods=[Ext_foo], |
195 methods=[Ext_foo], |
192 init=Skip, |
196 init=Skip, |
193 super=Base, |
197 super=Base, |
194 superIfs=[]\<rparr>" |
198 superIfs=[]\<rparr>" |
195 |
199 |
196 definition MainCl :: "class" where |
200 definition |
197 "MainCl \<equiv> \<lparr>access=Public, |
201 MainCl :: "class" where |
|
202 "MainCl = \<lparr>access=Public, |
198 cfields=[], |
203 cfields=[], |
199 methods=[], |
204 methods=[], |
200 init=Skip, |
205 init=Skip, |
201 super=Object, |
206 super=Object, |
202 superIfs=[]\<rparr>" |
207 superIfs=[]\<rparr>" |
203 (* The "main" method is modeled seperately (see tprg) *) |
208 (* The "main" method is modeled seperately (see tprg) *) |
204 |
209 |
205 definition HasFooInt :: iface |
210 definition |
206 where "HasFooInt \<equiv> \<lparr>access=Public,imethods=[(foo_sig, foo_mhead)],isuperIfs=[]\<rparr>" |
211 HasFooInt :: iface |
207 |
212 where "HasFooInt = \<lparr>access=Public,imethods=[(foo_sig, foo_mhead)],isuperIfs=[]\<rparr>" |
208 definition Ifaces ::"idecl list" |
213 |
209 where "Ifaces \<equiv> [(HasFoo,HasFooInt)]" |
214 definition |
210 |
215 Ifaces ::"idecl list" |
211 definition "Classes" ::"cdecl list" |
216 where "Ifaces = [(HasFoo,HasFooInt)]" |
212 where "Classes \<equiv> [(Base,BaseCl),(Ext,ExtCl),(Main,MainCl)]@standard_classes" |
217 |
|
218 definition |
|
219 "Classes" ::"cdecl list" |
|
220 where "Classes = [(Base,BaseCl),(Ext,ExtCl),(Main,MainCl)]@standard_classes" |
213 |
221 |
214 lemmas table_classes_defs = |
222 lemmas table_classes_defs = |
215 Classes_def standard_classes_def ObjectC_def SXcptC_def |
223 Classes_def standard_classes_def ObjectC_def SXcptC_def |
216 |
224 |
217 lemma table_ifaces [simp]: "table_of Ifaces = empty(HasFoo\<mapsto>HasFooInt)" |
225 lemma table_ifaces [simp]: "table_of Ifaces = empty(HasFoo\<mapsto>HasFooInt)" |